【解決方法】ポートでリッスンする適切な方法は何ですか


httpPlatformHandler Web アプリを作成しました。 IIS はプログラムを起動し、リッスンするポート番号を渡します。 私のアプリはポートをリッスンし、Winsock 送信関数を使用して要求を処理し、要求されたデータを返します。

エンド ユーザーの 1 人が 2 つの別々のサーバーにセットアップしました。 2 つのサーバーが同じサブネット上にある場合は 1 つだけが機能するそうです。

正確なエラー メッセージがなく、不明瞭な言語 (PowerBuilder) を使用しているため、コードの簡略版を以下に示します。 Winsock の第一人者が提案をしてくれることを期待しています。

私が試したこと:

WSAStartup(257, str_wsadata)

ヒント.ai_family = AF_INET
ヒント.ai_socktype = SOCK_STREAM
ヒント.ai_protocol = IPPROTO_TCP
hints.ai_flags = AI_PASSIVE

iResult = GetAddrInfoW(NULL, ServiceName, ヒント, pResult)

CopyMemory(result, pResult, StructSize)

ListenSocket = ソケット(result.ai_family, result.ai_socktype, result.ai_protocol)

iResult = バインド(ListenSocket, result.ai_addr, result.ai_addrlen)

FreeAddrInfoW(pResult)

iResult = listen(ListenSocket, SOMAXCONN)

…select/accept/recv/send による永久ループ

解決策 1

これを正しく理解していれば:

引用:

2 つのサーバーが同じサブネット上にある場合は 1 つだけが機能するそうです。

問題は、2 台のマシンの NIC のサブネット マスク設定によって通信がブロックされている可能性があります。 それらが何であるかを説明するものは次のとおりです。 サブネットマスクとは何ですか?[^]。

異なるサブネット上にあるときに相互に通信できるようにしたい場合は、両方のマシンにマスクを設定してそれを有効にする必要があります。 アドレスの最初のオクテットが 10 であるクラス A サブネットなどのプライベート ネットワークの場合、マスクは次のようにする必要があります。 255.0.0.0 お互いに会話できるようにするためです。 192.168 で始まるアドレスを持つクラス C サブネットの場合、マスクは次のようにする必要があります。 255.255.0.0。 クラス B サブネットの場合は少し奇妙ですが、必要に応じて判断していただくためにそのままにしておきます。

別の問題が発生している可能性がありますが、この問題によって引き起こされるまさに同じ問題を過去に何度も見てきました。

コメント

タイトルとURLをコピーしました