- 论坛徽章:
- 0
|
代码中监听请求连接的队列长度是1,但当同时开启5 6 个客户端时, 有一个连接成功, 其他的都在阻塞状态(connect函数返回0,send发送数据也可以成功). 当断掉连接着的客户端时,第二个请求的客户端会连接成功,然后依次第三 第四...
我不明白的是, 这里为什么第三个和之后的客户端的connect函数会返回0? 在请求消息数量达到消息队列的最大值时,不应该被refuse么?为什么还在阻塞状态?
代码如下(MAXCLIENT为1)
client关键代码:
void connectServer(){
sockfd = socket(AF_INET,SOCK_STREAM,0);
if(-1 == sockfd) { perror("创建socket失败\n" return; }
struct sockaddr_in server_addr;
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(3000);
server_addr.sin_addr.s_addr = inet_addr("172.30.9.138"
bzero(&(server_addr.sin_zero),;
int con = connect(sockfd,(struct sockaddr *)&server_addr,sizeof(server_addr));
printf("connection:%d\n",con);
if(-1 == con) { perror("连接错误" exit(-1); }
printf("连接成功!\n"
}
server关键代码:
void initServer(){
sockfd = socket(AF_INET,SOCK_STREAM,0);
if(-1 == sockfd)
perror("鍒涘缓socket澶辫触锛乗n"
struct sockaddr_in my_addr;
my_addr.sin_family = AF_INET;
my_addr.sin_port = htons(3000);
my_addr.sin_addr.s_addr = INADDR_ANY;
bzero(&(my_addr.sin_zero),;
if(-1 == bind(sockfd,(struct sockaddr *)&my_addr,sizeof(my_addr)))
perror("绑定失败\n"
if(-1 == listen(sockfd,MAXCLIENT))
perror("监听失败\n"
}
void acceptConn(){
int accept_num = 0;
int temp;
struct sockaddr_in their_addr;
int size_addr = sizeof(their_addr);
while(1){
if(client_id >= MAXCLIENT)
client_id = 0;
if(client_num < MAXCLIENT){
temp = accept(sockfd,(struct sockaddr *)&their_addr,&size_addr);
if(temp == -1){
printf("连接失败!\n",client_id);
continue;
}else{
ClientInfo clientInfo;
clientInfo.flag = 1;
clientInfo.socket = temp;
clientInfo.client_addr = their_addr;
while(client[client_id].flag == 1){
client_id++;
if(client_id >= MAXCLIENT)
client_id = 0;
}
client[client_id] = clientInfo;
}
if(!pthread_create(&client[client_id].pthread_id,NULL,server,&client[client_id].socket)){
printf("创建线程成功\n",client_id);
client_id++;
client_num++;
printf("client_id:%d\n",client_id);
printf("client_num:%d\n",client_num);
}
else
printf("创建线程失败!\n"
} }
}
|
|