DatagramSocket.receive()方法无响应的解决
2013-04-26 14:06
323 查看
之前看网上说用发送命令行的方式获取客户端的mac地址,具体方法不复述了。
其中用到这个receive()方法,朋友在测试的时候发现会无响应,发现是window的系统防火墙开启以后出现的。
无法保证每个用户都是关闭系统防火墙的,所以看了一下api,发现一个解决方法。
直接贴代码看吧
[java] view
plaincopyprint?
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介绍如下,好了问题解决。
启用/禁用带有指定超时值的 SO_TIMEOUT,以毫秒为单位。将此选项设为非零的超时值时,对此 DatagramSocket 调用 receive() 将只阻塞此时间长度。如果超过超时值,将引发 java.net.SocketTimeoutException,虽然 DatagramSocket 仍旧有效。选项必须在进入阻塞操作前被启用才能生效。超时值必须是 > 0 的数。超时值为 0 被解释为无穷大超时值。
参数:
其中用到这个receive()方法,朋友在测试的时候发现会无响应,发现是window的系统防火墙开启以后出现的。
无法保证每个用户都是关闭系统防火墙的,所以看了一下api,发现一个解决方法。
直接贴代码看吧
[java] view
plaincopyprint?
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)问题解决方法
- ruby webrick 响应慢解决方法
- 转:java.net.SocketException: Too many open files解决方法
- Can’t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock’解决方法
- 使用javamail出现java.net.SocketException: Network is unreachable: connect异常 解决方法
- Android ListView的item点击无响应的解决方法
- supervisorctl报错"error: <class 'socket.gaierror'>, [Errno -2] Name or service not known"的解决方法
- java.net.SocketException: Connection reset 解决方法
- java.net.SocketException: Too many open files解决方法
- phpMyAdmin登陆时:错误 #2003 - 服务器没有响应 的解决方法
- 异常 The content of the adapter has changed but ListView did not receive a notification可能的一种解决方法
- 超时时间已到。在操作完成之前超时时间已过或服务器未响应"的解决方法
- DatagramSocket的使用方法
- VMWare中Linux启动键盘失去响应的解决方法
- socket iOS 与java 后台进行socket通讯遇到的问题以及解决方法
- phpmyadmin出现2003服务器无响应解决方法
- socket接收服务器数据,输出为乱码或无法输出的解决方法
- 在c#中的TextBox响应回车键发出“咚”的一声解决方法
- win10 音频服务未响应的解决方法