您的位置:首页 > 理论基础 > 计算机网络

java网络编程——socket、NIO、AIO

2015-05-23 01:45 459 查看
计算机网络

TCP

public class TalkClient{

public static void main(String[] args){

try{

Socket socket = new Socket("127.0.0.1", 8080);

PrintWriter printWriter = new PrintWriter(socket.getOutputStream());

BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));

String data = "";//从控制台获取数据

while(!"exit".equals(data)){

printWriter.println(data);

printWriter.flush();

System.out.println("服务器消息:"+bufferedReader.readLine());

data = "";//从控制台获取数据

}

}finally{

printWriter.close();

bufferedReader.close();

socket.close();

}

}

}

public class TalkServer{

public static void main(String[] args){

try{

ServerSocket serverSocket = new ServerSocket(8080);

while(true){

Socket socket = serverSocket.accept();

PrintWriter printWriter = new PrintWriter(socket.getOutputStream());

BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));

System.out.println(bufferedReader.readLine());

printWriter.println(pringWriter.println("data"));

socket.close();

}

}finally{

serverSocket.close();

}

}

}

*****************************************************************************************************

UDP

public class Send{

public static void main(String[] args){

try{

DatagramSocket datagramSocket = new DatagramSocket(8999);

byte[] data = (new String("data")).getBytes();

InetAddress inetAddress = InetAddress.getByName('192.168.0.1');

DatagramPacket datagramPacket = new DatagramPacket(data, data.length, inetAddress, 10000);//port:10000

datagramSocket.send(datagramPacket);

}finally{

datagramSocket.close();

}

}

}

public class Receiver{

public static void main(String[] args){

try{

DatagramSocket datagramSocket = new DatagramSocket(10000);

byte[] data = new byte[1024];

DatagramPacket datagramPacket = new DatagramPacket(data, 0, data.length);

datagramSocket.receive(datagramPacket);

String result = new String(datagramPacket.getData(), 0, datagramPacket.getLength());

System.out.println(result);

}finally{

dataSocket.close();

}

}

}

*****************************************************************************************************

NIO

public class ChargenClient{

public static void main(String[] args){

try{

SocketAddress socketAddress = new InetSocketAddress("192.168.0.1", 8080);

SocketChannel socketChannel = SocketChannel.open(socketAddress);

ByteBuffer byteBuffer = ByteBuffer.allocate(74);

WritableByteChannel writableByteChannel = Channels.newChannel(System.out);

while(socketChannel.read(buffer) != -1){

byteBuffer.flip();

writableByteChannel.write(byteBuffer);

byteBuffer.clear();

}

}finally{

}

}

}

public class ChargenServer{

public static void main(String[] args){

try{

byte[] rotation = new byte[95*2];

for(byte i=' '; i<='~'; i++){

rotation[i-' '] = i;

rotation[i+95-' '] = i;

}

ServerSocketChannel serverSocketChannel = ServerSocketChannel.open();

ServerSocket serverSocket = serverSocketChannel.socket();

InetSocketAddress inetSocketAddress = new InetSocketAddress(8080);

serverSocket.bind(inetSocketAddress);

serverSocketChannel.configureBlocking(false);

Selector selector = Selector.open();

ServerSocketChannel.register(selector, SelectionKey.OP_ACCEPT);

while(true){

selector.select();

Set<SelectionKey> readyKeys = selector.selectedKeys();

Iterator<SelectionKey> iterator = readyKeys.iterator();

while(iterator.hasNext()){

SelectionKey key = iterator.next();

iterator.remove();

if(key.isAcceptable()){

ServerSocketChannel server = (ServerSocketChannel)key.channel();

SocketChannel client = server.accept();

System.out.println("Accepted connection from "+client);

client.configureBlocking(false);

SelectionKey key2 = client.register(selector, SelectionKey.OP_WRITE);

ByteBuffer buffer = ByteBuffer.allocate(74);

buffer.put(rotation, 0, 72);

buffer.put((byte)'\r');

buffer.put((byte)'\n');

buffer.flip();

key2.attach(buffer);

}else if(key.isWritable()){

SocketChannel client = (SocketChannel)key.channel();

ByteBuffer buffer = (ByteBuffer)key.attachment();

if(!buffer.hasRemaining()){

buffer.rewind();

int first = buffer.get();

buffer.rewind();

int position = first - ' ' + 1;

buffer.put(rotation, position, 72);

buffer.put((byte)'\r');

buffer.put((byte)'\n');

buffer.flip();

}

client.write(buffer);

}

}

}

}finally{

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  网络编程