TESTATO!!!
codice:
// CLIENT
#include <stdio.h>
#include <windows.h>
#include <winsock.h>
#include <process.h>
SOCKET sock=NULL;
SOCKADDR addr;
void MsgProc();
void main()
{
WSADATA dat;
WORD ver=MAKEWORD(1,1);
int res;
SOCKADDR_IN addr_in;
addr_in.sin_family=AF_INET;
addr_in.sin_port=100;
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));
//auto-start server
system("start .\\debug\\srvr.exe");
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[100]="";
int res;
while(stricmp(str,"exit")!=0){
printf("String to send: ");
gets(str);
send(sock,str,100,0);
for(int i=0;(res=recv(sock,str,100,0))==SOCKET_ERROR&&i<50;i++)
Sleep(100);
if(res==0||res==WSAECONNRESET||res==WSAECONNABORTED)
{
printf("Server terminated connection\n");
break;
}
}
closesocket(sock);
}
codice:
// SERVER
#include <stdio.h>
#include <windows.h>
#include <winsock.h>
SOCKET sock;
SOCKADDR addr;
void MsgProc();
void main()
{
SOCKADDR_IN addr_in;
addr_in.sin_family=AF_INET;
addr_in.sin_port=100;
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;
WSADATA dat;
WORD ver=MAKEWORD(1,1);
int res;
printf("WSAStartup: %d Version %d\n",(res=WSAStartup(ver,&dat)),ver);
if(res!=0)
return;
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));
while((temp=accept(sock,&addr,NULL))==SOCKET_ERROR);
sock=temp;
if(sock)
MsgProc();
WSACleanup();
}
void MsgProc()
{
char buf[100];
int res=1;
while((res=recv(sock,buf,100,0))!=SOCKET_ERROR)
{
if(res==0||res==WSAECONNRESET||res==WSAECONNABORTED)
{
printf("Client terminated connection\n");
break;
}
_flushall();//probably not needed
printf("Recieved string: %s\n",buf);
send(sock,buf,100,0);
}
closesocket(sock);
}
N.B. In entrambi i file (Client.cpp e Server.cpp)
devi linkare la libreria wsock32.lib
Se utilizzi Visual C++ 6.0:
apri Menù -> Project\Setting\Link
nella casella "Object/Library Modules"
aggiungi (alla fine delle librerie linkate) wsock32.lib
...
compila e buon divertimento.
P.S. lanciando il Client, verrà avviato anche il Server...
fai attenzione alla riga di codice evidenziata in rosso
(se il Client non trova il Server) devi modificarla
inserendo il giusto indirizzo PATCH in cui si trova il
file Server srvr.exe