Pas de dépendances
#include<stdio.h> #include<winsock2.h> #pragma comment(lib,"ws2_32.lib") void purger() { int c; while ((c = getchar()) != '\0' && c != '\n'); } int askport() { int port; printf("Port : "); scanf("%i",&port); purger(); return port; } void askIP(char ip[15]) { printf("Ip : "); scanf("%s",ip); purger(); } int dialogue(SOCKET sock,int tour) { int err = 0; char buffer[500]; while(err>=0) { memset(buffer,0,sizeof(buffer)); if (tour==1) { printf("A vous > "); scanf("%500[^\n]",buffer); purger(); err = send(sock,buffer,sizeof(buffer),0); tour = 0; } else { printf("Attente : "); err = recv(sock,buffer,sizeof(buffer),0); printf("%s\n",buffer); tour = 1; } } return 0; } int serveur() { SOCKET sock_attente; SOCKET sock_dialogue; SOCKADDR_IN csin; int len; char buffer[50]; int err=0; int port = askport(); csin.sin_family=AF_INET; csin.sin_addr.s_addr=htonl(INADDR_ANY); csin.sin_port=htons(port); sock_attente = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); if (sock_attente == INVALID_SOCKET) return -1; if (bind(sock_attente,(SOCKADDR*)&csin,sizeof(csin)) == SOCKET_ERROR) return -2; printf("Listen...\n"); if (listen(sock_attente, 1) == SOCKET_ERROR) return -3; len = sizeof(csin); printf("Attente client...\n"); sock_dialogue = accept(sock_attente, (SOCKADDR *)&csin, &len); if (sock_dialogue==INVALID_SOCKET) return -4; printf("Connection ok\n"); dialogue(sock_dialogue,0); return 0; } int client() { char ip[15]; int port; SOCKET sock; SOCKADDR_IN sin; askIP(ip); port = askport(); sin.sin_family=AF_INET; sin.sin_addr.s_addr=inet_addr(ip); sin.sin_port=htons(port); sock = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); if (sock == INVALID_SOCKET) return -1; printf("Connection...\n"); if(connect(sock,(SOCKADDR*)&sin,sizeof(sin)) == SOCKET_ERROR) return -2; printf("Connection ok\n"); dialogue(sock,1); return 0; } int main() { int choix; int ret; #ifdef WIN32 WSADATA wsa; WSAStartup(MAKEWORD(2,0),&wsa); #endif printf("Serveur = 0 ; Client = 1 : "); scanf("%d",&choix); if (choix==0) ret = serveur(); else ret = client(); printf("Retour : %d\n",ret); #ifdef WIN32 WSACleanup(); #endif return 0; }
No explanations yet.