java 怎么用UDP实时接收数据?
我自己写的代码:import java.io.IOException;import java.net.DatagramPacket;import java.net.DatagramSocket;import java.net.InetAddress;import java.net.SocketException;import java.net.UnknownHostException;public class UdpRecvDemo{ public static void main(String[] args) throws IOException { Recv(); } public static void Recv() throws IOException { System.out.println("接受开始......"); DatagramSocket ds = new DatagramSocket(3388); while(true) { byte[]buf = new byte[1024]; DatagramPacket dp = new DatagramPacket(buf,buf.length); ds.receive(dp); System.out.println(ds); String ip = dp.getAddress().getHostAddress(); int port = dp.getPort(); String text = new String(dp.getData(),0,dp.getLength()); if(text.equals("exit")) { System.out.println(ip+"退出会话......"); break; } System.out.println(ip+":"+port+"===>me "+text); } ds.close(); }}

怎么用MATLAB做UDP协议接受数据
发送端tic;load('data_test.mat');s=cell(200,200); %定义待传输的数据for i=1:200;for j=1:200;for k=1:201;b(k)=data_test_im(i,j,k);%深度位数据ends(i,j)={[11,i,j,b]};%待传输数据endendu1 = udp('127.0.0.1', 'RemotePort', 8866, 'LocalPort', 8844);%定义udp端口号和ipu1.OutputBufferSize=8192;%传数据buffer大小u1.Timeout=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'); %传数据endflag=fread(u1,1,'char');endfclose(u1);delete(u1);clear u1;toc;接收端tic;u2 = udp('127.0.0.1', 'RemotePort', 8844, 'LocalPort', 8866);u2.InputBufferSize =8192;u2.TimeOut=100;fopen(u2);u2.DatagramTerminateMode='off';C=zeros(204,40000);for i=1:40000;%fwrite(u2,flag,'char');if(mod(i,200)~=0)C(:,i)=fread(u2,204,'float32');elsefwrite(u2,flag,'char');endendfclose(u2);delete(u2);clear u2;toc;

