2014-06-10 248 views
0

我可以連接客戶端與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"); 
    } 
+1

重新連接之前關閉套接字。 –

+0

「我可以將客戶端連接到4臺服務器嗎?」當然 - 你的網絡客戶端(瀏覽器)支持有多個標籤可以打開到不同的網站嗎? – twalberg

+0

你的客戶爲什麼叫'accept()'? – alk

回答

0

您可以連接到多臺服務器,但要做到這一點您必須在客戶端上使用不同的FD的。一旦FD被設置爲服務器,該FD將只處理該連接。

您必須保留一個載體,並啓動所有FD並保持程序在載體上工作。

而你不需要在你的代碼中使用accept函數,你必須連接到服務器,然後獲得FD的連接並做任何你想要的。

相關問題