连接到许多服务器之一,带有套接字

时间:2018-06-03 11:19:41

标签: 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 ( ( 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()。

1 个答案:

答案 0 :(得分:1)

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