62,623
社区成员
发帖
与我相关
我的任务
分享
package snake.test.n4;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.ServerSocket;
import java.nio.channels.SelectionKey;
import java.nio.channels.Selector;
import java.nio.channels.ServerSocketChannel;
import java.util.Iterator;
import java.util.Set;
public class N4 {
static int port = 6666;
Selector selector;
ServerSocketChannel serverSocket;
public static void main(String[] args) {
try {
ServerSocketChannel ssc = ServerSocketChannel.open();
ServerSocket ss = ssc.socket();
InetSocketAddress isa = new InetSocketAddress(port);
ss.bind(isa);
Dispatcher d1 = new Dispatcher();
Dispatcher d2 = new Dispatcher();
String name = "a1";
Acceptor a1 = new Acceptor(ssc, d1, name);
name = "a2";
Acceptor a2 = new Acceptor(ssc, d2, name);
new Thread(d1).start();
new Thread(d2).start();
new Thread(a1).start();
new Thread(a2).start();
} catch (IOException e) {
e.printStackTrace();
}
}
void run() {
}
}
package snake.test.n4;
import java.nio.channels.SelectionKey;
public interface Handler {
void handle(SelectionKey key);
}
package snake.test.n4;
import java.io.IOException;
import java.nio.channels.SelectionKey;
import java.nio.channels.ServerSocketChannel;
import java.nio.channels.SocketChannel;
public class Acceptor implements Runnable {
private ServerSocketChannel ssc;
private Dispatcher d;
private int num = 0;
private String name;
public Acceptor(ServerSocketChannel ssc, Dispatcher d, String name) {
this.ssc = ssc;
this.d = d;
this.name = name;
}
public void run() {
for (;;) {
try {
num++;
SocketChannel sc;
sc = ssc.accept();
sc.configureBlocking(false);
d.register(sc, SelectionKey.OP_READ, new RequestHandler(sc,
name + num));
} catch (IOException e) {
e.printStackTrace();
break;
}
}
}
}
package snake.test.n4;
import java.io.IOException;
import java.nio.channels.ClosedChannelException;
import java.nio.channels.SelectableChannel;
import java.nio.channels.SelectionKey;
import java.nio.channels.Selector;
import java.util.Iterator;
import java.util.Set;
public class Dispatcher implements Runnable {
private Selector sel;
private Object gate = new Object();
public Dispatcher() {
try {
sel = Selector.open();
} catch (IOException e) {
e.printStackTrace();
}
}
void dispatch() throws IOException {
sel.select();
for (Iterator<SelectionKey> i = sel.selectedKeys().iterator(); i
.hasNext();) {
SelectionKey sk = i.next();
i.remove();
Handler h = (Handler) sk.attachment();
h.handle(sk);
}
synchronized (gate) {
}
}
void register(SelectableChannel ch, int ops, Handler h) {
try {
synchronized (gate) {
sel.wakeup();
ch.register(sel, ops, h);
}
} catch (ClosedChannelException e) {
e.printStackTrace();
}
}
public void run() {
for (;;) {
try {
dispatch();
} catch (IOException e) {
e.printStackTrace();
break;
}
}
}
}
package snake.test.n4;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.channels.SelectionKey;
import java.nio.channels.SocketChannel;
import java.nio.charset.Charset;
import java.nio.charset.CharsetDecoder;
public class RequestHandler implements Handler {
private SocketChannel sc;
String name;
public RequestHandler(SocketChannel sc, String name) {
this.sc = sc;
this.name = name;
}
public void handle(SelectionKey sk) {
sc = (SocketChannel) sk.channel();
String recvData = null;
try {
recvData = readMessage();
System.out.println(name + " " + recvData);
} catch (IOException e) {
sk.cancel();
System.out.println("Closed");
}
}
public String readMessage() throws IOException {
String result = null;
ByteBuffer buf = ByteBuffer.allocate(16384);
buf.clear();
int nBytes = sc.read(buf);
buf.flip();
// Charset charset = Charset.forName("us-ascii");
Charset charset = Charset.forName(System.getProperty("file.encoding"));
CharsetDecoder decoder = charset.newDecoder();
CharBuffer charBuffer = decoder.decode(buf);
result = charBuffer.toString();
// sc.write(buf);
return result;
}
}
package snake.test.channel;
import java.net.*;
import java.nio.ByteBuffer;
import java.nio.channels.Selector;
import java.nio.channels.SocketChannel;
import java.util.Date;
import java.io.*;
public class sendMsg {
public static void main(String[] args) {
try {
Socket theSocket = new Socket("127.0.0.1", 6666);
Writer out = new OutputStreamWriter(theSocket.getOutputStream());
Date now = new Date();
out.write(now.toString() + "\r\n");
out.flush();
theSocket.close();
} // end try
catch (UnknownHostException ex) {
System.err.println(ex);
}
catch (IOException ex) {
System.err.println(ex);
}
}
}
package snake.test.n4;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.ServerSocket;
import java.nio.channels.SelectionKey;
import java.nio.channels.Selector;
import java.nio.channels.ServerSocketChannel;
import java.util.Iterator;
import java.util.Set;
public class N4 {
static int port = 6666;
Selector selector;
ServerSocketChannel serverSocket;
public static void main(String[] args) {
try {
ServerSocketChannel ssc = ServerSocketChannel.open();
ServerSocket ss = ssc.socket();
InetSocketAddress isa = new InetSocketAddress(port);
ss.bind(isa);
Dispatcher d1 = new Dispatcher();
Dispatcher d2 = new Dispatcher();
String name = "a1";
Acceptor a1 = new Acceptor(ssc, d1, name);
name = "a2";
Acceptor a2 = new Acceptor(ssc, d2, name);
new Thread(d1).start();
new Thread(d2).start();
new Thread(a1).start();
new Thread(a2).start();
} catch (IOException e) {
e.printStackTrace();
}
}
void run() {
}
}
package snake.test.n4;
import java.nio.channels.SelectionKey;
public interface Handler {
void handle(SelectionKey key);
}
package snake.test.n4;
import java.io.IOException;
import java.nio.channels.SelectionKey;
import java.nio.channels.ServerSocketChannel;
import java.nio.channels.SocketChannel;
public class Acceptor implements Runnable {
private ServerSocketChannel ssc;
private Dispatcher d;
private int num = 0;
private String name;
public Acceptor(ServerSocketChannel ssc, Dispatcher d, String name) {
this.ssc = ssc;
this.d = d;
this.name = name;
}
public void run() {
for (;;) {
try {
num++;
SocketChannel sc;
sc = ssc.accept();
sc.configureBlocking(false);
d.register(sc, SelectionKey.OP_READ, new RequestHandler(sc,
name + num));
} catch (IOException e) {
e.printStackTrace();
break;
}
}
}
}
package snake.test.n4;
import java.io.IOException;
import java.nio.channels.ClosedChannelException;
import java.nio.channels.SelectableChannel;
import java.nio.channels.SelectionKey;
import java.nio.channels.Selector;
import java.util.Iterator;
import java.util.Set;
public class Dispatcher implements Runnable {
private Selector sel;
private Object gate = new Object();
public Dispatcher() {
try {
sel = Selector.open();
} catch (IOException e) {
e.printStackTrace();
}
}
void dispatch() throws IOException {
sel.select();
for (Iterator<SelectionKey> i = sel.selectedKeys().iterator(); i
.hasNext();) {
SelectionKey sk = i.next();
i.remove();
Handler h = (Handler) sk.attachment();
h.handle(sk);
}
synchronized (gate) {
}
}
void register(SelectableChannel ch, int ops, Handler h) {
try {
synchronized (gate) {
sel.wakeup();
ch.register(sel, ops, h);
}
} catch (ClosedChannelException e) {
e.printStackTrace();
}
}
public void run() {
for (;;) {
try {
dispatch();
} catch (IOException e) {
e.printStackTrace();
break;
}
}
}
}
package snake.test.n4;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.channels.SelectionKey;
import java.nio.channels.SocketChannel;
import java.nio.charset.Charset;
import java.nio.charset.CharsetDecoder;
public class RequestHandler implements Handler {
private SocketChannel sc;
String name;
public RequestHandler(SocketChannel sc, String name) {
this.sc = sc;
this.name = name;
}
public void handle(SelectionKey sk) {
sc = (SocketChannel) sk.channel();
String recvData = null;
try {
recvData = readMessage();
System.out.println(name + " " + recvData);
} catch (IOException e) {
sk.cancel();
System.out.println("Closed");
}
}
public String readMessage() throws IOException {
String result = null;
ByteBuffer buf = ByteBuffer.allocate(16384);
buf.clear();
int nBytes = sc.read(buf);
buf.flip();
// Charset charset = Charset.forName("us-ascii");
Charset charset = Charset.forName(System.getProperty("file.encoding"));
CharsetDecoder decoder = charset.newDecoder();
CharBuffer charBuffer = decoder.decode(buf);
result = charBuffer.toString();
// sc.write(buf);
return result;
}
}
package snake.test.channel;
import java.net.*;
import java.nio.ByteBuffer;
import java.nio.channels.Selector;
import java.nio.channels.SocketChannel;
import java.util.Date;
import java.io.*;
public class sendMsg {
public static void main(String[] args) {
try {
Socket theSocket = new Socket("127.0.0.1", 6666);
Writer out = new OutputStreamWriter(theSocket.getOutputStream());
Date now = new Date();
out.write(now.toString() + "\r\n");
out.flush();
theSocket.close();
} // end try
catch (UnknownHostException ex) {
System.err.println(ex);
}
catch (IOException ex) {
System.err.println(ex);
}
}
}