Mi basterebbe che qualcuno commentasse nei minimi dettagli questo codice che ho trovato(in rete) e ho cercato di minimizzare.
Mi piacerebbe che qualcuno commentasse sopreattutto la parte server relativa a qule ip interfacciarsi e a cosa serve la variabile p.
Server:
codice:
#include <windows.h>
#include <winsock.h>
#include <stdio.h>
#define MAX_STRING 256
int main(int argn,char **argv){
SOCKET miosock,client;
struct sockaddr_in miosock_addr,client_addr;
WSADATA data;
WORD p;
int len(char *);
int lun, err=0;
p=MAKEWORD(2,0);
err=WSAStartup(p,&data);
miosock=socket(AF_INET,SOCK_STREAM,0);
miosock_addr.sin_family=AF_INET;
miosock_addr.sin_port=htons(atoi("1111"));
miosock_addr.sin_addr.s_addr=INADDR_ANY;
err=bind(miosock,(struct sockaddr*)&miosock_addr,sizeof(struct sockaddr_in));
err=listen(miosock,1);
lun=sizeof (struct sockaddr);
client=accept(miosock,(struct sockaddr*)&client_addr,&lun);
if (err!=0) printf ("Errore connessione");
//**************dialogo***************//
char mex[2000];
recv(client,mex,2000,0);
printf("%s\n\n",mex);
closesocket (client);
closesocket(miosock);
WSACleanup();
getchar();
return 0;
}
Client:
codice:
#include <windows.h>
#include <winsock.h> //includo le varie librerie tra cui quella winsock
#include <stdio.h>
int main(int argn,char **argv)
{
int err = 0;
SOCKET sock; // creo la socket chiamato sock che userò nella connessione
struct sockaddr_in sock_addr; // inizializzo la socket
WSADATA data; // inizializzo la variabile che contiene le primitive di Winsock
WORD p;
p=MAKEWORD(2,0); // creo la variabile p che contiene la versione della wsock32.dll
char messaggio[2000];
int errori = 0;
err = WSAStartup(p,&data); // inizializzo la wsock32.dll verificandone la mancanza di errori
sock=socket(AF_INET,SOCK_STREAM,0); // creo la socket indicandone le caratteristiche
sock_addr.sin_family=AF_INET; // indico il protocollo utilizzato (TCP/IP)
sock_addr.sin_port=htons(1111); //indico la porta a cui connettere la socket
sock_addr.sin_addr.S_un.S_un_b.s_b1=127; // indico l'indirizzo IP
sock_addr.sin_addr.S_un.S_un_b.s_b2=0;
sock_addr.sin_addr.S_un.S_un_b.s_b3=0;
sock_addr.sin_addr.S_un.S_un_b.s_b4=1;
err = connect(sock,(struct sockaddr*)&sock_addr,sizeof(struct sockaddr)); // mi connetto all'indirizzo scelto
//*********************dialogo***********************//
printf("commands> ");
gets(messaggio);
errori = send(sock,messaggio,2000,0);
if (errori == 2000){
printf("2000 comando: %s\n",messaggio);
}
else {
printf("errore send() %d\n" ,errori);
}
closesocket(sock); // chiudo la socket
WSACleanup(); //libero le risorse utilizzate dalla libreria Winsock
printf("\n\n%d\n",err);
getchar();
return 0;
}