Bonjour,
Jai suivi ce tutoriel et copié le code tel qu'il est http://melem.developpez.com/tutoriel...ndows/winsock/
Juste pour pour tester en mode UDP l'envoi d'un message "bonjour" puis affichage du côté serveur.
Programme Client:
Au niveau client ça marche bien.
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 #include <stdio.h> #include <stdlib.h> #include <windows.h> #include <winsock2.h> int main() { WSADATA wsaData; if (WSAStartup(MAKEWORD(2, 0), &wsaData) != 0) /* La fonction WSAStartup a echoue */ ; else { /* ... On peut continuer ... */ SOCKET s; s = socket(PF_INET,SOCK_DGRAM,IPPROTO_UDP); if (s == INVALID_SOCKET) /*La fonction socket a échoué*/ printf("problème de socket"); else { /*Libérer le socket*/ SOCKADDR_IN server; //Machine à laquelle se connecter server.sin_family = AF_INET; server.sin_addr.s_addr = inet_addr("127.0.0.1"); server.sin_port = htons(5050); memset(&server.sin_zero, '\0', sizeof(server.sin_zero)); /* Connexion reussie ! */ char buffer[100]= "Bonjour\n"; sendto(s, buffer, (int)strlen(buffer), 0, (SOCKADDR *)&server, sizeof(server)); printf("Message envoyé"); shutdown(s, SD_SEND); closesocket(s); } /* Mais il faut appeler WSACleanup a la fin */ WSACleanup(); } return 0; }
Programme Serveur:
Au niveau serveur, j'ai fait des test de printf le programme marche jusqu'à la fonction recvfrom() qui continue à tourner sans rien renvoyer.
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
53
54
55 #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_server; s_server = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP); if (s_server == INVALID_SOCKET) fprintf(stderr, "La fonction socket a echoue.\n"); else { SOCKADDR_IN server; server.sin_family = AF_INET; server.sin_addr.s_addr = htonl(INADDR_ANY); server.sin_port = htons(5050); memset(&server.sin_zero, '\0', sizeof(server.sin_zero)); if (bind(s_server, (SOCKADDR *)&server, sizeof(server)) == SOCKET_ERROR) fprintf(stderr, "La fonction bind a echoue.\n"); else { SOCKADDR_IN client; int csize = sizeof(client); char buffer[100]; int n; n = recvfrom(s_server, buffer, sizeof(buffer)- 1, 0, (SOCKADDR *)&client, &csize); if (n != SOCKET_ERROR) { printf("tst"); buffer[n] = '\0'; printf("Un message de %s: %s",inet_ntoa(client.sin_addr), buffer); printf("recu"); } else printf("error_socket"); } closesocket(s_server); } WSACleanup(); } return 0; }
J'ai désactivé l'antivirus, les firewall, j'ai testé avec d'autres numéros de ports.. , rien.
J'ai essayé de me tourner vers php en réadaptant le code, et apparemment c'est le même problème à la réception.
So help plz ! Merci d'avance.
Partager