做过tcp的,你这个
if (receivingUdpClient != null)
{
// Receving_ThreadAbort();
//ThreadSleep(TimeSpanFromMilliseconds(500d));
receivingUdpClientClose();
}
是干吗的?为什么要把接收端先关闭?
C语言是一门通用计算机编程语言,应用广泛。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。
尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MCU)以及超级电脑等作业平台。
二十世纪八十年代,为了避免各开发厂商用的C语言语法产生差异,由美国国家标准局为C语言订定了一套完整的国际标准语法,称为ANSI C,作为C语言最初的标准。
网上很多相关的现成的代码
你需要知道的一点是数据接收不是接收一次就完了 接收端根本不知道数据什么时候要过来 所以数据端应该一直重复着"等待-接收"的过程 于是就有了要在线程中接收数据的代码
在同一台设备上,直接调用的函数么?这种情况用回环地址。
MAC、IP、目的端口对了没(不在同一台设备、自己实现协议)、再不在同一个网段?
确定你实现的协议格式是不是对的、在不在一个网段,如果确定都没问题,那么建议你禁止错误帧丢弃这个功能。用wireshark抓包分析。
发送端
tic;
load('data_testmat');
s=cell(200,200); %定义待传输的数据
for i=1:200;
for j=1:200;
for k=1:201;
b(k)=data_test_im(i,j,k);%深度位数据
end
s(i,j)={[11,i,j,b]};%待传输数据
end
end
u1 = udp('127001', 'RemotePort', 8866, 'LocalPort', 8844);%定义udp端口号和ip
u1OutputBufferSize=8192;%传数据buffer大小
u1Timeout=1000;%传输时间限制
fopen(u1);
for i=1:200;
for j=1:200;
aa=s(i,j);
A=aa{:};
%flag=fread(u1,1,'char');
fwrite(u1,A,'double'); %传数据
end
flag=fread(u1,1,'char');
end
fclose(u1);
delete(u1);
clear u1;
toc;
接收端
tic;
u2 = udp('127001', 'RemotePort', 8844, 'LocalPort', 8866);
u2InputBufferSize =8192;
u2TimeOut=100;
fopen(u2);
u2DatagramTerminateMode='off';
C=zeros(204,40000);
for i=1:40000;
%fwrite(u2,flag,'char');
if(mod(i,200)~=0)
C(:,i)=fread(u2,204,'float32');
else
fwrite(u2,flag,'char');
end
end
fclose(u2);
delete(u2);
clear u2;
toc;
经过测试,可以接收。
说明:把广播地址改为服务器地址时接收正常
如果接收正常就OK了你发送到广播地址,接收到的是服务器发出的
发送 -> to 255255255255
接受 -> bind 0000 -> from server_addr
要不然就是你没有说清楚
---------------------------
你希望服务器收到自己的广播?那个不是保证可以正确的。不一定会收到几个,也可能没有。
以上就是关于c# udp 为什么接受不到数据啊全部的内容,包括:c# udp 为什么接受不到数据啊、C语言UDP无法接收到信息,我用VS2015,程序可以运行到等待中,网络助手测试电脑与其他设备通讯正常、VB.net编写一个通过UDP通讯的小软件出现Bug,只能发送不能接收,求助!等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)