私は一般的にソケットと C# を初めて使用し、単純な upd リスナー関数を実装するのに苦労しています。私は多くの時間をオンライン検索に費やしてきました. したがって、提案、リンク、例は大歓迎です!
この時点で、アプリケーション サーバーの場所に関する情報 (ServerName、IP アドレスなど) を含む一般的な UPD メッセージをポート 6600 経由でブロードキャストするサード パーティ アプリケーションがあります。UPD ブロードキャストをキャプチャし、将来の処理に使用できる利用可能なサーバーのコレクションを生成するように、リスナー クライアント アプリケーションを設計したいと考えています。
私が抱えている問題は、listener.Listen(0) を使用してリスナーを作成しようとすると、失敗して一般的なタイプのエラーが発生することです。UdpClient クラスを使用しようとすると、アプリケーションがハングし、データが返されません。両方の例のコードを以下に示します。
namespace UDPListener
{
class Program
{
static void Main(string[] args)
{
Socket listener = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
listener.Bind(new IPEndPoint(IPAddress.Any, 6600));
listener.Listen(6);
Socket socket = listener.Accept();
Stream netStream = new NetworkStream(socket);
StreamReader reader = new StreamReader(netStream);
string result = reader.ReadToEnd();
Console.WriteLine(result);
socket.Close();
listener.Close();
}
}
}
UdpClient:
private void IdentifyServer()
{
//Creates a UdpClient for reading incoming data.
UdpClient receivingUdpClient = new UdpClient(6600);
//Creates an IPEndPoint to record the IP Address and port number of the sender.
// The IPEndPoint will allow you to read datagrams sent from any source.
IPEndPoint RemoteIpEndPoint = new IPEndPoint(IPAddress.Any, 0);
try
{
// Blocks until a message returns on this socket from a remote host.
Byte[] receiveBytes = receivingUdpClient.Receive(ref RemoteIpEndPoint);
string returnData = Encoding.ASCII.GetString(receiveBytes);
Output.Text = ("This is the message you received " +
returnData.ToString());
Output.Text = ("This message was sent from " +
RemoteIpEndPoint.Address.ToString() +
" on their port number " +
RemoteIpEndPoint.Port.ToString());
}
catch (Exception e)
{
MessageBox.Show(e.ToString());
}