私は TCP/IP を学ぼうとしており、演習としてhttp://overlooksoft.comのような LAN ホスト検出ユーティリティを開発しました。
ウェブをクロールした後、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 ブロードキャスト」への応答を期待していますが、このプログラムは でマークされた行で無期限に待機します。// <<<<<<<<<<<<<<<<<<<<
なんで?