public class NIOUDPServer {
private int PORT=5140;
private DatagramChannel datagramChannel;
private Selector selector;
private ByteBuffer buffer;
private int CAPACITY=1024*100;
public void init() throws IOException {
selector = Selector.open();
datagramChannel = SelectorProvider.provider().openDatagramChannel();
InetSocketAddress adrress = new InetSocketAddress(InetAddress.getLocalHost(), PORT);
datagramChannel.configureBlocking(false);
datagramChannel.socket().bind(adrress);
datagramChannel.register(selector, SelectionKey.OP_READ);
buffer=ByteBuffer.allocate(CAPACITY);
} public void run() throws IOException { while (true) { if (selector.select() > 0) {
Set<SelectionKey> keys=selector.selectedKeys();
Iterator<SelectionKey> iterator= keys.iterator();
while(iterator.hasNext()){
buffer.clear();
SelectionKey key=iterator.next();
iterator.remove();
if(!key.isReadable() ){
continue;
}
datagramChannel=(DatagramChannel)key.channel();
datagramChannel.receive(buffer);
buffer.flip();
System.out.println("服务器接受到:"
+ Charset.defaultCharset().decode(buffer)
.toString());
}
} }
} public static void main(String[] args) throws IOException {
NIOUDPServer nioudpServer= new NIOUDPServer();
nioudpServer.init();
nioudpServer.run();
}}
上面这段代码为想用来接收udp数据包,我想获取发送方的IP地址改怎么办,求大神。
private int PORT=5140;
private DatagramChannel datagramChannel;
private Selector selector;
private ByteBuffer buffer;
private int CAPACITY=1024*100;
public void init() throws IOException {
selector = Selector.open();
datagramChannel = SelectorProvider.provider().openDatagramChannel();
InetSocketAddress adrress = new InetSocketAddress(InetAddress.getLocalHost(), PORT);
datagramChannel.configureBlocking(false);
datagramChannel.socket().bind(adrress);
datagramChannel.register(selector, SelectionKey.OP_READ);
buffer=ByteBuffer.allocate(CAPACITY);
} public void run() throws IOException { while (true) { if (selector.select() > 0) {
Set<SelectionKey> keys=selector.selectedKeys();
Iterator<SelectionKey> iterator= keys.iterator();
while(iterator.hasNext()){
buffer.clear();
SelectionKey key=iterator.next();
iterator.remove();
if(!key.isReadable() ){
continue;
}
datagramChannel=(DatagramChannel)key.channel();
datagramChannel.receive(buffer);
buffer.flip();
System.out.println("服务器接受到:"
+ Charset.defaultCharset().decode(buffer)
.toString());
}
} }
} public static void main(String[] args) throws IOException {
NIOUDPServer nioudpServer= new NIOUDPServer();
nioudpServer.init();
nioudpServer.run();
}}
上面这段代码为想用来接收udp数据包,我想获取发送方的IP地址改怎么办,求大神。
datagramChannel.socket().getRemoteSocketAddress();
这个属于常用的功能,应该有API直接能取到。
String senderIp =((InetSocketAddress)socketAddress).getAddress().getHostAddress();