我正在尝试通过UDP端口接收和发送数据。它与TCP的工作非常好,但是当我将其更改为UDP时,它会破坏。
这是我的UDP代码,仅用于接收:
Socket receiver_socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
IPEndPoint ipep = new IPEndPoint(IPAddress.Parse("192.168.11.254"), 11000);
.
.
.
public Form1()
{
InitializeComponent();
receiver_socket.Connect(ipep);
}
private void Receive_socket_delegate()
{
receiver_socket.BeginReceive(r_buff, 0, r_buff.Length, SocketFlags.None, new AsyncCallback(socket_receive_data), receiver_socket);
}
void socket_receive_data(IAsyncResult iar)
{
Socket remote = (Socket)iar.AsyncState;
int recv = remote.EndReceive(iar);
if (recv > 0)
{...
}
}
有什么不对?
答案 0 :(得分:0)
UDP是非绑定协议,您不需要 receiver_socket.Connect(); 。还有用于UDP通信的 UDPClient 对象。
UdpClient listener = new Udpclient();
//Socket receiver_socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
IPEndPoint ipep = new IPEndPoint(IPAddress.Parse("192.168.11.254"), 11000);
.
.
.
public Form1()
{
InitializeComponent();
//receiver_socket.Connect(ipep);
Thread listeningthread = new Thread(Receive_socket_delegate);
listeningthread.Start();
}
private void Receive_socket_delegate()
{
// receiver_socket.BeginReceive(r_buff, 0, r_buff.Length, SocketFlags.None, new AsyncCallback(socket_receive_data), receiver_socket);
while(true)
{
byte[] bytes = listener.Receive(ref ipep);
ThreadPool.QueueUserWorkItem(state=>{
socket_receive_data(bytes);
});
}
}
void socket_receive_data(byte[] bytes)
{
// Write or use your data in here "bytes"
if (recv > 0)
{...
}
}