-------------------下面代码来源于网上,本人仅测试和修改,并未做其他改变
-------------------源码来源于
点击打开链接 -----
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] = '