Originariamente inviato da oregon
Forse questo

http://www.cact.unile.it/facilities/...apilsu236.html

ti può aiutare.
Assolutamente perfetto.




Riguardo la scelta invece del numero di porta sul client, ho utilizzato la bind anche nell'applicazione client, modificandola in questo modo (vedi grassetto):

codice:
client_mod1.cpp 


#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <strings.h>
#include <netinet/in.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>

#define MAXBUF 	 200
#define SERVPORT 7777


int main(int argc,char *argv[])
{
	char buf[MAXBUF];
	hostent* hp;
	sockaddr_in sin;
	int sock;

	if (argc!=2)
	{
		fprintf(stderr,"usage: ./client host\n");
		exit(1);
	}

	hp=gethostbyname(argv[1]);
	if (!hp)
	{
		fprintf(stderr,"client: host sconosciuto\n");
		exit(1);
	}

	bzero((char*)&sin,sizeof(sin));
	sin.sin_family=AF_INET;
	bcopy(hp->h_addr,(char*)&sin.sin_addr,hp->h_length);
	sin.sin_port=htons(SERVPORT);

	if ((sock=socket(PF_INET,SOCK_STREAM,0))<0)
	{
		perror("client: errore in socket");
		exit(1);
	}

	struct sockaddr_in sin2;

	bzero((char *)&sin2,sizeof(sin2));
	sin2.sin_family=AF_INET;
	sin2.sin_addr.s_addr=INADDR_ANY;  //in dubbio su questa riga
	sin2.sin_port=htons(6000);

	if (bind(s,(sockaddr*)&sin2,sizeof(sin2))<0)
	{
		perror("client: errore in bind");
		exit(1);
	}


	if (connect(sock,(sockaddr*)&sin,sizeof(sin)) <0)
	{
		perror("client: errore in connect");
		close(sock);
		exit(1);
	}

	while (fgets(buf,sizeof(buf),stdin))
	{
		buf[MAXBUF-1]='\0';
		send(sock,buf,strlen(buf)+1,0);
		recv(sock,buf,sizeof(buf),0);
		fputs(buf,stdout);
	}

	return 0;
}
Ero in particolare indeciso su se sin2.sin_addr.s_addr andasse inizializzato a INADDR_ANY; l'ho ricopiata dal programma server, ma non so quanto abbia senso sul client (in ogni caso, il client funziona). Secondo voi va inizializzata così? :master: