package com.tz.simple.tcp;
import java.io.IOException; import java.net.InetSocketAddress;
import java.nio.ByteBuffer;
import java.nio.channels.SelectionKey;
import java.nio.channels.Selector;
import java.nio.channels.SocketChannel; import java.util.Iterator;
import java.util.Set;
import com.tz.uitl.Common;
/**
* 非阻塞式TCP时间服务器
* 同并发接收服务器数据
*
* @author LJZ
*
*/
public class TCPTimeClient extends Thread {
private int serverPort = 8485;
private SocketChannel client = null;
private Selector readSelector = null;
public TCPTimeClient(int p) throws IOException {
serverPort = p;
readSelector = Selector.open();
client = SocketChannel.open();
client.connect(new InetSocketAddress("192.168.100.38", serverPort));
client.configureBlocking(false);
client.register(readSelector, SelectionKey.OP_READ);
System.out.println("客户端 [" + client.socket().getLocalSocketAddress() + "] 启动, 连接服务器 ["
+ client.socket().getRemoteSocketAddress() + "]");
}
public void run() {
while (true) {
try {
int keysReady = readSelector.select(100);
if (keysReady > 0) {
Set readyKeys = readSelector.selectedKeys();
for (Iterator i = readyKeys.iterator(); i.hasNext();) {
i.next();
i.remove();
int nbytes = -1;
ByteBuffer byteBuffer = ByteBuffer.allocate(1024);
nbytes = client.read(byteBuffer);
if (nbytes > 0) {
byteBuffer.flip();
System.out.println("收到服务器传来数据 "
+ Common.decode(byteBuffer));
}
}
}
client.write(ByteBuffer.wrap("abcd".getBytes()));
} catch (Exception e) {
e.printStackTrace();
} finally {
}
}
}
/**
* @param args
*/
public static void main(String[] args) {
try {
new TCPTimeClient(8485).start();
} catch (Exception e) {
e.printStackTrace();
}
}
}
|