2.5 Linux下的Socket编程-多个客户端之间的消息通讯(实验三)

2019-07-13 09:10发布

-------------------下面代码来源于网上,本人仅测试和修改,并未做其他改变 -------------------源码来源于  点击打开链接 -----Linux下的基于Pthread的多线程Socket编程      在测试过程中发现,记录如下:
1.长连接的稳定性较差,超时后服务器主动断开(也有可能是我自己的服务器不稳定的原因)。   2.必须要所有客户端先 结束进程(输入"quit")后,服务器端再结束.否则,客户端会异常工作!!!!   3.这里采用的 向指定客户 发消息 "send 0 hello_client1!"形式
   哪个先连接进服务器哪个就为服务器0,依次增加   ============================================================================                                                                                              代码如下                                                       功能:服务器端作为客户端之间互发消息的工具,实现多个客户端之间的通讯                                                       测试:实验测试采用了2个客户端同时连接1个服务端进行测试。 ============================================================================ 服务器端代码如下: #include #include #include #include #include #include #include #include #include #include #include #include #define PORT 8888 #define BACKLOG 10 #define MAXCONN 100 #define BUFFSIZE 1024 typedef unsigned char BYTE; typedef struct ClientInfo { struct sockaddr_in addr; int clientfd; int isConn; int index; } ClientInfo; pthread_mutex_t activeConnMutex; pthread_mutex_t clientsMutex[MAXCONN]; pthread_cond_t connDis; pthread_t threadID[MAXCONN]; pthread_t serverManagerID; ClientInfo clients[MAXCONN]; int serverExit = 0; /*@brief Transform the all upper case * */ void tolowerString(char *s) { int i=0; while(i < strlen(s)) { s[i] = tolower(s[i]); ++i; } } void listAll(char *all) { int i=0, len = 0; len += sprintf(all+len, "Index IP Address Port "); for(;iclientfd; struct sockaddr_in addr = client->addr; int isConn = client->isConn; int clientIndex = client->index; while((recvbytes = recv(clientfd, buff, BUFFSIZE, 0)) != -1) { // buff[recvbytes] = '