簡體   English   中英

端口好像沒開,雖然在聽

[英]Port does not seem to be open, even though listening

我的服務器沒有通過監聽階段,即使我的客戶端試圖在一個循環中運行socket.connect() function 直到建立連接。 我的服務器代碼有問題嗎?

#define PORT 8080
void server()
{
    int serverSocket, newSocket;
    struct sockaddr_in serverAddr;
    struct sockaddr_storage serverStorage;
    socklen_t addr_size;
    int opt = TRUE;

    //Create socket
    serverSocket = socket(PF_INET, SOCK_STREAM, 0);
    if (setsockopt(serverSocket, SOL_SOCKET, SO_REUSEADDR, (char *)&opt, 
        sizeof(opt))<0)
        error("SETSOCKOPT ERROR");

    //Configure setting of the server address struct
    serverAddr.sin_family = AF_INET; 
    serverAddr.sin_addr.s_addr = htonl(INADDR_ANY); 
    serverAddr.sin_port = htons(PORT); 

    //Set all bits of the padding field to 0 
    memset(serverAddr.sin_zero, '\0', sizeof serverAddr.sin_zero);

    //Bind the address struct to the socket 
    bind(serverSocket, (struct sockaddr *) &serverAddr, sizeof(serverAddr));

    //Listen on the socket, with max 40 connection requests queued

    if(listen(serverSocket,40)==0)
      printf("\nListening\n");
    else
      printf("\nError\n");
    pthread_t tid[60];
    int i = 0;
    while(1)
    {
      //Accept call creates a new socket for the incoming connection
      addr_size = sizeof serverStorage;
      printf("HERE");
      newSocket = accept(serverSocket, (struct sockaddr *) &serverStorage, &addr_size);
      //pthread_mutex_lock(&lock);
      //for each client request creates a thread and assign the client request to it to process
      //so the main thread can entertain next request
      int error_thread = pthread_create(&tid[i], NULL, socketThread, (void *)(uintptr_t) newSocket);
      if(  error_thread != 0 )
      {
        printf("\nFailed to create thread, %i\n", error_thread);
        rebootOWASYS();
      }
      else
      {
          printf("\nSOCKET %i CREATED\n", newSocket);
      }

      if( i >= 50)
      {
          i = 0;
          while(i < 50)
          {
              pthread_join(tid[i++],NULL);
          }
          i = 0;
      }
    }
}

服務器設法打印“Listening”,但是,我的客戶端無法連接(未到達“here”打印)。 嘗試nc -zv 10.130.28.130 8080不成功,但是對服務器執行 ping 操作。 只要不接受連接,我的客戶端就會循環socket.connect(10.130.28.130, 8080)

def try_connect(address):
    global connected
    global client
    client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    client.settimeout(2)
    try:
        client.connect(address)
        connected = True
    except:
        client.close()
        connected = False

    finally:
        return [client, connected]

我錯過了一些明顯的東西嗎?

我看到的第一個問題是嘗試在沒有兩組括號的情況下調用連接 function:

client.connect((addr, port)) # Like that

也許你想多了,或者我想多了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM