重複の可能性:
Linux から Windows への tcp 経由の接続
windows/c# に TCP クライアントがあり、linux/c++ に別の TCP クライアントがあります。また、両方に TCP サーバーがあります。
Windows/C# の TCP クライアントは正常に動作します。問題は、Linux/C++ の TCP クライアントです。
linux/c++ で TCP サーバーに接続すると完全に動作しますが、windows/c# で TCP サーバーに接続しようとすると接続しませんが、ping は問題ありません。
これは、失敗するコードの一部です。
int sockfd, portno, n;
struct sockaddr_in serv_addr;
struct hostent *server;
struct in_addr addr={0};
char buffer[256];
if (argc < 3) {
fprintf(stderr,"usage %s hostname port\n", argv[0]);
exit(0);
}
portno = atoi(argv[2]);
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd < 0)
error("ERROR opening socket");
addr.s_addr=inet_addr(argv[1]);
server = gethostbyaddr((char *) &addr, 6, AF_INET);
if (server == NULL) {
fprintf(stderr,"ERROR, no such host\n");
exit(0);
問題は次の行です。
server = gethostbyaddr((char *) &addr, 6, AF_INET);
null を返すため、「ERROR,no such host」と出力されます。
私はすべての組み合わせを試しました:
-TCPクライアント(Linux)からTCPサーバー(Linux)へ
-TCPクライアント(linux)からTCPサーバー(windows)へ
-TCP クライアント (Windows) から TCP サーバー (Linux) へ
-TCP クライアント (windows) から TCP サーバー (windows) へ
TCP クライアント (Linux) から TCP サーバー (Windows) を除くすべてが機能します。
また、TCPクライアントnetcat(Linuxに含まれる)をTCPサーバー(Windows)に試してみましたが、動作します。
WindowsからLinuxへ、またLinuxからWindowsへの両方でpingを呼び出しましたが、100%受信しました
TCP クライアント (Linux) が TCP サーバー (Linux) に接続しない理由がわかりません