UDP DUP超时UPD端口状态检测代码示例

UDP DUP超时UPD端口状态检测代码示例,第1张

UDPDUP超时UPD端口状态检测代码示例

本文主要介绍UDPDUP超时UPD端口状态检测,通过示例代码进行了非常详细的介绍,对大家的学习或者工作有一定的参考价值,有需要的朋友可以参考一下。

我之前写过一个例子,一个简单的UDP服务器和客户端的例子。里面已经写了,如果你把自己当成客户端,那么客户端可以指定自己的端口发送号码。

ds.setsotimeout(5000);即收集超时。如果你不设置它,它就在等待。比电视剧里的爱情故事还要漫长的等待,结果是一样的。他们都在等待死亡。但是,这个超时不能算是你请求的超时。请注意这个概念,因为这个超时只是用来标记这段时间没有从网络上获取数据,但即使获取了数据,也不一定是你的。看下面的例子就明白了。

然后就是端口问题。它还说您可以自己指定端口,也可以将自己作为客户端使用。当需要发送数据时,可以创建一个连接对象,然后发送数据,这样端口就是动态的。也就是说,只要DatagramSocket对象没有重新初始化或消失,本地打开的UDP端口就不会关闭。

然后就是UDP状态的问题。其实之前有一篇文章是关于UDP连接对象的理解和使用的。无状态意味着这个连接没有状态,谁知道他有没有服务器,那个服务器死了没有。但是对于local来说,如果你的DatagramSocket对象一直存在,那么你的本地端口就是有状态的,是活的。

然后打个比方:

packagetest; importjava.io.*; importjava.net.*; importjava.util.Arrays; /** *UDP客户端程序,用于对服务端发送数据,并接收服务端的回应信息 */ publicclassUdpClientSocket{ privatebyte[]buffer=newbyte[1024]; privatestaticDatagramSocketds=null; /** *测试客户端发包和接收回应信息的方法 */ publicstaticvoidmain(String[]args)throwsException{ UdpClientSocketclient=newUdpClientSocket(); StringserverHost="127.0.0.1"; intserverPort=10002; client.send(serverHost,serverPort,newbyte[]{1,2,3,4,5}); while(true){ byte[]bt=client.receive(); if(null!=bt&&bt.length>0) System.out.println("收到数据:"+Arrays.toString(bt)); Thread.sleep(1000); } } /** *构造函数,创建UDP客户端 */ publicUdpClientSocket()throwsException{ ds=newDatagramSocket(8899);//邦定本地端口作为客户端 ds.setSoTimeout(5000); } /** *向指定的服务端发送数据信息 */ publicfinalvoidsend(finalStringhost,finalintport,finalbyte[]bytes)throwsIOException{ DatagramPacketdp=newDatagramPacket(bytes,bytes.length,InetAddress.getByName(host),port); ds.send(dp); } /** *接收从指定的服务端发回的数据 */ publicfinalbyte[]receive()throwsException{ try{ DatagramPacketdp=newDatagramPacket(buffer,buffer.length); ds.receive(dp); byte[]data=newbyte[dp.getLength()]; System.arraycopy(dp.getData(),0,data,0,dp.getLength()); returndata; }catch(Exceptione){ e.printStackTrace(); returnnull; } } }

运行时不断报告错误:

Java.net.sockettimeoutexception:在Java.net.plaindatagramsocketimpl.Receive0(本机方法)
atJava.net.plaindatagramsocketimpl.Receive(plaindatagramsocketimpl.Java:136)
atJava.net.datagramsocket.Receive(datagramsocket.Java:712)
attest.测试时的udpclientsocket.receive(udpclientsocket.Java:46)
。udpclientsocket.main(udpclientsocket.Java:20)
java.net.sockettimeoutexception:在Java.net.plaindatagramsocketimpl.Receive0(本机方法)
在Java.net.plaindatagramsocketimpl.Receive(plaindatagramsocketimpl.Java:136)
在Java.net测试时的udpclientsocket.receive(udpclientsocket.Java:46)
。udpclientsocket.main(udpclientsocket.Java:20)

使用TCPUDPDbg向8899发送数据,可以接收到:

收到的数据:[16,17,18,19,20]

在这里的例子中已经说明了这一点

1.本地端口是8899

2.数据收集超时为5秒

3.一组数据被发送到本地端口10002。谁知道有没有收到

4.连续获取本地端口8899接收的UDP数据。

然后找到

1.发送数据时没有错误

2.总是报告错误的收集超时

3.可以接收TCPUDPDbg发送给8899的数据。

摘要:

1.UDP可以指定数据收集的超时,但是每个请求的超时需要自己控制

2.UDP可以绑定本地端口的数量,并且这个端口可以在一种状态下存活

3.UDP没有状态,但可以是本地的。

这就是本文的全部内容。希望对大家的学习有帮助,支持我们。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/774263.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-03
下一篇 2022-05-03

发表评论

登录后才能评论

评论列表(0条)

保存