| La Programmazione Client/Server in C | |||
| Ven 21 Dic 2007 |
|
||
Il Codice
server.c
#include <stdio.h>#include <winsock.h>#include <string.h>int main(int argc, char *argv[]){SOCKET listenSocket;SOCKET remoteSocket;SOCKADDR_IN Server_addr;SOCKADDR_IN Client_addr;int sin_size;short port;char buffer[256];int wsastartup;int ls_result;/* Inizializzazione della libreria Socket */WORD wVersionRequested = MAKEWORD(2,2);WSADATA wsaData;wsastartup = WSAStartup(wVersionRequested, &wsaData);if (wsastartup != NO_ERROR) printf("Errore WSAStartup()\n");/* Creazione della Socket che si porrà in ascolto di richieste del Client*/listenSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);if (listenSocket < 0)printf("Server: errore nella creazione della socket.\n");else printf("La Listening Socket è partita\n");/* Effettua la bind sull’indirizzo e porta ora specificati */port = 4000;Server_addr.sin_family = AF_INET;Server_addr.sin_addr.s_addr = "127.0.0.1";Server_addr.sin_port = htons(port);if (bind(listenSocket,(LPSOCKADDR)&Server_addr,sizeof(struct sockaddr)) < 0)printf("Server: errore durante la bind.\n");/* La socket si pone in "ascolto" tramite la listen() */ls_result = listen(listenSocket, SOMAXCONN);if (ls_result < 0) printf("Server: errore durante la listen.\n");else printf("La Socket è in Ascolto\n");/* La socket accetta la richiesta di connessione del Client */sin_size = sizeof(struct sockaddr_in);remoteSocket = accept(listenSocket, (struct sockaddr *)&Client_addr,&sin_size);printf("Accettata Connessione con Client: %s\n",inet_ntoa(Client_addr.sin_addr));/* Il Server accetta il messaggio dal Client */recv(remoteSocket, buffer, sizeof(buffer), 0);printf("Messaggio Arrivato: %s \n", buffer);printf("Chiudo il Server");close(remoteSocket);WSACleanup();system("pause");return 0;}
client.c
#include <stdio.h>#include <winsock.h>#include <string.h>int main(){SOCKET clientsocket;SOCKADDR_IN addr;char messaggio[80];short port;WORD wVersionRequested = MAKEWORD(2,2);WSADATA wsaData;WSAStartup(wVersionRequested, &wsaData);port = 4000;addr.sin_family = AF_INET;addr.sin_addr.s_addr = inet_addr("127.0.0.1");addr.sin_port = htons(port);clientsocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);if (connect(clientsocket, (LPSOCKADDR)&addr, sizeof(addr)) < 0)printf("Errore nella connessione con il Server");printf("Messaggio da Inviare: ");gets(messaggio);send(clientsocket,messaggio,sizeof(messaggio),0);WSACleanup();system("pause");return 0;}