ecco il codice del server:
codice:
#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();
}
client
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);
}
la connessione si stabilisce (viene stampato "connesso").
il fatto è che il server non riceve affatto il messaggio (viene stampato sempre "nope");
lavoro su un linux 32 bit. compilatore gcc, ide Codeblocks