DatagramSocket.receive()方法无响应的解决
2012-01-18 16:13
489 查看
之前看网上说用发送命令行的方式获取客户端的mac地址,具体方法不复述了。
其中用到这个receive()方法,朋友在测试的时候发现会无响应,发现是window的系统防火墙开启以后出现的。
无法保证每个用户都是关闭系统防火墙的,所以看了一下api,发现一个解决方法。
直接贴代码看吧
DataRamSocket.setSoTimeout(2000); 就是这个方法了
API介绍如下,好了问题解决。
启用/禁用带有指定超时值的 SO_TIMEOUT,以毫秒为单位。将此选项设为非零的超时值时,对此 DatagramSocket 调用 receive() 将只阻塞此时间长度。如果超过超时值,将引发
java.net.SocketTimeoutException,虽然 DatagramSocket 仍旧有效。选项必须在进入阻塞操作前被启用才能生效。超时值必须是 > 0 的数。超时值为 0 被解释为无穷大超时值。
参数:
其中用到这个receive()方法,朋友在测试的时候发现会无响应,发现是window的系统防火墙开启以后出现的。
无法保证每个用户都是关闭系统防火墙的,所以看了一下api,发现一个解决方法。
直接贴代码看吧
DatagramSocket ds=new DatagramSocket(); DatagramPacket dpk = new DatagramPacket(tcpNs, tcpNs.length, InetAddress.getByName(ip), iRemotePort); ds.send(dpk); DatagramPacket dp = new DatagramPacket(buffer, buffer.length); try { //设置超时时间,2秒 ds.setSoTimeout(2000); ds.receive(dp); } catch (Exception e) { return ""; }
DataRamSocket.setSoTimeout(2000); 就是这个方法了
API介绍如下,好了问题解决。
setSoTimeout
public void setSoTimeout(int timeout) throws SocketException
启用/禁用带有指定超时值的 SO_TIMEOUT,以毫秒为单位。将此选项设为非零的超时值时,对此 DatagramSocket 调用 receive() 将只阻塞此时间长度。如果超过超时值,将引发
java.net.SocketTimeoutException,虽然 DatagramSocket 仍旧有效。选项必须在进入阻塞操作前被启用才能生效。超时值必须是 > 0 的数。超时值为 0 被解释为无穷大超时值。
参数:
timeout- 指定的以毫秒为单位的超时值。 抛出:
SocketException- 如果底层协议出现错误,例如 UDP 错误。
相关文章推荐
- DatagramSocket.receive()方法无响应的解决
- W/System.err:at java.net.PlainDatagramSocketImpl.bind(PlainDatagramSocketImpl.java:68)问题解决方法
- 安装mysql最后一步未响应(解决方法)
- JAVA.NET.SOCKETEXCEPTION: TOO MANY OPEN FILES解决方法
- 使用 EndNote 之后 Office Word 2007 变慢或停止响应的解决方法
- ListView的Item上有个按钮 ,Item不能响应点击事件的解决方法
- brew安装mysql启动报错: socket报错和pid报错解决方法
- mysql错误:Can’t create TCP/IP socket (10106) 解决方法
- 关于"Could not load ejb proxy class com.appweb.services.ejb.messagebox.IEmailReceiveDAO"的解决方法
- socket bind failed的解决方法
- asynchronous socket error 10053错误及解决方法
- Listbox 重复点击事件不能响应的解决方法
- 连接Mysql提示Can’t connect to local MySQL server through socket的解决方法
- socket iOS 与java 后台进行socket通讯遇到的问题以及解决方法
- RHEL5.4 xm console没响应的原因及解决方法
- 安卓与串口服务器互联发送数据报文与接收数据报DatagramSocket.receive(参数体)接收不到数据报文
- DNS服务器未响应解决方法
- vs2012停止调试长时间不响应问题解决方法
- C#中Socket.Receive 方法 (Byte[], Int32, SocketFlags)的SocketFlags的含义
- IIS运行一段时间不响应的解决方法