JAVA网络编程-IO之Socket
在继续记录NIO的学习之前,我觉得有必要先复习一下IO相关的知识。今天就说一下网络套接字Socket
废话不多说,先上代码,这里实现一个最简单的Echo功能,客户端发送一条消息服务端直接进行返回。
服务端:
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; /** * @Description: * @author:xyq * @date:2018年6月6日 */ public class Server { ServerSocket ss = null; public static void main(String[] args) { new Server().startServer(); } public void startServer() { Socket socket = null; try { ss = new ServerSocket(1234); // 监听1234端口 while (true) { socket = ss.accept(); // 堵塞式接受Socket new ServerThread(socket).start(); // 放入线程进行处理 } } catch (IOException e) { e.printStackTrace(); } } class ServerThread extends Thread { Socket socket = null; public ServerThread(Socket socket){ this.socket = socket; } /* (non-Javadoc) * @see java.lang.Runnable#run() */ @Override public void run() { BufferedReader br = null; PrintWriter pw = null; try { pw = new PrintWriter(socket.getOutputStream()); br = new BufferedReader(new InputStreamReader(socket.getInputStream())); while (true) { String line = br.readLine(); System.out.println("从客户端来的信息:" + line); pw.println("你好,服务器已经收到您的信息!'" + line + "'\n"); pw.flush(); System.out.println("已经返回给客户端!"); } } catch (IOException e) { e.printStackTrace(); } finally { try { pw.close(); br.close(); socket.close(); } catch (IOException e) { e.printStackTrace(); } } } } }
客户端:
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.Socket; import java.net.UnknownHostException; /** * @Description: * @author:xyq * @date:2018年6月6日 */ public class Client { public static void main(String[] args) { new Client().startClient(); } public void startClient() { Socket socket = null; BufferedReader br = null; PrintWriter pw = null; try { socket = new Socket("localhost", 1234); br = new BufferedReader(new InputStreamReader(socket.getInputStream())); pw = new PrintWriter(socket.getOutputStream()); String get = "客户端" + Math.random() * 1000; while (true) { if (get != null && get.length() > 0) { pw.println(get); // 写入缓冲流 pw.flush(); // 刷新缓冲 } if (br != null) { String line = br.readLine(); System.out.println("从服务器来的信息:" + line); } Thread.sleep(2000); } } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); } } }