Sangio
12-10-2011, 13:26
ciao a tutti, scrivo perchè ho un problema molto antipatico, ho studiato in preparazione ad un esame universitario cosa sono le socket e come funzionano, con alcuni esempi di loro implementazioni purtroppo (per me) in ambiene UNIX, ho cercato qualche informazione per cominciare a realizzarne una io e ho cominciato la stesura di una socket server che faccia un local echo service.
(client logga, scrive ciao e gli ritorna ciao),
purtroppo non riesce a bindare la socket ad una porta... vi riporto il codice, sarei contentissimo se mi aiutaste a risolvere!
(SO Windows XP , localhost mi da qualche problema, non riesco a fare da cmd telnet localhost oppure telnet 127.0.0.1 ma non credo sia quello).
#include <stdio.h>
#include <stdlib.h>
#include <winsock.h>
int main(int argc, char *argv[])
{
WSADATA wsaData;
if (WSAStartup(MAKEWORD(1,1), &wsaData) !=0){
printf("Winsock startup fallito\n");
exit(1);
}
int sock,nsock;
char buf[10];
struct sockaddr_in server,client;
server.sin_family=PF_INET;
server.sin_addr.s_addr = INADDR_ANY;
server.sin_port = htons(atoi(argv[1]));
if(sock = socket(PF_INET,SOCK_STREAM,0) ==-1)
{
printf("Error while creating the socket!\n");
system("PAUSE");
return 1;
}
printf("Ok, socket creata con id %d,\n",sock);
int sockaddr_len = sizeof(INADDR_ANY);
if(bind (sock, (struct sockaddr*)&server,sockaddr_len)==-1)
{
printf("Error while binding!\n");
system("PAUSE");
return 1;
}
printf("Ok, socket bindata alla porta %d dell' indirizzo %d\n",ntohs(server.sin_port), ntohs(server.sin_addr.s_addr));
if(listen(sock,2)==-1)
{
printf("Error while listening!\n");
system("PAUSE");
return 1;
}
while(1){
/*printf("Nuova sock, esito: %d\n",nsock=accept(sock, (struct sockaddr *)&client, &sockaddr_len)); /*continua a ripetere la frase perchè non fa
correttamente bind nè listen, quindi non riesce ad andare in recv */
recv(nsock,buf,1024,0);
send(nsock,buf,1024,0);
close(nsock);
}
system("PAUSE");
return 0;
}
usando netstat non rilevo alcuna attivita sulla porta che scelgo mentre richiamo il programma, e quest ultimo non procede oltre la fase di binding (ritorna solo "Error while binding.").
GRAZIE!
(client logga, scrive ciao e gli ritorna ciao),
purtroppo non riesce a bindare la socket ad una porta... vi riporto il codice, sarei contentissimo se mi aiutaste a risolvere!
(SO Windows XP , localhost mi da qualche problema, non riesco a fare da cmd telnet localhost oppure telnet 127.0.0.1 ma non credo sia quello).
#include <stdio.h>
#include <stdlib.h>
#include <winsock.h>
int main(int argc, char *argv[])
{
WSADATA wsaData;
if (WSAStartup(MAKEWORD(1,1), &wsaData) !=0){
printf("Winsock startup fallito\n");
exit(1);
}
int sock,nsock;
char buf[10];
struct sockaddr_in server,client;
server.sin_family=PF_INET;
server.sin_addr.s_addr = INADDR_ANY;
server.sin_port = htons(atoi(argv[1]));
if(sock = socket(PF_INET,SOCK_STREAM,0) ==-1)
{
printf("Error while creating the socket!\n");
system("PAUSE");
return 1;
}
printf("Ok, socket creata con id %d,\n",sock);
int sockaddr_len = sizeof(INADDR_ANY);
if(bind (sock, (struct sockaddr*)&server,sockaddr_len)==-1)
{
printf("Error while binding!\n");
system("PAUSE");
return 1;
}
printf("Ok, socket bindata alla porta %d dell' indirizzo %d\n",ntohs(server.sin_port), ntohs(server.sin_addr.s_addr));
if(listen(sock,2)==-1)
{
printf("Error while listening!\n");
system("PAUSE");
return 1;
}
while(1){
/*printf("Nuova sock, esito: %d\n",nsock=accept(sock, (struct sockaddr *)&client, &sockaddr_len)); /*continua a ripetere la frase perchè non fa
correttamente bind nè listen, quindi non riesce ad andare in recv */
recv(nsock,buf,1024,0);
send(nsock,buf,1024,0);
close(nsock);
}
system("PAUSE");
return 0;
}
usando netstat non rilevo alcuna attivita sulla porta che scelgo mentre richiamo il programma, e quest ultimo non procede oltre la fase di binding (ritorna solo "Error while binding.").
GRAZIE!