1

ソケットを使用して c# でメッセンジャーを作成しましたが、ポートにはほとんど問題がありません。通信をクリアするには、メッセンジャーで使用するルーターのポートを開く必要があります。この問題を解決するにはどうすればよいですか? デフォルトの閉じたポートを自動的に開く方法はありますか?

ありがとう。

4

1 に答える 1

1

できることがいくつかあります。

1 つ目は、通信に通常の http ポート (80) を使用するようにアプリケーションのプログラミングを変更することです。これにより、アプリはほぼどこからでもアウトバウンド コールを行うことができます。

別の方法として、49152 から 65535 までの大きなポート番号を使用することもできます (「社内アプリケーションで使用するための TCP/IP ポートの割り当て」 を参照)。


ただし、アプリケーションをデプロイする場所によっては、これらのポートがすべてファイアウォールによってブロックされる可能性が高くなります。どちらもあなたの問題を解決しません

ほとんどのメッセンジャー タイプのアプリケーションは、ファイアウォールの問題により直接接続できません。たとえば、ポート 80 を使用している場合でも、クライアント マシンでそのポートが着信TCP 要求に対してブロックされている可能性があります。

代わりに、通常は既知の公開サーバーに接続します。1 つのクライアントが別のクライアントに接続する場合、サーバーは 2 つのクライアント間でメッセージをルーティングします。これを非常に簡単に見てみると、クライアント A がクライアント B のサーバーに通信要求を送信します。クライアント B はサーバーにメッセージをポーリングし、メッセージを確認してデスクトップに表示します。

通信を高速化するために、クライアントとサーバーの間で TCP 接続を維持する方法があります。しかし、それが基本です。

特定のポートが通信用に開かれている、またはプロキシ サーバーがトラフィックに干渉しないとクライアントが判断した場合、クライアントが互いに直接対話する方法もあります。ただし、これは、ここで提供できる単純な「答え」よりも少し高度です。

于 2013-09-30T21:58:33.837 に答える