Bonjour,
Merci pour le tuto! J'ai suivi les conseils et j'ai donc maintenant un serveur et un client sans erreur (qui compile sous codeblocks). J'utilise le mode non connecté.
Cependant le code du serveur ne renvoie plus rien à partir de la ligne 36 (utilisation de la fonction recvfrom). Je pense que la fonction est mal utilisée !?
J'ai qu'un PC pour tester. Je dois donc envoyer et recevoir sur l'adresse 127.0.0.1. Je pense avoir bien fait pour le client mais moins pour le serveur.
Dernière question, comment faire pour utiliser le client et le serveur dans le même projet étant donné qu'ils utilisent chacun un main. Ne sachant pas répondre j'ai créer deux projets différents : client et serveur comme vous verrez ci-dessous.
Merci d'avance,
Cordialement,
Client.c
Serveur.c
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37 #include <winsock2.h> #include <stdio.h> int main() { WSADATA wsaData; if (WSAStartup(MAKEWORD(2, 0), &wsaData) != 0) fprintf(stderr, "La fonction WSAStartup a echoue.\n"); else { SOCKET s; s = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP); if (s == INVALID_SOCKET) fprintf(stderr, "La fonction socket a echoue.\n"); else { SOCKADDR_IN dest; char buffer[100] = "Bonjour\n"; printf("coucou"); dest.sin_family = AF_INET; dest.sin_addr.s_addr = inet_addr("127.0.0.1"); dest.sin_port = htons(5050); memset(&dest.sin_zero, '\0', sizeof(dest.sin_zero)); sendto(s, buffer, (int)strlen(buffer), 0, (SOCKADDR *)&dest, sizeof(dest)); closesocket(s); } WSACleanup(); } return 0; }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52 #include <stdio.h> #include <winsock2.h> int main() { WSADATA wsaData; if (WSAStartup(MAKEWORD(2, 0), &wsaData) != 0) fprintf(stderr, "La fonction WSAStartup a echoue.\n"); else { SOCKET s; s = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP); if (s == INVALID_SOCKET) fprintf(stderr, "La fonction socket a echoue.\n"); else { SOCKADDR_IN r; /* Le recepteur (nous) */ r.sin_family = AF_INET; r.sin_addr.s_addr = htonl(INADDR_ANY); r.sin_port = htons(5050); memset(&r.sin_zero, '\0', sizeof(r.sin_zero)); if (bind(s, (SOCKADDR *)&r, sizeof(r)) == SOCKET_ERROR) fprintf(stderr, "La fonction bind a echoue.\n"); else { SOCKADDR_IN e; /* L'expediteur (d'ou vient le message ...) */ int n, esize; char buffer[100]; printf("coucou"); esize = sizeof(e); n = recvfrom(s, buffer, sizeof(buffer) - 1, 0, (SOCKADDR *)&e, &esize); printf("coucou"); /*celui ci ne s'affiche pas*/ if (n != SOCKET_ERROR) { buffer[n] = '\0'; printf("Un message de %s : %s", inet_ntoa(e.sin_addr), buffer); } } closesocket(s); } WSACleanup(); } return 0; }
Partager