我尝试学习 TCP/IP,作为练习,我开发了一个 LAN 主机发现实用程序,例如http://overlooksoft.com。
爬网后,我找到nmap
了可以完成这项工作的实用程序。
我做了这个小测试:
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.SocketAddress;
import java.nio.ByteBuffer;
import java.nio.channels.DatagramChannel;
public class NetDiscovery {
public static void main( String[] args ) throws Throwable {
DatagramChannel channel = DatagramChannel.open();
channel.bind(
new InetSocketAddress( InetAddress.getByName( "192.168.1.7" ), 2416 ));
ByteBuffer buffer = ByteBuffer.allocate( 1024 );
SocketAddress address =
new InetSocketAddress( InetAddress.getByName( "192.168.1.255" ), 80 );
channel.send( buffer, address );
SocketAddress sender = channel.receive( buffer ); // <<<<<<<<<<<<<<<<<<<<
System.err.println(
((InetSocketAddress)sender).getAddress().getHostAddress());
}
}
我希望 LAN 上的其他主机 (4) 对这个“udp ping 广播”做出一些响应,但是这个程序在标记为的行中无限期地等待// <<<<<<<<<<<<<<<<<<<<
为什么?