C# UDP接收不到其他电脑发来的数据

xhcsw 2014-12-22 05:09:33
做了一个局域网UDP传输数据的东西,在同一台电脑上测试的时候可以收到数据,发送端放到别的电脑上就收不到了,不知道是什么原因,求教各位大神!!
cls_interface.localHost cls_interface._socketRev 是static的
这是接收的代码
cls_interface.localHost = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8001);
cls_interface._socketRev = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
cls_interface._socketRev.Bind(cls_interface.localHost);
while (!cls_interface.IsStopRev)
{
if (!cls_interface.IsSuspendRev)
{
byte[] buffer = new byte[1024];
int len = 0;

IPEndPoint remoteEP = new IPEndPoint(IPAddress.Any, 0);
EndPoint Remote = (EndPoint)remoteEP;
len = cls_interface._socketRev.ReceiveFrom(buffer, ref Remote);

//获取读取到的信息
if (len > 0)
{
byte[] revbts = new byte[len];
for (int i = 0; i < len; i++)
{
revbts[i] = buffer[i];
}
get_udp_data(revbts);
pointsCount++;
}
}//判断是否暂停
}

这是发送代码
public void SendData()
{
double x = 0;
double i = 0;
while (true)
{
i+=0.5;
revdData revdata;

/* revdata 结构体赋值*/
//将结构体转换成byt[]
Type type = typeof(revdData);
int size = Marshal.SizeOf(type);
IntPtr buffer=Marshal.AllocHGlobal(size);
Marshal.StructureToPtr(revdata, buffer, false);
byte[] bts=new byte[size];
Marshal.Copy(buffer,bts,0,size);

double sd = Math.Sin(x);
_socket.SendTo(bts, new IPEndPoint(IPAddress.Parse("192.168.1.2"), 8001));

Marshal.FreeHGlobal(buffer);

Thread.Sleep(100);
x += 0.1;
}
}


...全文
545 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
xhcsw 2014-12-22
  • 打赏
  • 举报
回复
引用 3 楼 wawd74520 的回复:
wifi的话 很容易丢包。
是网线直接连的。问题已经解决,是IP的问题,见2楼。感谢回复!
xhcsw 2014-12-22
  • 打赏
  • 举报
回复
引用 2 楼 rtdb 的回复:
检查防火墙,看8001端口开放了么?
端口是开放的,问题已经解决,感谢回复!
xhcsw 2014-12-22
  • 打赏
  • 举报
回复
引用 1 楼 Z65443344 的回复:
cls_interface.localHost = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8001); 把127.0.0.1改成192.168.1.2试试
谢谢,就是这个问题! 但是,不知道为什么读本机端口数据用127.0.0.1不可以。
编程有钱人了 2014-12-22
  • 打赏
  • 举报
回复
如果是外网IP,还要考考虑能不能穿墙(穿透NAT)
於黾 2014-12-22
  • 打赏
  • 举报
回复
嗯,防火墙是首先要考虑的问题 我还以为楼主已经关闭了防火墙 关了再试.如果可以,将端口加入防火墙白名单
失落的神庙 2014-12-22
  • 打赏
  • 举报
回复
wifi的话 很容易丢包。
rtdb 2014-12-22
  • 打赏
  • 举报
回复
检查防火墙,看8001端口开放了么?
於黾 2014-12-22
  • 打赏
  • 举报
回复
cls_interface.localHost = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8001); 把127.0.0.1改成192.168.1.2试试

111,093

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