【问题标题】:Client connect with many servers through sockets客户端通过套接字与许多服务器连接
【发布时间】:2014-06-10 15:02:28
【问题描述】:

我可以将客户端连接到 4 个服务器吗?我必须检查女巫一个是否活跃。但是当我运行我的程序时,它适用于第一台服务器。对于下一个服务器,出现错误:“传输端点已连接” 我的代码:

void contact(int socket, int argc, char **argv, node **server_threads)
 {
pthread_t s;
int socketFd, newsockfd,i;
struct sockaddr_in serverAddr;
socklen_t clientlen = sizeof(clientAddr);

     for(i=3;i<argc;i=i+2)
     {
         serverAddr = makeClientAddress(argv[i],atoi(argv[i+1]));
         if(connect(socketFd,(struct sockaddr *) &serverAddr,sizeof(struct sockaddr_in))<0)
                error("connect");
     }

     while(newsockfd = accept(sockfd, (struct sockaddr *) &(clientAddr), &clientlen))    
     {
         printf("Server is active\n");
         insert_at_end(server_threads, NULL,NULL,&s);
         pthread_create(&s, NULL, (void*)connect_with_server,&sockfd);
     }

    void connect_with_server(void* arg){

    int* sock=(int*)arg;
        while(1)
        {
        if(read(sock,(char *)data,sizeof(int32_t[5]))<(int)sizeof(int32_t[5])) ERR("read:");
            printf("Signal from server\n");
    }

【问题讨论】:

  • 在重新连接之前关闭套接字。
  • "我可以用 4 个服务器连接客户端吗?"当然——您的网络客户端(浏览器)是否支持向不同网站打开多个标签?
  • 你的客户为什么打电话给accept()
  • socket, socketFd, sockFd, newsockfd ... hu... 很多客户端的套接字描述符。每个连接一个就足够了,至少如果它是通过调用 socket() 成功初始化的。
  • 因为在我的程序中,服务器也是客户端并尝试检查另一台服务器...所以它必须调用函数接受和连接...

标签: c sockets unix


【解决方案1】:

您可以连接到许多服务器,但要做到这一点,您必须在客户端上使用不同的 FD。一旦一个 FD 被设置为一个服务器,这个 FD 将只处理这个连接。

您必须保留一个所有 FD 都已启动的向量,并让您的程序在该向量上运行。

而且您不需要在代码中使用接受函数,您只需连接到服务器,然后获取 FD 的连接并做任何您想做的事情。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多