java IO 实现的socket
public class MyServerSocket {
public static void main(String[] args) throws Exception{
ServerSocket ss = new ServerSocket(8888);
Socket s = ss.accept();
System.out.println("server=========== accepted connect from " + s.getInetAddress().getHostAddress());
//read from standard input
BufferedReader stdReader = new BufferedReader(new InputStreamReader(System.in));
//write to socket
PrintWriter socketWriter = new PrintWriter(s.getOutputStream());
//read from socket
BufferedReader socketRreader = new BufferedReader(new InputStreamReader(s.getInputStream()));
String line = socketRreader.readLine();
while(!line.equals("quit")){
System.out.println("client: " + line);
socketWriter.println(stdReader.readLine());
socketWriter.flush();
line = socketRreader.readLine();
Thread.sleep(500);
}
stdReader.close();
socketWriter.close();
socketRreader.close();
s.close();
ss.close();
}
}
public class MySocket {
public static void main(String[] args) throws Exception{
Socket s = new Socket("localhost", 8888);
System.out.println("client=========== connected with server " + s.getInetAddress().getHostAddress());
//read from standard input
BufferedReader stdReader = new BufferedReader(new InputStreamReader(System.in));
//write to socket
PrintWriter socketWriter = new PrintWriter(s.getOutputStream());
//read from socket
BufferedReader socketRreader = new BufferedReader(new InputStreamReader(s.getInputStream()));
String line = stdReader.readLine();
while(!line.equals("quit")){
socketWriter.println(line);
socketWriter.flush();
System.out.println("server: " + socketRreader.readLine());
line = stdReader.readLine();
Thread.sleep(500);
}
stdReader.close();
socketWriter.close();
socketRreader.close();
s.close();
}
}
java NIO 实现的socket
public class MyServerSocketChannel {
public static void main(String[] args) throws Exception{
Selector selector = Selector.open();
ServerSocketChannel ssc = ServerSocketChannel.open();//(new InetSocketAddress(8888));
ssc.bind(new InetSocketAddress(8888));
ssc.configureBlocking(false);
ssc.register(selector, SelectionKey.OP_ACCEPT);
while(true){
selector.select();
Iterator<SelectionKey> it = selector.selectedKeys().iterator();
while(it.hasNext()){
SelectionKey key = it.next();
if((key.readyOps() & SelectionKey.OP_ACCEPT ) == SelectionKey.OP_ACCEPT){
ServerSocketChannel mychannel = (ServerSocketChannel)key.channel();
SocketChannel sc = mychannel.accept();
sc.configureBlocking(false);
sc.register(selector, SelectionKey.OP_READ + SelectionKey.OP_WRITE);
System.out.println( "accept from "+sc );
}else{
SocketChannel sc = (SocketChannel)key.channel();
if((key.readyOps() & SelectionKey.OP_READ )== SelectionKey.OP_READ){
System.out.println("received from client: " + SocketUtil.readFromSocketChannel(sc));
}
if((key.readyOps() & SelectionKey.OP_WRITE)== SelectionKey.OP_WRITE){
SocketUtil.writeToSocketChannel(sc, "I'm Server ");
System.out.println("write to client: ");
}
}
it.remove();
}
Thread.sleep(2000);
}
}
}
public class MySocketChannel {
public static void main(String[] args) throws Exception{
if(args.length==0){
System.out.println("please input your ID! ");
return;
}
SocketChannel sc = SocketChannel.open();
sc.configureBlocking(false);
sc.connect(new InetSocketAddress("localhost",8888));
while(sc.finishConnect()==false){
System.out.println("connecting... ");
Thread.sleep(500);
}
System.out.println("connected with server!");
while(true){
System.out.println("received from server: " + SocketUtil.readFromSocketChannel(sc));
SocketUtil.writeToSocketChannel(sc, "I'm " + args[0]);
System.out.println("wrote to server: ");
Thread.sleep(2000);
}
}
}
public class MySocketChannel2 {
public static void main(String[] args) throws Exception{
ByteBuffer buffer = ByteBuffer.allocate(1024);
SocketChannel sc = SocketChannel.open(new InetSocketAddress("localhost", 8888));
ReadableByteChannel chan = Channels.newChannel(System.in);
while(true){
chan.read(buffer);
buffer.flip();
sc.write(buffer);
buffer.clear();
}
}
}
public class SocketUtil {
public static String readFromSocketChannel(SocketChannel channel) throws Exception{
ByteBuffer buffer = ByteBuffer.allocate(1024);
StringBuffer stringBuffer = new StringBuffer();
while(true){
buffer.clear();
if(channel.read(buffer)<=0) break;
stringBuffer.append(new String(buffer.array(), 0, buffer.position()));
}
return stringBuffer.toString();
}
public static void writeToSocketChannel(SocketChannel channel, String str) throws Exception{
byte[] bytes = str.getBytes();
ByteBuffer buffer = ByteBuffer.allocate(bytes.length);
buffer.put(bytes);
buffer.flip();
channel.write(buffer);
}
}