Se connecter

Informatique

Programmation

Sujet : [C] Utilisation des sockets en réseau
1
abiloun
Niveau 5
13 décembre 2017 à 21:08:03

Salut tout le monde j'ai un souci avec mon code en C, je commence à utiliser les sockets pour faire du réseau, et, au moment de relier mon programme serveur avec mon client sur MON pc tout marche "niquel" mais sur un autre pc j'ai l'impression qu'il y a de la latence avec mes requetes (je fais une requête send en boucle sur mon serveuer et une requete recv en boucle sur mon client, que j'affiche ensuite, en gros)
Ici mon code :

SERVEUR :
static void display_window(char **map, char **mapcpy)
{
int ch;
pos_t player_pos;
int sock = socket(AF_INET, SOCK_STREAM, 0); //création de la socket serveur
struct sockaddr_in sin; //contexte d'adressage serveur
socklen_t ctaille; //taille
socklen_t taille = sizeof(sin);
int csock = 0;
struct sockaddr_in csin;
map_t maps;
char *buffer = "";//[4096];

init_sockaddr(&sin);
ctaille = sizeof(csin);
if (bind (sock,(struct sockaddr *)&sin, taille) == -1) {
printf("BITE");
exit (0);
}
listen(sock, 5);
player_pos = get_player_pos(map);
initscr();
noecho();
curs_set(0);
csock = accept(sock, (struct sockaddr *)&csin , &ctaille);
while (ch != ' ' && is_win(map, mapcpy, player_pos) != 1) {
printf("Connection reçue");
display_map(map);
for (int i = 0; map[i + 1]; i++) {
buffer = my_strcpy(buffer, map[i]);
send(csock, buffer, 4096, 0);
}
ch = getch();
move_player(map, ch, &player_pos, mapcpy);
refresh();
clear();
}
endwin();
printf("%s\n", map[0]);
}

CLIENT :
int main(void)
{
char buffer[4096];
int ch;
int sock = socket(AF_INET, SOCK_STREAM, 0);
struct sockaddr_in sin;

sin.sin_addr.s_addr = inet_addr("10.26.112.230");
sin.sin_family = AF_INET;
sin.sin_port = htons(25013);
initscr();
noecho();
curs_set(0);
connect(sock, (struct sockaddr *)&sin, sizeof(sin));
// ch = getch();
while (ch != ' ') {
for (int i = 0; i < 8; i++) {
recv(sock, buffer, 4096, 0);
printw("%s", buffer);
/* clear(); */
/* refresh(); */
/* if (i % 8 == 0) { */
/* ch = getch(); */
/* clear(); */
/* refresh(); */
/* clear(); */
/* } */
}
// bzero(buffer, sizeof(buffer));
refresh();
clear();
}
close(sock);
endwin();
}

PS : j'utilise la lib ncurses pour de l'affichage ^^ et mon programme permet de faire bouger ce qu'il y a d'afficher, ça marche en local d'un terminal de mon pc à un autre mais pas d'un PC à un autre.

andeunv
Niveau 21
14 décembre 2017 à 11:04:43

Indente ton code et fous ça dans une balise <code>, stp

1
Sujet : [C] Utilisation des sockets en réseau
   Retour haut de page
Consulter la version web de cette page