可以ping子网ip,但是不能socket.connect

时间:2020-06-09 09:03:31

标签: python c sockets networking subnet

我有一个服务器,该服务器托管在子网中。我给它的IP 10.130.28.130。 我在另一个子网中有一个客户端。通过该客户端,我可以ping服务器,但是无法连接到服务器。

服务器[C]:

    int ipStatus = system("ifconfig eth0 10.130.28.130");
    int netmaskStatus = system("ifconfig eth0 netmask 255.255.255.0");


    #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;
          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
          if( pthread_create(&tid[i], NULL, socketThread, (void *)(uintptr_t) newSocket) != 0 )
              printf("\nFailed to create thread\n");
          else
          {
              printf("\nSOCKET %i CREATED\n", newSocket);
          }

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

客户[PYTHON]:

    def try_connect(address):
        global connected
        client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        client.connect(address)
        connected = True
        return [client, connected]

    ip = socket.gethostbyname("10.130.28.130")
    port = int(8080)
    address = (ip,port)

以前,当它们都在同一网络上并且我将IP设置为本地地址(例如192.168.0.13)时,它就起作用了。

我可以从两个子网上的终端ping客户端和服务器。我想念什么?

编辑以澄清网络设置

Network setup

0 个答案:

没有答案