ecco il codice del server:
clientcodice:#include <sys/types.h> #include <sys/socket.h> #include <iostream> #include <string> #include <stdlib.h> #include <stdio.h> #include <string.h> #include <errno.h> #include <netinet/in.h> using namespace std; int main() { //creazione socket int sockid; if ((sockid=socket(AF_INET,SOCK_STREAM,0))<0) cout<<"errore creazione\n"; else cout<<"socket: "<<sockid<<endl; //creazione struttura sockaddr_in servaddr; bzero((char *) &servaddr, sizeof(servaddr)); //azzeramento servaddr.sin_family=AF_INET; servaddr.sin_port=htons(5001); servaddr.sin_addr.s_addr=INADDR_ANY; //indirizzo qualsiasi //binding if (bind(sockid, (struct sockaddr *) &servaddr, sizeof(struct sockaddr))==-1) cout<<"errore di binding "<<(errno)<<endl; else cout<<"binding effettuato\n"; //prove //fine //creo struttura del client sockaddr_in clientaddr; int clientid; //nuovo id del client unsigned int dimensionid=sizeof(clientaddr); //dimensione della struttura //ascolto listen(sockid,1); cout<<"ascolto effettuato\n"; //accetto clientid=accept(sockid,(sockaddr *) &clientaddr,&dimensionid); //trasformerà clientaddr e dimensionid in quelli del client if(clientid<0) cout<<"errore di accept\n";else cout<<clientid<<endl; char a[5]; strncpy(a,"nope",sizeof(a)); cout<<"provo a ricevere\n"; recv(sockid,a,sizeof(a),0); cout<<"risposta "<<a; getchar(); }
la connessione si stabilisce (viene stampato "connesso").codice:#include <sys/types.h> /* See NOTES */ #include <sys/socket.h> #include <iostream> #include <string.h> #include <stdlib.h> #include <stdio.h> #include <strings.h> #include <errno.h> #include <netinet/in.h> #include <netdb.h> using namespace std; int main(){ int sockid; if ((sockid=socket(AF_INET,SOCK_STREAM,0))<0) cout<<"errore creazione\n"; else cout<<"socket: "<<sockid<<endl; //ottengo l'indirizzo locale del server a partire dal "nome" hostent *hp; hp = gethostbyname("il mio indirizzo ip publico"); // //creo la struttura per il server sockaddr_in servaddr; bzero((char *) &servaddr, sizeof(servaddr)); //azzeramento servaddr.sin_family=AF_INET; servaddr.sin_port=htons(5001); bcopy( (char*)hp->h_addr,(char*)&servaddr.sin_addr.s_addr,hp->h_length ); //connetto if (connect(sockid,(struct sockaddr *) &servaddr,sizeof(servaddr)) < 0) cout<<"errore di connessione\n"; else cout<<"connesso\n"; //<-- compare! char a[5]; strncpy(a,"hy!",sizeof(a)); cout<<"provo ad inviare\n"; send(sockid,a,sizeof(a),0); getchar(); //sleep(10); }
il fatto è che il server non riceve affatto il messaggio (viene stampato sempre "nope");
lavoro su un linux 32 bit. compilatore gcc, ide Codeblocks

Rispondi quotando