// SERVER
#include <stdio.h>
#include <windows.h>
#include <winsock.h>
#define PORT 4000
#define LBUF 10
SOCKET sock;
SOCKADDR addr;
void MsgProc();
void main()
{
printf("Questo server accetta 5 connessioni sulla porta %d\n",PORT);
// INIZIALIZZO LA STRUTTURA INDICANDO PROTOCOLLO E IP SU DOVE ESEGUIRE
SOCKADDR_IN addr_in;
addr_in.sin_family=AF_INET;
addr_in.sin_port=PORT;
addr_in.sin_addr.S_un.S_un_b.s_b1=127;
addr_in.sin_addr.S_un.S_un_b.s_b2=0;
addr_in.sin_addr.S_un.S_un_b.s_b3=0;
addr_in.sin_addr.S_un.S_un_b.s_b4=1;
memcpy(&addr,&addr_in,sizeof(SOCKADDR_IN));
SOCKET temp=NULL;
// INIZIALIZZO I WINSOCKETS
WSADATA dat;
WORD ver=MAKEWORD(1,1);
int res;
printf("WSAStartup: %d Version %d\n",(res=WSAStartup(ver,&dat)),ver);
if(res!=0)
return;
// SETTO LA CONNESSIONE
sock=socket(PF_INET,SOCK_STREAM,0);
printf("Binding socket: %d\n",bind(sock,&addr,sizeof(addr)));
printf("Listen mode: %d\n",listen(sock,5));
//qui entra in ballo quello temporaneo
while((temp=accept(sock,&addr,NULL))==SOCKET_ERROR );
sock=temp; //passo temp al socket creato inizialmente
if(sock)
MsgProc();
WSACleanup();
}
void MsgProc()
{
char buf[10];
int res=1;
while((res=recv(sock,buf,LBUF,0))!=SOCKET_ERROR)
{
if(res==0||res==WSAECONNRESET||res==WSAECONNABORTE D)
{
printf("Client terminated connection\n");
break;
}
_flushall();//probably not needed
printf("Recieved string: %s\n",buf);
send(sock,buf,LBUF,0);
}
closesocket(sock);
}
// CLIENT
#include <stdio.h>
#include <windows.h>
#include <winsock.h>
#include <process.h>
#define PORT 4000
#define LSTRING 10
SOCKET sock=NULL;
SOCKADDR addr;
void MsgProc();
void main()
{
WSADATA dat;
WORD ver=MAKEWORD(2,2);
int res;
SOCKADDR_IN addr_in;
addr_in.sin_family=AF_INET;
addr_in.sin_port=PORT;
addr_in.sin_addr.S_un.S_un_b.s_b1=127;
addr_in.sin_addr.S_un.S_un_b.s_b2=0;
addr_in.sin_addr.S_un.S_un_b.s_b3=0;
addr_in.sin_addr.S_un.S_un_b.s_b4=1;
memcpy(&addr,&addr_in,sizeof(SOCKADDR_IN));
printf("Remember, 0s are good\n");
printf("WSAStartup: %d. Version %d\n",(res=WSAStartup(ver,&dat)),ver);
if(res!=0)
return;
sock=socket(PF_INET,SOCK_STREAM,0);
printf("Connect: %d\n",(res=connect(sock,&addr,sizeof(addr))));
if(sock==NULL||res!=0)
return;
MsgProc();
WSACleanup();
}
void MsgProc()
{
char str[LSTRING]="";
int res;
while(stricmp(str,"exit")!=0){
printf("String to send: ");
gets(str);
send(sock,str,LSTRING,0);
for(int i=0;(res=recv(sock,str,LSTRING,0))==SOCKET_ERROR&& i<50;i++)
Sleep(100);
if(res==0||res==WSAECONNRESET||res==WSAECONNABORTE D)
{
printf("Server terminated connection\n");
break;
}
}
closesocket(sock);
}
questi il server ed il Client, questi funzionano