如何连续接收udp报文
UDP包UDP报头由4个域组成,其中每个域各占用2个字节,具体如下:源端口号目标端口号数据报长度校验值 UDP协议使用端口号为不同的应用保留其各自的数据传输通道。UDP和TCP协议正是采用这一机制实现对同一时刻内多项应用同时发送和接收数据的支持。数据发送一方(可以是客户端或服务器端)将UDP数据报通过源端口发送出去,而数据接收一方则通过目标端口接收数据。有的网络应用只能使用预先为其预留或注册的静态端口;而另外一些网络应用则可以使用未被注册的动态端口。因为UDP报头使用两个字节存放端口号,所以端口号的有效范围是从0到65535。一般来说,大于49151的端口号都代表动态端口。TCP包每个tcp都包含源端口号和目标端口号,加上ip头中的源ip和目的ip,唯一确定一个tcp连接。序号用来标识从tcp发端向tcp收端发送的数据字节流,它表示在这个报文段中的第一个数据字节。序号字段包含由这个主机选择的该连接的初始序号isn(Initial Sequence Number)。该主机要发送数据的第一个字节,序号为isn+1,因为syn占用了一个序号。IP包IPV4报头有12个必需的字段和可选IP选项字段,位于要发送的数据之前。如果使用IP层已有的库或其他组件,一般不必考虑报头中的大多数字段,但程序代码需要提供源端和目的端地址。1、版本(4比特)IP协议版本已经经过多次修订,1981年的RFC0791描述了IPV4,RCF2460中介绍了IPV6。2、报头长度(4比特)报头长度是报头数据的长度,以4字节表示,也就是以32字节为单位。报头长度是可变的。必需的字段使用20字节(报头长度为5,IP选项字段最多有40个附加字节(报头长度为15)。3、服务类型(8比特)该字段给出发送进程建议路由器如何处理报片的方法。可选择最大可靠性、最小延迟、最大吞吐量和最小开销。路由器可以忽略这部分。4、数据报长度(16比特)该字段是报头长度和数据字节的总和,以字节为单位。最大长度为65535字节。5、标识符(16比特)原是数据的主机为数据报分配一个唯一的数据报标识符。在数据报传向目的地址时,如果路由器将数据报分为报片,那么每个报片都有相同的数据标识符。6、标志(3比特)标志字段中有2为与报片有关。位0:未用。位1:不是报片。如果这位是1,则路由器就不会把数据报分片。路由器会尽可能把数据报传给可一次接收整个数据报的网络;否则,路由器会放弃数据报,并返回 差错报文,表示目的地址不可达。IP标准要求主机可以接收576字节以内的数据报,因此,如果想把数据报传给未知的主机,并想确认数据报没有因为大小的原 因而被放弃,那么就使用少于或等于576字节的数据。位2:更多的报片。如果该位为1,则数据报是一个报片,但不是该分片数据报的最后一个报片;如果该位为0,则数据报没有分片,或者是最后一个报片。7、报片偏移(13比特)该字段标识报片在分片数据报中的位置。其值以8字节为单位,最大为8191字节,对应65528字节的偏移。例如,将要发送的1024字节分为576和424字节两个报片。首片的偏移是0,第二片的偏移是72(因为72×8=576)。8、生存时间(8比特)如果数据报在合理时间内没有到达目的地,则网络就会放弃它。生存时间字段确定放弃数据报的时间。生存时间表示数据报剩余的时间,每个路由器都会将其值减一,或递减需要数理和传递数据报的时间。实际上,路由器处理和传递数据报的时间一般都小于1S,因此该值没有测量时间,而是测量路由器之间跳跃次数或网段的个数。发送数据报的计算机设置初始生存时间。9、协议(8比特)该字段指定数据报的数据部分所使用的协议,因此IP层知道将接收到的数据报传向何处。TCP协议为6,UDP协议为17。10、报头检验和(16比特)该字端使数据报的接收方只需要检验IP报头中的错误,而不校验数据区的内容或报文。校验和由报头中的数值计算而得,报头校验和假设为0,以太网帧和TCP报文段以及UDP数据报中的可选项都需要进行报文检错。11、源IP地址(32比特)表示数据报的发送方。12、目的IP地址(32比特)表示数据报的目的地。

udp协议如何限制接收数据的大小
对于以太网环境下UDP传输中的数据包长度问题,首先要看TCP/IP协议,涉及到四层:链路层,网络层,传输层,应用层。其中以太网(Ethernet)的数据帧在链路层,IP包在网络层,TCP或UDP包在传输层,TCP或UDP中的数据(Data)在应用层,它们的关系是 数据帧{IP包{TCP或UDP包{Data}}}在应用程序中我们用到的Data的长度最大是多少,直接取决于底层的限制。我们从下到上分析一下: 在链路层,由以太网的物理特性决定了数据帧的长度为(46+18)-(1500+18),其中的18是数据帧的头和尾,46+18=64是以太网帧的最短帧长,1500+18=1518是最大帧长。也就是说数据帧的内容最大为1500,即MTU(Maximum Transmission Unit)为1500;(可是为什么我用wireshark抓下的包看到的帧头部是14字节,木有校验位4位?!,最短帧长是62?!)在网络层,因为IP包的首部要占用20字节,所以这的MTU为1500-20=1480; 在传输层,对于UDP包的首部要占用8字节,所以这的MTU为1480-8=1472; 所以,在应用层,你的Data最大长度为1472。(当我们的UDP包中的数据多于MTU(1472)时,发送方的IP层需要分片fragmentation进行传输,而在接收方IP层则需要进行数据报重组,由于UDP是不可靠的传输协议,如果分片丢失导致重组失败,将导致UDP数据包被丢弃)。 从上面的分析来看,在普通的局域网环境下,UDP的数据最大为1472字节最好(避免分片重组)。但在网络编程中,Internet中的路由器可能有设置成不同的值(小于默认值),Internet上的标准MTU值为576,所以Internet的UDP编程时数据长度最好在576-20-8=548字节以内。 如何修改本机的MTU修改方法如下:Windows平台下1、运行regedit2、打开HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesTcpipParametersInterfaces 3、Interfaces下有多个子项,每个子项对应一个网卡。请按如下方法选择网卡: A、确定本机用来连接Internet的网卡或拨号连接的IP,如192.168.0.19; B、用鼠标点击Interfaces上的子项,查看键值列表中的IPAddress项; C、如果IPAddress的键值与A中的IP相同,即192.168.0.19,则该子项就是要找的网卡。 4、进入该子项,在右边的窗口里按鼠标右键,选择“新建”->“DWORD 值”,输入名称“MTU”,按回车。再用鼠标双击“MTU”,弹出修改窗口,填入MTU的值(一般为十进制的1480)。 填写前请先把基数设为十进制。 设置好后,需要重启机器才能生效。 Windows 7(XP、Vista未实测) 1、使用管理员权限运行cmd 2、使用netsh interface ipv4 show subinterfaces命令看看MTU以及本地连接名称。 3、使用netsh interface ipv4 set subinterface "连接名" mtu=300 store=persistent (注:这里的连接名是你使用上面命令看到的MTU值对应的这个连接名,他在右边显示。) 附:1、此方法不用重启;2、如是ipv6就将上面的ipv4改成ipv6 Linux下可使用如下命令修改 需要root权限 ifconfig 网卡 MTU值 如 ifconfig eth0 mtu 1460 MaxMTU是最大的TCP/IP传输单元,在TCP/IP协议中,将要传输的数据分成较小的组进行传输,每个组的大小为576字节。Windows默认的字节为1500,这是以太网的分组标准。ADSL使用的 PPPoE略小于这个数值,一般为1492。而某些网站采用的MaxMTU大于1492,所以,可能导致某些网页不能访问。修改Windows默认的MaxMTU可以解决这个问题。不论是 PC机上安装的PPPoE软件或者是内置在Modem的 PPPoE软件,在使用中都有可能遇到这个问题。 如果使用路由器出现此种情况, 请在 防火墙配置 => 基本设定 里, 将MTU改为手工, 设置为 1492 即可. 那如何确定路由器从ISP获得的 MTU 为 1500,
那要看你用什么路由器了,你是想一台电脑控制还是局域性控制! 要是局域性控制那你最好用软路由器!要不然是不可能的达到的!
不限制

UDP协议怎么确定接收消息长短?
理论上,IP数据报的最大长度是65535字节,这是由IP首部16比特总长度字段所限制的。 去除20字节的IP首部和8个字节的UDP首部, UDP数据报中用户数据的最长长度为65507字节。所以可以预先开辟一块64k的常驻内存空间,recvfrom每次用该buffer去接收数据,它的返回值就是接收消息的长度。 请采纳,谢谢。

本文由 在线网速测试 整理编辑,转载请注明出处。