设备与电脑使用网线直连,设备通过广播模式向固定端口发送数据。现在需要我这边使用进行数据接收。但我使用C# 的udpClient一直收不到数据。
但网络调试助手是可以收到的,因此排除了电脑原因。
下面是我的代码:我尝试了使用线程方式与异步方式都无法接收到数据。
求帮助啊
public AsyncUDP(IPAddress localIPAddress, int listenPort, int maxClient)
{
this.Address = localIPAddress;
this.Port = listenPort;
this.Encoding = Encoding.Default;
_maxClient = maxClient;
//_clients = new List<AsyncUDPSocketState>();
_server = new UdpClient(new IPEndPoint( Address,Port));
_server.EnableBroadcast = true;
//Task.Factory.StartNew(() => { Receive(); });
_server.BeginReceive(ReceiveDataAsync, null);
}
//使用线程方式接收
private void Receive()
{
while (IsRunning)
{
IPEndPoint ip = new IPEndPoint(IPAddress.Any,0);
var bytes = _server.Receive(ref ip);
Console.WriteLine("接收:"+bytes.Length);
}
}
//使用异步方式接收
private void ReceiveDataAsync(IAsyncResult ar)
{
IPEndPoint remote = null;
byte[] buffer = null;
try
{
buffer = _server.EndReceive(ar, ref remote);
AsyncUDPState state = new AsyncUDPState();
state.buffer = buffer;
state.remote = remote;
//触发数据收到事件
RaiseDataReceived(state);
}
catch (Exception)
{
//TODO 处理异常
RaiseOtherException(null);
}
finally
{
if (IsRunning && _server != null)
_server.BeginReceive(ReceiveDataAsync, null);
}
}
private void button1_Click(object sender, EventArgs e)
{
int port = int.Parse(textBox2.Text);
Socket sock = new Socket(AddressFamily.InterNetwork,
SocketType.Dgram, ProtocolType.Udp);
IPEndPoint iep =
new IPEndPoint(IPAddress.Any, port);
sock.Bind(iep);
EndPoint ep = (EndPoint)iep;
log("Ready to receive…");
Task.Run(()=> {
while (true)
{
byte[] data = new byte[1024];
int recv = sock.ReceiveFrom(data, ref ep);
string stringData = Encoding.UTF8.GetString(data, 0, recv);
log(stringData);
}
});
}
void log(string txt)
{
textBox1.Text += txt + "\r\n";
}
udp通讯注意事项:
1.要启动线程;
2.检查发送和接收端口是否准确;
3.如果是本机通讯,插了网线可以用IP,没插入网线情况下只能使用127.0.0.1或者localhost