gpt4 book ai didi

c - C Socket编程中的多个客户端

转载 作者:太空宇宙 更新时间:2023-11-03 23:48:10 25 4
gpt4 key购买 nike

我正在创建一个简单的回显服务器,它监听 SOCK_STREAM 并继续接受无限连接。在函数 int listen(int sockfd, int backlog) 中。我已将 backlog 设置为 1,这是否意味着最多 1 个客户端可以在队列中等待?

考虑我遇到的以下情况。

服务器已经启动并接受来自客户端1的连接

现在客户端 2 尝试连接并已连接

现在客户端 3 尝试连接并已连接

现在客户端 2 发送“hello2”并等待回复

现在客户端 3 发送“hello3”并等待回复

现在客户端 1 发送“hello1”并从服务器得到回复“hello1”

现在客户端 2 从服务器收到回复“hello2”

然后客户端 3 从服务器得到回复“hello3”

这怎么可能?由于服务器已经连接到客户端 1 且最大队列大小为 1,客户端 2 和客户端 3 是否应该在连接时不会出错?

 Server:
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>
#include <sys/types.h>
#include <string.h>

#define max_request 4
char buffer[50];

void clear()
{
int i;
for(i=0;i<50;i++)
buffer[i]=NULL;
}

int main()
{
int status;

struct sockaddr_in addrport;
addrport.sin_family = AF_INET;
addrport.sin_port = htons(5100);
addrport.sin_addr.s_addr = htonl(INADDR_ANY);

int sockid = socket(PF_INET, SOCK_STREAM, 0);

if(bind(sockid, (struct sockaddr *) &addrport, sizeof(addrport))== -1)
{
printf("\nBinding Failed\n");
return(0);
}


int listen_status=listen(sockid,1);
if(listen_status==-1)
printf("\nListening Error\n");
else
printf("\nWaiting for connections...\n");


while(1)
{
struct sockaddr_in clientaddr;
int addlen=sizeof(struct sockaddr_in);

int new_client_socket=accept(sockid,(struct sockaddr *)&clientaddr,&addlen);

char *client_ip;
client_ip=inet_ntoa(clientaddr.sin_addr);
printf("\n Connection from %s \n",client_ip);


status=recv(new_client_socket,buffer,50,0);
if(status!=-1)
status=send(new_client_socket,buffer,50,0);
clear(); // clears the variable buffer

}



close(sockid);
}

客户:

int main()
{
int s,k;char buff[50],c[50];

struct sockaddr_in serverport;

serverport.sin_family = AF_INET;
serverport.sin_port = htons(5100);
serverport.sin_addr.s_addr = inet_addr("0.0.0.0");

int sockid=socket(PF_INET,SOCK_STREAM,0);

int connect_status=connect(sockid,(struct sockaddr *) &serverport,sizeof(serverport));
if(connect_status<0)
{
printf("\nConnection Error\n");
return(1);
}
printf("\nConnected\n");

gets(buff); // message to be sent to server

s=send(sockid,buff,50,0);
k=recv(sockid,c,50,0);

printf("\nServer : %s \n ",c);
close(sockid);
}

最佳答案

Should Client 2 and Client 3 not get an error while connecting as server is already connected to Client 1 and the max queue size is 1 ?

没有,没有错误。

'最大队列大小为 1' - 如果接受成功,则队列为空,另一个客户端可以连接。

关于c - C Socket编程中的多个客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27668560/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com