4

チャット プログラムを作成していて (多くの人がそうしているように)、クライアントがサーバーに自動的に接続できるようにしたいと考えています。

ただし、サーバーのIPアドレスは永続的ではないため、プログラムにハードコアすることはできません

TCPでは、クライアントがサーバーの場所を知ることができる、ある種のブロードキャスト機能を探しています

何か案は?

編集:これはLANプログラムのみになると言ったはずです-外部接続はありません

4

4 に答える 4

2

LAN でのチャットについて話しているときに、何らかの理由で DNS を使用できない、または使用したくない場合は、UPnP で使用される検出プロトコルを実装するか、その実装を見つけることができます。SSDPは UDP ブロードキャストに基づいています。TCP にはセッションが必要なため、TCP 経由でマルチキャストすることはできません。

インターネット経由でチャット サーバーを使用する場合は、DNS を使用するしかありません。動的 DNS プロバイダーを探します (私は selfhost.bz を使用しています)。C# では、他の回答で説明されているように、ホスト名を IP アドレスに解決できます。ただし、接続するホスト名がある場合は、おそらくそれをソケットに渡すのに十分です。

socket.Connect("myhostname.selfhost.bz", ...


編集:あなたはLANにいると言っているので、SSDPの詳細をいくつか。プロトコルは、実際に必要以上に多くのことを行います。自分で実装することを考えている場合は、厳密に固執しないでください。指定したポートでクライアントにブロードキャストを送信させるだけです。サーバーは、メッセージを受信すると、そのポートを永続的にリッスンし、定義済みのメッセージで応答します。クライアントがその応答を受信すると、送信者が有効なサーバーであることがわかります。

于 2012-09-21T20:50:57.450 に答える
1

DNS を使用します。アプリでホスト名を解決し、解決先の IP に接続します。IPは永続的ではないと言うので、動的DNSが必要になります。

于 2012-09-21T20:18:09.437 に答える
0

私は考えました:サーバーにIPアドレス/ポート/その他を(パブリック)ネットワークのどこかにあるテキストファイルに書き込むだけで、クライアントはテキストファイルを読み取ることができます

明らかに、テキスト ファイルが存在しないか空の場合、サーバーは実行されていません...

これはそんなに悪い考えですか?

于 2012-09-21T21:18:25.907 に答える
0

以下のプロセスを使用して、サーバーの IP アドレスを見つけます

 public string GetIPAddress() 
  { 
     string strHostName = System.Net.Dns.GetHostName(); 
     IPHostEntry ipHostInfo = Dns.Resolve(Dns.GetHostName()); 
     IPAddress ipAddress = ipHostInfo.AddressList[0]; 

     return ipAddress.ToString(); 
  } 

使用することもできます

Request.ServerVariables["LOCAL_ADDR"]; 
于 2012-09-21T20:31:46.867 に答える