首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

NIO根本(3)

2012-07-02 
NIO基本(3)DatagramChannel 是处理UDP协议1. serverimport java.net.InetSocketAddressimport java.net.S

NIO基本(3)
DatagramChannel 是处理UDP协议

1. server

import java.net.InetSocketAddress;import java.net.SocketAddress;import java.nio.ByteBuffer;import java.nio.channels.DatagramChannel;import java.nio.charset.Charset;public class DatagramServer {public static void main(String[] args) throws Exception {DatagramChannel channel = DatagramChannel.open();channel.socket().bind(new InetSocketAddress(1234));ByteBuffer bf = ByteBuffer.allocate(1024);while (true) {System.out.println("listening  ... ");SocketAddress remoteAddress = channel.receive(bf);new DealClientThread(channel, remoteAddress, bf);}}}class DealClientThread implements Runnable {private DatagramChannel channel;private SocketAddress remoteAddress;private ByteBuffer bf;public DealClientThread(DatagramChannel channel,SocketAddress remoteAddress, ByteBuffer bf) {this.channel = channel;this.remoteAddress = remoteAddress;this.bf = bf;new Thread(this).start();}public void run() {try {// reveivebf.flip();String receivedString = Charset.forName("UTF-8").newDecoder().decode(bf).toString();System.out.println("Receivet client " + remoteAddress.toString()+ " message: " + receivedString);// sendString sendString = "Hi, client(" + remoteAddress.toString()+ ") I had receive your message.";ByteBuffer bfSend = ByteBuffer.wrap(sendString.getBytes("UTF-8"));channel.send(bfSend, remoteAddress);} catch (Exception ex) {ex.printStackTrace();}}}


2. client
import java.net.InetSocketAddress;import java.net.SocketAddress;import java.nio.ByteBuffer;import java.nio.channels.DatagramChannel;import java.nio.charset.Charset;import java.util.Date;public class DatagramClient {public static void main(String[] args) throws Exception {// sendDatagramChannel channel = DatagramChannel.open();String sendString = "Hi, server. @" + new Date().toString();ByteBuffer sendBuffer = ByteBuffer.wrap(sendString.getBytes("UTF-8"));channel.send(sendBuffer, new InetSocketAddress("127.0.0.1", 1234));System.out.println("Send message to server end");// receiveByteBuffer receiveBuffer = ByteBuffer.allocate(80);SocketAddress remoteAddress = channel.receive(receiveBuffer);receiveBuffer.flip();String receivedString = Charset.forName("UTF-8").newDecoder().decode(receiveBuffer).toString();System.out.println("Receive message from " + remoteAddress.toString()+ " server: " + receivedString);}}

热点排行