4

Win32 でソケットを使用し、ファイアウォールが使用しているポートをブロックしないようにすることは可能ですか?

Unix では、IF_UNIX代わりにIF_INET(つまり、ソケットの代わりに名前付きパイプ) を使用できます。現在、Windows では、さまざまなプロトコルを使用してソケットを開くことができます。

socket(AF_INET,    SOCK_RAW, IPPROTO_TCP);     //open an IPv4 socket
socket(AF_BTH,     SOCK_RAW, BTHPROTO_RFCOMM); //open a Bluetooth socket
socket(AF_NETBIOS, SOCK_RAW, IPPROTO_TCP);     //open an IPX/SPX socket
socket(AF_INET6,   SOCK_RAW, IPPROTO_TCP);     //open an IPv6 socket

名前付きパイプソケットを開く方法はありますか? 例 (仮想構造)

socket(AF_NAMEDPIPE, SOCK_RAW, IPPROTO_TCP);   //open a named pipe socket
4

3 に答える 3

5

John Cavan (かつて一緒に学校に通っていたと思います) が言っているように、ループバック アドレスを使用すると、NIC とファイアウォールを完全に回避でき、完全なクライアント サーバー モデル (つまり、別のマシン、場合によっては別のマシン) に変更することもできます。異なるプラットフォーム) で、コードの変更を最小限に抑えます。

また、同一マシン間通信に共有メモリをうまく使用しました。これは一般に、TCP/IP および名前付きパイプよりも高速です。ただし、Win32 の名前付きパイプは信頼性が高く、比較的高速であることがわかりました。

于 2009-09-28T01:33:46.490 に答える
3

私はこれを試していませんが、ループバック アドレスにバインドする場合は、ファイアウォールをクリアすることをお勧めします。名前付きパイプの代替手段を探している場合は、実際に NIC を介して通信するよりも高速であるため、おそらくそれを実行することをお勧めします。

共有メモリなどの他の代替手段を検討しましたか? それでも、ソケットに切り替える利点は、後で 2 つのプロセスを別々のマシンに配置し、コードを変更せずに通信できることです (IP アドレスをハードコーディングするというミスを回避できると仮定します)。

于 2009-09-28T01:21:27.570 に答える
-1

私がJavaで育てた1921 68 dot var dot varのようなアドレスがあり、私的使用範囲でランダムに選択されたポートを使用して、文句なしに実行しましょう。

于 2009-09-28T02:03:06.160 に答える