se ti interessa io avevo fatto questo qualche settimana fa, poi ho abbandonato tutto x la maturità e lo migliorerò in seguito
in pratica creca le connessioni e spedisce i msg ricevuti a tutti gli utenti connessi
codice:#include <iostream> #include "winsock2.h" #include <string.h> #define MAXmsg 100 #define MAXusr 100 using namespace std; typedef struct { char name[20]; SOCKET socket; } user; int main() { WSADATA wsaData; if ( WSAStartup(MAKEWORD(2,2), &wsaData) != NO_ERROR ) cout<<"Error at WSAStartup()\n"; SOCKET Socket; Socket = socket( AF_INET, SOCK_STREAM, IPPROTO_TCP ); if ( Socket == INVALID_SOCKET ) { cout<<"Error at socket():"<<WSAGetLastError()<<"\n"; WSACleanup(); return 1;} sockaddr_in service; service.sin_family = AF_INET; service.sin_addr.s_addr = inet_addr( "127.0.0.1" ); service.sin_port = htons( 27015 ); if ( bind( Socket, (SOCKADDR*) &service, sizeof(service) ) == SOCKET_ERROR ) { cout<<"bind() failed.\n"; closesocket(Socket); return 1;} //Listening on Socket listen( Socket, MAXusr ); user utenti[MAXusr]; int usr=0,z,j; long unsigned ioctl=1; char sendbuf[MAXmsg] = "Server: Sending Data."; char recvbuf[MAXmsg] = ""; ioctlsocket (Socket, FIONBIO, &ioctl); while(1) { if((utenti[usr].socket=accept( Socket, NULL, NULL ))!=INVALID_SOCKET) { ioctlsocket (utenti[usr].socket, FIONBIO, &ioctl); recv(utenti[usr].socket,utenti[usr].name,20, 0 ); cout<<"client "<<usr+1<<" connected as "<<utenti[usr].name<<"\n"; usr++; } //Sending and Receiving Data for(z=0;z<MAXmsg;z++) recvbuf[z]='\0'; //controllo tutti i client x msg for(z=0;z<usr;z++) { if(recv( utenti[z].socket, recvbuf, MAXmsg, 0 )!=0) for(j=0;j<usr;j++) {if(j!=z) send( utenti[j].socket, recvbuf, strlen(recvbuf), 0 );} } } WSACleanup(); system("PAUSE"); return 0; }


Rispondi quotando