Salve a tutti, mi sto approcciando per la prima volta alle socket, volevo creare 2 semplici programmi (Server e Client) che tramite protocollo TCP si scambiassero un saluto. Purtroppo ho riscontrato dei problemi nella creazione della variabile SOCKET che contiene le specifiche sul tipo di indirizzo(es. IPV4 o IPV6), Il tipo di protocollo di trasporto(es. SOCK_STREAM o SOCK_DGRAM) e il protocollo da utilizzare(es. TCP o UDP). Il problema si pone quando pongo la condizione per controllare che la variabile sia giusta, ciò tramite una condizione IF: if(sock == INVALID_SOCKET). Quindi se la condizione si verifica la socket è invalida, però non riesco a capire dove sia il problema, ho ricontrollato più e più volte senza concludere nulla.
Questo è il codice completo del Server:
#include <iostream>
#include <winsock2.h>
#include <windows.h>
using namespace std;
int main()
{
WSADATA WSAData;
SOCKET sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
sockaddr_in saddr;
saddr.sin_family = AF_INET;
saddr.sin_addr.s_addr = inet_addr("127.0.0.1"); //indirizzo locale
saddr.sin_port = htons(8000); //Porta
SOCKET client;
char sbuff [] = "Benvenuto client!";
char cbuff [64];
ZeroMemory(cbuff,64);
if(WSAStartup (MAKEWORD(2,2), &WSAData))
{
cout<<"Errore nell'inizializzazione delle socket..."<<endl;
return 0;
}
if(sock == INVALID_SOCKET)
{
cout<<"Errore nella creazione del socket... "<<WSAGetLastError()<<endl;
return 0;
}
if (bind(sock, (sockaddr*) &saddr, sizeof(sockaddr_in)))
{
cout<<"Errore nel BIND delle socket..."<<endl;
return 0;
}
listen(sock,SOMAXCONN);
client = accept(sock, NULL, NULL);
send(client, sbuff, sizeof (sbuff), 0);
recv(client, cbuff, sizeof (cbuff), 0);
closesocket(client);
closesocket(sock);
WSACleanup();
return 0;
}
Questo è l'OUT che ottengo eseguendo il programma:
Errore nella creazione del socket... 0
Grazie in anticipo!!!
PS. Come IDE utilizzo DEV-C++, lo so che è un IDE morto ma ci sono affezionato e non credo che il problema sia nell'IDE.
PSS. NON mi sono dimenticato di linkare la WS2_32.Lib.