C#通过UDP接收

时间:2016-05-27 19:42:59

标签: c# sockets udp

我正在编写一个程序,必须通过UDP将数据发送到特定的服务器(可以工作),并从该服务器接收数据(这不起作用)。 问题是,我发送数据的端口与来自服务器的数据来源不同。

服务器:侦听一个端口,为每个客户端创建新的套接字(在不同的端口上)以发送数据。

我有以下代码(客户端):

socker = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
IPEndPoint epLocal = new IPEndPoint(myIp, localPort);
socket.Bind(epLocal);
IPAddress ipAddressremote = IPAddress.Parse(remoteIp);
remoteEP = new IPEndPoint(ipAddressremote, port);
socket.Connect(remoteEP);

byte[] buffer = new byte[1024];
socket.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None, new AsyncCallback(MessageCallBack), buffer);
socket.Send(someByteArray);

这成功连接到我的服务器应用程序并发送它应该的数据。但是,永远不会调用MessageCallBack:

private void MessageCallBack(IAsyncResult iAsyncResult)
{
byte[] receivedData = (byte[])iAsyncResult.AsyncState;
ASCIIEncoding eEncoding = new ASCIIEncoding();
string receievedMessage = eEncoding.GetString(receivedData);
handleMessage(receievedMessage);

byte[] buffer = new byte[1024];
socket.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None, new AsyncCallback(MessageCallBack), buffer);
}

我认为问题是客户端套接字仍然连接到服务器上的端口,并且只接受来自该端口的数据,但据我所知,使用BeginReceive而不是BeginReceiveFrom时这不是问题。

1 个答案:

答案 0 :(得分:0)

使用UDP时,您无法使用Send和BeginReceive方法,因为这些方法是面向连接的(TCP)。而是使用Socket.SendToSocket.BeginReceiveFrom.它应该可以使用这些方法。