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;
}