gpt4 book ai didi

使用套接字连接到许多服务器之一

转载 作者:行者123 更新时间:2023-11-30 19:05:04 25 4
gpt4 key购买 nike

我有一个客户端必须连接到许多服务器中的一个,我有 5 个端口从 8000 到 8004 的服务器,还有一个客户端必须连接到第一台在线服务器。我的想法是尝试连接到每台服务器,直到建立一个连接,这样:

结构体的定义

char * host_name = "127.0.0.1"; // local host
int port[5] = {8000,8001,8002,8003,8004}

struct sockaddr_in serv_addr;
struct hostent* server;

if ( ( server = gethostbyname(host_name) ) == 0 )
{
perror("Error resolving local host\n");
exit(1);
}


int sockfd = socket( PF_INET, SOCK_STREAM, 0 );
if ( sockfd == -1 )
{
perror("Error opening socket\n");
exit(1);
}

这就是我为解决问题所做的

bzero(&serv_addr, sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = ((struct in_addr *)(server->h_addr))->s_addr;

for (int i=0;i<5;i++){
serv_addr.sin_port = htons(port[i]);
if ( connect(sockfd, (void*)&serv_addr, sizeof(serv_addr) ) != -1 )
{
printf("connect to server %d\n",port[i]);
break;
} else{
printf("impossible to connect to server %d \n",port[i]);
}
}

仅当第一台服务器(端口 8000)在线并建立连接时,此操作才有效。如果端口为 8001 到 8004 的服务器在线,则不会建立连接。当然,在服务器端有一个新连接上的listen()。

最佳答案

您无法重新连接已经尝试连接的套接字,即使它失败了。您必须关闭它并创建一个新套接字。

关于使用套接字连接到许多服务器之一,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50665807/

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