multiportechoclient.java

来自「Java NIO示例代码」· Java 代码 · 共 71 行

JAVA
71
字号
import java.nio.channels.SocketChannel;
import java.nio.channels.Selector;
import java.nio.channels.SelectionKey;
import java.nio.ByteBuffer;
import java.net.InetSocketAddress;
import java.io.IOException;
import java.io.Console;
import java.util.Iterator;

/**
 * @author : Vincent Chan
 * @class : MultiPortEchoClient
 * @date : 2009-3-3
 * @time : 14:56:56
 */
public class MultiPortEchoClient {
	public static void main(String[] args) throws IOException {
		if (args.length <= 0) {
			System.err.println("Usage: java MultiPortEcho port [port port ...]");
			System.exit(1);
		}
		int port = 0;
		port = Integer.parseInt(args[0]);
		InetSocketAddress address = new InetSocketAddress(port);
		SocketChannel client = SocketChannel.open();
		client.configureBlocking(false);
		Selector selector = Selector.open();
		client.register(selector, SelectionKey.OP_CONNECT);
		client.connect(address);
		ByteBuffer buffer = ByteBuffer.allocate(1024);
		while (true) {
			if (selector.select() > 0) {
				Iterator iter = selector.selectedKeys().iterator();
				while (iter.hasNext()) {
					SelectionKey key = (SelectionKey) iter.next();
					iter.remove();
					if (key.isConnectable()) {
						SocketChannel channel = (SocketChannel) key.channel();
						if (channel.isConnectionPending()) {
							channel.finishConnect();
						}
						System.out.print("请输入消息,输入Q或QUIT退出程序:");
						String input = null;
						while ((input = System.console().readLine()) != null) {
							input = input.trim().toLowerCase();
							break;
						}
						if (input.equals("q") || input.equals("quit")) {
							channel.close();
							System.exit(0);
						}
						buffer.clear();
						buffer.put(input.getBytes());
						buffer.flip();
						channel.write(buffer);
						channel.register(selector, SelectionKey.OP_READ);
					} else if (key.isReadable()) {
						SocketChannel channel = (SocketChannel) key
								.channel();
						int count = channel.read(buffer);
						if (count > 0) {
							System.out.println("服务器返回:" + buffer);
							buffer.clear();
						}
					}
				}
			}
		}
	}
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?