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); } }