La Programmazione Client/Server in C
Ven 21 Dic 2007
   





Il Codice



server.c
  1. #include <stdio.h>
  2. #include <winsock.h>
  3. #include <string.h>
  4.  
  5. int main(int argc, char *argv[])
  6. {
  7. SOCKET listenSocket;
  8. SOCKET remoteSocket;
  9. SOCKADDR_IN Server_addr;
  10. SOCKADDR_IN Client_addr;
  11. int sin_size;
  12. short port;
  13.  
  14. char buffer[256];
  15.  
  16. int wsastartup;
  17. int ls_result;
  18.  
  19. /* Inizializzazione della libreria Socket */
  20. WORD wVersionRequested = MAKEWORD(2,2);
  21. WSADATA wsaData;
  22. wsastartup = WSAStartup(wVersionRequested, &wsaData);
  23. if (wsastartup != NO_ERROR) printf("Errore WSAStartup()\n");
  24.  
  25. /* Creazione della Socket che si porrà in ascolto di richieste del Client*/
  26. listenSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
  27. if (listenSocket < 0)
  28. printf("Server: errore nella creazione della socket.\n");
  29. else printf("La Listening Socket è partita\n");
  30.  
  31. /* Effettua la bind sull’indirizzo e porta ora specificati */
  32. port = 4000;
  33.  
  34. Server_addr.sin_family = AF_INET;
  35. Server_addr.sin_addr.s_addr = "127.0.0.1";
  36. Server_addr.sin_port = htons(port);
  37.  
  38. if (bind(listenSocket,(LPSOCKADDR)&Server_addr,sizeof(struct sockaddr)) < 0)
  39. printf("Server: errore durante la bind.\n");
  40.  
  41. /* La socket si pone in "ascolto" tramite la listen() */
  42. ls_result = listen(listenSocket, SOMAXCONN);
  43. if (ls_result < 0) printf("Server: errore durante la listen.\n");
  44. else printf("La Socket è in Ascolto\n");
  45.  
  46. /* La socket accetta la richiesta di connessione del Client */
  47. sin_size = sizeof(struct sockaddr_in);
  48. remoteSocket = accept(listenSocket, (struct sockaddr *)&Client_addr,
  49. &sin_size);
  50. printf("Accettata Connessione con Client: %s\n",
  51. inet_ntoa(Client_addr.sin_addr));
  52.  
  53. /* Il Server accetta il messaggio dal Client */
  54. recv(remoteSocket, buffer, sizeof(buffer), 0);
  55. printf("Messaggio Arrivato: %s \n", buffer);
  56.  
  57. printf("Chiudo il Server");
  58. close(remoteSocket);
  59. WSACleanup();
  60.  
  61. system("pause");
  62. return 0;
  63. }
 

client.c
  1. #include <stdio.h>
  2. #include <winsock.h>
  3. #include <string.h>
  4.  
  5. int main()
  6. {
  7. SOCKET clientsocket;
  8. SOCKADDR_IN addr;
  9.  
  10. char messaggio[80];
  11. short port;
  12.  
  13. WORD wVersionRequested = MAKEWORD(2,2);
  14. WSADATA wsaData;
  15. WSAStartup(wVersionRequested, &wsaData);
  16.  
  17. port = 4000;
  18.  
  19. addr.sin_family = AF_INET;
  20. addr.sin_addr.s_addr = inet_addr("127.0.0.1");
  21. addr.sin_port = htons(port);
  22. clientsocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
  23. if (connect(clientsocket, (LPSOCKADDR)&addr, sizeof(addr)) < 0)
  24. printf("Errore nella connessione con il Server");
  25.  
  26. printf("Messaggio da Inviare: ");
  27. gets(messaggio);
  28. send(clientsocket,messaggio,sizeof(messaggio),0);
  29.  
  30. WSACleanup();
  31. system("pause");
  32. return 0;
  33. }

Pagina 3 di 3
Prec 1 2 3 Succ