|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Sep 2005
Messaggi: 218
|
[C] - SOCKET SELECT CHAT SOWFTWARE
Ciao a tutti, ho realizzato per un progetto universitario un server che gestisca (tramite le socket) in ambiente windows , diverse connessioni in lettura/scrittura per un servizio di chat.
Ogni client all' avvio da come parametro un numero da 1 a 9 che indica quale PC sta usando e può scrivere / ricevere messaggi indicando un destinatario (pcX con X= ad un numero) ed un testo. Per la parte client ho usato due programmi, da avviare in parallelo, client-send e client-recv , in uno ho il continuo prompt per scrivere msg, salvarli in un buffer ed inviarli al server(che li recapita), nell' altro ho continue recv per mostrare a video mittente e messaggi ricevuti. Per ultimare il progetto dovrei unire i due programmi in uno solo, se stessi usando Unix userei dei p_thread e la chiamata fork(). in ambiente Windows non so come comportarmi, di seguito riporto i 2 programmi client-send e client-recv, qualcuno di voi ha voglia di darmi una mano? grazie infinite! CLIENT SEND int sd,status,addrlen=sizeof(struct sockaddr_in); struct sockaddr_in server; char buffer[80]; char dest[5]; char ok[3]; char role[5]={"send"}; server.sin_family=PF_INET; server.sin_addr.s_addr=inet_addr("172.25.14.47"); server.sin_port=htons(atoi("4000")); sd=socket(PF_INET,SOCK_STREAM,0); status = connect(sd,(struct sockaddr*)&server,addrlen); status = send(sd,argv[1],2,0); send(sd,role,5,0); while(1){ printf("@: "); scanf("%s",dest); send(sd,dest,5,0); if(strcmp(dest,"quit")==0) break; recv(sd,ok,3,0); if(strcmp(ok,"ok")!=0) { printf("Destinatario NON corretto.\n"); continue; } printf(": "); // RICHIESTA DEL TESTO getchar(); gets(buffer); send(sd,buffer,80,0); status = recv(sd,ok,3,0); if(status<0) { printf("Server disconnesso.\n"); break; } if(strcmp(ok,"ok")!=0) printf("Errore!\n"); } CLIENT RECV int sd,status,addrlen=sizeof(struct sockaddr_in),result; struct sockaddr_in server; char buffer[80]; char mitt[5]; char role[5]={"recv"}; server.sin_family=PF_INET; server.sin_addr.s_addr=inet_addr("172.25.14.47"); server.sin_port=htons(atoi("4000")); sd=socket(PF_INET,SOCK_STREAM,0); status = connect(sd,(struct sockaddr*)&server,addrlen); status = send(sd,argv[1],2,0); send(sd,role,5,0); while(1){ result = recv(sd,mitt,5,0); recv(sd,buffer,80,0); if(result<0) { printf("Server disconnesso!.\n"); break; } printf("%s : %s.\n",mitt,buffer); } ho tralasciato le librerie/int main e le WSAStartup per semplicità e brevità del msg. GRAZIE DI NUOVO ;-) |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 18:24.



















