ho risolto diversi problemi completando il codice:
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";
//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);
if(clientid<0) cout<<"errore di accept\n";else cout<<clientid<<endl;
sleep(5);
}
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("192.168.1.109"); //<--indirizzo locale
//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";
sleep(5);
}
il fatto è che qui ho usato un indirizzo locale, se invece provo ad usare l'indirizzo ip (preso da quel sito di prima) e mettere i due programmi in macchine collegate a reti diverse la connessione non avviene. Sbaglio forse a scegliere l'indirizzo da passare a gethostbyname() ?