Service side
#include <stdio.h>#include<sys/types.h>#include<sys/socket.h>#include<string.h>#include<arpa/inet.h>#include<netinet/inch.h>#include<stdlib.h>#include<unistd.h>#include<pthread.h>Char* nam[ -];intCount =0;intcfd[ -];intCLIFD =0;void* Pthread_chat (void*Arg) { int*p =Arg; intn = *p; while(1) { Charbuf[255] = {}; if(-1= = Recv (Cfd[n],buf,sizeof(BUF),0) {close (cfd[n]); Cfd[n]=0; Break; } for(inti =0; I < count+1; ++i) {if(Cfd[i]! =0) {Send (Cfd[i],buf,sizeof(BUF),0); } } }}intMainintargcChar*argv[]) { intSOCKFD = socket (Af_inet,sock_stream,0); if(0>sockfd) {Perror ("Socket"); return-1; } structSockaddr_in addr ={af_inet}; Addr.sin_port= Htons (5566); Addr.sin_addr.s_addr= Inet_addr ("192.168.2.120"); intret = bind (SOCKFD, (structsockaddr*) &addr,sizeof(addr)); if(0>ret) {Perror ("Bind"); return-1; } Listen (SOCKFD,1024x768); structsockaddr_in src_addr = {}; socklen_t Addr_len=sizeof(SRC_ADDR); while(1) {CLIFD= Accept (SOCKFD, (structsockaddr*) &src_addr,&Addr_len); intFlag =0; while(Clifd! =0) { for(inti =0; I < count+1; ++i) {if(Cfd[count] = =0) {flag=1; Cfd[count]=CLIFD; pthread_t Ptid; Pthread_create (&ptid,NULL,pthread_chat,&count); } } if(Flag = =0) {cfd[++count] =CLIFD; pthread_t Ptid; Pthread_create (&ptid,NULL,pthread_chat,&count); } CLIFD=0; }} close (SOCKFD);}
Client
#include <stdio.h> #include <sys/types.h> #include <sys/socket.h> #include <string.h> #include <arpa/inet.h> #include <netinet/in.h> #include <stdlib.h> #include <unistd.h>int main (int argc , char* argv[]) {int SOCKFD = socket (af_inet,sock_stream,0), if (0 > sockfd) {perror ("socket"); return-1;} struct sockaddr_in addr = {Af_inet};addr.sin_port = htons (Atoi (argv[1])); addr.sin_addr.s_addr = inet_addr (argv[2] int ret = connect (sockfd, struct sockaddr*) &addr,sizeof (addr)), if (0 > Ret) {perror ("connect"); return-1;} if (fork () = = 0) {while (1) {char buf[255] = {};recv (sockfd,buf,sizeof (BUF), 0);p rintf ("%s\n", BUF);}} while (1) {char buf[255] = {};char data[255] = {};gets (data); sprintf (buf, "%s:%s", Argv[3],data); Send (Sockfd,buf,strlen ( BUF), 0);} Close (SOCKFD);}
Multi-person chat room based on socket network communication under Linux