Bonjour,
voila,
j'ai tenté de suivre le tutoriel de Walrus sur la programmation des sockets sous windows et bien que je comprenne bien le code du tutoriel, je ne peux toujours pas connecter mon client au serveur.
J'ai pour cela désactivé et mon parfeu préféré, et le parfeu interne à XP, et tester l'activité sur les ports avec 'Local ports'.
Je lance le serveur et je le retrouve bien à l'état d'écoute au port choisi, jusque là tout va bien.
Ensuite je lance le client, et là c'est un peu bizzare; il est en état d'écoute pendant deux trois secondes et ensuite disparait (s'arrête). Et donc là, reste seulement le serveur qui écoute... .
Voici le code impliqué :
D'abord, le client :
#include <iostream>
#include <winsock2.h>
#pragma comment(lib, "ws2_32.lib")
using namespace std;
void main()
{
WSADATA WSAData;
WSAStartup(MAKEWORD(2,0), &WSAData);
SOCKET sock;
SOCKADDR_IN sin;
char *buffer = new char[255];
sock = socket(AF_INET, SOCK_STREAM, 0);
sin.sin_addr.s_addr = inet_addr("x.x.x.x");
sin.sin_family = AF_INET;
sin.sin_port = htons(17224);
connect(sock, (SOCKADDR *)&sin, sizeof(sin));
recv(sock, buffer, sizeof(buffer), 0);
closesocket(sock);
WSACleanup();
}
==============================================
et ensuite, le serveur :
#include <iostream>
#include <conio.h>
#include <winsock2.h>
#pragma comment(lib, "ws2_32.lib")
using namespace std;
void main()
{
WSADATA WSAData;
WSAStartup(MAKEWORD(2,0), &WSAData);
SOCKET sock;
SOCKET csock;
SOCKADDR_IN sin;
SOCKADDR_IN csin;
sock = socket(AF_INET, SOCK_STREAM, 0);
sin.sin_addr.s_addr = INADDR_ANY;
sin.sin_family = AF_INET;
sin.sin_port = htons(17224);
bind(sock, (SOCKADDR *)&sin, sizeof(sin));
listen(sock, 0);
while(1)
{
int sinsize = sizeof(csin);
if((csock = accept(sock, (SOCKADDR *)&csin, &sinsize)) != INVALID_SOCKET)
{
send(csock, "Hello world!\r\n", 14, 0);
}
}
}
Voila, je ne vois pas ce qui cloche. j'ai essayé de me connecter à l'adresse de loopback, mais pas de changement.
Quelqu'un à t-il/elle une idée?
merci d'avance,
knd
Partager