using multiplexing to implement communication between a server and multiple clients: code example: Server: #include<stdio.h>#include<netinet/inch.h>#include<stdlib.h>#include<string.h>#include<sys/types.h>#include<sys/socket.h>#include<pthread.h>#include<strings.h>voidSend1 (int*a) { inti; Charbuf[ -]; Bzero (BUF, -); Fgets (BUF, -, stdin); for(i=0;i< A; i++) { if(A[i]! =0) Send (A[i],buf, -,0); }}intMain () {intfds[ A]={0}; intMAXFD =-1; intSOCKETFD = socket (Pf_inet,sock_stream,0); if(socketfd>maxfd) Maxfd=socketfd; structsockaddr_in saddr; memset (&SADDR,0,sizeof(SADDR)); Saddr.sin_family=pf_inet; Saddr.sin_port= Htons (6000); Saddr.sin_addr.s_addr= Inet_addr ("192.168.1.46"); intnewsocketfd; intn =1; SetSockOpt (SOCKETFD, Sol_socket, SO_REUSEADDR,&n,sizeof(int)); if(Bind (SOCKETFD, (structsockaddr*) &saddr,sizeof(structsockaddr_in)) <0) perror ("bind () error!\n"); if(Listen (SOCKETFD,5) <0) perror ("Listen () error!\n"); structsockaddr_in caddr; ints =sizeof(structsockaddr);//newsocketfd = Accept (socketfd, (struct sockaddr*) &caddr,&s);Fd_set FD; Fd_zero (&FD); intret; Charbuf[ -],buf1[ -]; inti; intrsize; while(1) {Fd_zero (&FD); Fd_set (0,&FD); Fd_set (SOCKETFD,&FD); for(i=0;i< A; i++) { //printf ("--------------\ n"); if(fds[i]!=0) Fd_set (Fds[i],&FD); } ret=Select(maxfd+1,&fd,null,null,null); if(ret<0) {perror ("Select () error!\n"); Break; } Else if(ret = =0) { Continue; } Else { if(Fd_isset (socketfd,&FD)) {NEWSOCKETFD= Accept (SOCKETFD, (structsockaddr*) &caddr,&s); if(newsocketfd>maxfd) { //printf ("--------------\ n"); MAXFD =newsocketfd; for(i=0;i< A; i++) { if(fds[i]==0) {Fds[i]=newsocketfd; Break; } } } Continue; }//printf ("helo\n"); for(i=0;i< A; i++) { if(Fds[i]! =0&& Fd_isset (fds[i],&FD)) {bzero (BUF1, -); if(Recv (FDS[I],BUF1, -,0)==0) {Close (fds[i]); Fds[i]=0; } printf ("%s", BUF1); } } if(Fd_isset (0,&FD)) {Send1 (FDS); }}} close (SOCKETFD); Close (NEWSOCKETFD);} Client: #include<stdio.h>#include<pthread.h>#include<netinet/inch.h>#include<stdlib.h>#include<string.h>#include<strings.h>#include<sys/types.h>#include<sys/socket.h>intMain () {intSocketfd,ret; Fd_set FD; Fd_zero (&FD); Fd_set (0,&FD); SOCKETFD= Socket (Pf_inet,sock_stream,0); Fd_set (SOCKETFD,&FD); RET=Select(socketfd+1,&fd,null,null,null); structsockaddr_in saddr; memset (&SADDR,0,sizeof(SADDR)); Saddr.sin_family=pf_inet; Saddr.sin_port= Htons (6000); Saddr.sin_addr.s_addr= Inet_addr ("192.168.1.46"); if(Connect (SOCKETFD,structSOCKADDR *) &saddr,sizeof(structSOCKADDR)) <0) perror ("Connect () error!\n");//pthread_t Pthreadid;//pthread_create (&pthreadid,null,func,null); Charbuf[ -],buf1[ -]; while(1) {bzero (buf, -); Bzero (BUF1, -); Fd_set (0,&FD); Fd_set (SOCKETFD,&FD); RET=Select(socketfd+1,&fd,null,null,null); if(Fd_isset (socketfd,&FD)) { if(Recv (SOCKETFD,BUF1,sizeof(BUF1),0) <0) perror ("recv () error!\n"); printf ("%s", BUF1); Continue; } if(Fd_isset (0,&FD)) {fgets (buf, -, stdin); if(Send (Socketfd,buf,strlen (BUF),0) <0) perror ("Send () error!\n"); Continue; } }
Server communicates with multiple clients