Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 使用套接字连接到多个服务器之一_C_Sockets - Fatal编程技术网

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

C 使用套接字连接到多个服务器之一,c,sockets,C,Sockets,我有一个客户端必须连接到多个服务器中的一个,我有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 (

我有一个客户端必须连接到多个服务器中的一个,我有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]);
    }
}
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;

对于(int i=0;i您无法重新连接已尝试连接的套接字,即使它失败。您必须关闭它并创建一个新的套接字。

“仅此有效”不是技术术语或可识别的错误消息,也不是“未建立连接”。您需要发布实际的错误消息。