自宅に 2 台のデバイスがあります。1 台のデバイスの IP アドレスは 10.0.0.2 です。これはサーバーであり、もう 1 台のデバイスは IP アドレスが 10.0.0.6 です。
したがって、クライアントコードには、このコードの貫通があります
sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
/* Construct the server address structure */
ServPort=3200;
servIP="10.0.0.2";
memset(&ServAddr, 0, sizeof(ServAddr)); /* Zero out structure */
ServAddr.sin_family = AF_INET; /* Internet address family */
ServAddr.sin_addr.s_addr = inet_addr(servIP); /* Server IP address */
ServAddr.sin_port = htons(ServPort); /* Server port */
/* Establish the connection to the server */
i= connect(sock, (struct sockaddr *) &ServAddr, sizeof(ServAddr));
クライアント 10.0.0.6 から 10.0.0.2 のサーバーに完全に接続できました。コードは正常に実行されました。
次にライブラリに移動すると、サーバーの IP アドレスは 192.168.1.168 になり、クライアント デバイスの IP アドレスは 192.168.1.147 になりました。
そのため、クライアントに合わせて修正したコード
sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
/* Construct the server address structure */
ServPort=3200;
servIP="192.168.1.168";
memset(&ServAddr, 0, sizeof(ServAddr)); /* Zero out structure */
ServAddr.sin_family = AF_INET; /* Internet address family */
ServAddr.sin_addr.s_addr = inet_addr(servIP); /* Server IP address */
ServAddr.sin_port = htons(ServPort); /* Server port */
/* Establish the connection to the server */
i= connect(sock, (struct sockaddr *) &ServAddr, sizeof(ServAddr));
現在、サーバーに接続できません。
サーバーデバイスとクライアントデバイスのIPアドレスを除いて、すべてのコードは同じです。自宅ではコードを正常に実行できますが、ライブラリでは実行できません。これは単なる TCP であるため、ファイアウォールに関係する必要があります。