1

これは私のサーバーコードです

byte[] data = new byte[1024];
IPEndPoint ipep = new IPEndPoint(IPAddress.Any, 9050);
UdpClient newsock = new UdpClient(ipep);

Console.WriteLine("Waiting for a client...");

IPEndPoint send = new IPEndPoint(IPAddress.Any, 0);

byte[] data1 = newsock.Receive(ref send);
int test1 = BitConverter.ToInt32(data1, 0);
Console.WriteLine("test1 = {0}", test1);

これは私のクライアントコードです

byte[] data = new byte[1024];
string stringData;
UdpClient server = new UdpClient("127.0.0.1", 9050);

IPEndPoint send = new IPEndPoint(IPAddress.Any, 0);

int test1 = 45;

byte[] data1 = BitConverter.GetBytes(test1);
server.Send(data1, data1.Length);

私のクライアントとサーバーによると、クライアントはサーバーにデータを送信するものです。

しかし、私の要件は逆です!私はそれを行うことができません..このコードをサーバーに追加しようとすると

byte[] buffer = ASCIIEncoding.ASCII.GetBytes("Hello Client");
newsock.Send(buffer, buffer.Length);

次のように例外が発生しますThe operation is not allowed on non-connected sockets.

誰かが私を助けることができますか?

4

2 に答える 2

3

UDP はコネクションレスです。connectUDP ソケットを呼び出すときは、実際にはデフォルトの宛先 IP とポートを設定しているだけです。相手側の受信者は、Socket.ReceiveFrom ( recvfromUNIX で呼び出される) を使用してパケットの送信元を見つけSendTo、元の要求に応答する必要があります。サーバーは使用できますconnectが、複数のクライアントをサポートしたい場合は厄介です。

于 2010-11-05T18:56:47.850 に答える
-2

JoinMulticastGroupを確認してください(Connect for TcpClient のようなものです)。ブロードキャストの前にこれを行う必要があります (つまり、ブロードキャストする場合)。

UdpClientのドキュメントも役立ちます。

于 2010-11-05T18:58:39.910 に答える