對java的socket一直很陌生,陌生到別人問我線程通信時,感覺自己無地自容,愧對自己多java的熱愛。
正好最近項目抽風中,看到csdn上有相關資料,就自己寫了點demo。希望對剛入門或則盡快掌握socket通信開發
的朋友有所啟發。
服務端代碼
1 /** 2 * @author draem0507@gmail.com 3 * @TODO java線程開發之一 單線程 4 * @version 1.0 5 * @date 2013-5-7下午09:19:45 6 * @blgos myblog:http://www.cnblogs.com/draem0507 7 */ 8 9 public class ServerTest { 10 11 public static void main(String[] args) throws IOException { 12 13 ServerSocket server = new ServerSocket(10000); 14 Socket socket = server.accept(); 15 BufferedReader in = new BufferedReader(new InputStreamReader(socket 16 .getInputStream())); 17 PrintWriter out = new PrintWriter(socket.getOutputStream()); 18 while (true) { 19 String msg = in.readLine(); 20 System.out.println("服務端收到的信息:" + msg); 21 out.println("server receive:" + msg); 22 out.flush(); 23 if (msg.equals("bye")) { 24 break; 25 } 26 27 } 28 29 socket.close(); 30 31 } 32 33 }
客戶端代碼
1 public class ClientTest { 2 public static void main(String[] args) throws Exception { 3 Socket socket = new Socket("localhost", 10000); 4 BufferedReader in = new BufferedReader(new InputStreamReader(socket 5 .getInputStream())); 6 PrintWriter out = new PrintWriter(socket.getOutputStream()); 7 BufferedReader reader = new BufferedReader(new InputStreamReader( 8 System.in)); 9 10 while (true) { 11 String msg = reader.readLine(); 12 out.println(msg); 13 out.flush(); 14 if (msg.equals("bye")) { 15 break; 16 } 17 System.out.println(in.readLine()); 18 } 19 socket.close(); 20 } 21 }
測試代碼的時候,先運行服務端,在運行客戶端。
因為是單線程的,所以沒有辦法多次運行客戶端代碼。如果要實現1-n模式,則需要用到多線程模式。