標籤:
1. [代碼]讀操作Runable
1 package com.hrd.test.socket; 2 3 import java.io.BufferedReader; 4 import java.io.IOException; 5 import java.io.PrintWriter; 6 7 /** 8 * 作者: ehomeud 建立於: 2015/4/15 13:15 9 */10 public class ReadThread implements Runnable {11 12 private BufferedReader br;13 private String sc;14 15 public ReadThread(BufferedReader br,String sc){16 this.br=br;17 this.sc =sc;18 }19 @Override20 public void run() {21 while (true){22 try {23 String str = br.readLine();24 System.out.println(sc +":" +str);25 } catch (IOException e) {26 e.printStackTrace();27 }28 }29 }30 }
2. [代碼]寫操作Runable
package com.hrd.test.socket; import java.io.BufferedReader;import java.io.IOException;import java.io.PrintWriter; /** * 作者: ehomeud 建立於: 2015/4/15 13:20 */public class WriteThread implements Runnable { private PrintWriter pw; private BufferedReader br; public WriteThread(PrintWriter pw, BufferedReader br) { this.pw = pw; this.br = br; } @Override public void run() { try { while (true) { pw.println(br.readLine()); pw.flush(); } } catch (IOException e) { e.printStackTrace(); } }}3. [代碼]服務端ServerSocket
package com.hrd.test.socket; import java.io.*;import java.net.ServerSocket;import java.net.Socket;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors; /** * 作者: ehomeud 建立於: 2015/4/15 10:00 */public class Server { public static int PORT = 9999; public static void main(String[] args) { ServerSocket s = null; Socket socket = null; BufferedReader br = null; PrintWriter pw = null; BufferedReader console=null; ExecutorService pool = Executors.newFixedThreadPool(2); try { //設定服務端通訊連接埠 s = new ServerSocket(PORT); System.out.println("ServerSocket Start:"+s); //等待請求,該方法會阻塞,直到獲得請求 socket = s.accept(); System.out.println("Connection accept socket:"+socket); //用於接收用戶端發來的請求 br = new BufferedReader(new InputStreamReader(socket.getInputStream())); //用於發送返回資訊,發送資料要調用.flush()方法 pw = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true); console = new BufferedReader(new InputStreamReader(System.in)); pool.submit(new ReadThread(br,"server")); pool.submit(new WriteThread(pw,console)); while(true){ Thread.sleep(10000); } } catch (Exception e) { e.printStackTrace(); }finally{ System.out.println("關閉中....."); try { console.close(); br.close(); pw.close(); socket.close(); s.close(); } catch (Exception e2) { } } }}4. [代碼]用戶端Socket
package com.hrd.test.socket; import java.io.*;import java.net.Socket;import java.util.concurrent.Executor;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors; /** * 作者: ehomeud 建立於: 2015/4/15 10:10 */public class Client { public static void main(String[] args) { Socket socket = null; BufferedReader br = null; PrintWriter pw = null; ExecutorService pool = Executors.newFixedThreadPool(2); try { //用戶端socket指定伺服器的地址和連接埠號碼 socket = new Socket("127.0.0.1", Server.PORT); System.out.println("Socket:" + socket+"用戶端啟動中..."); //同伺服器原理一樣 br = new BufferedReader(new InputStreamReader( socket.getInputStream())); pw = new PrintWriter(new BufferedWriter(new OutputStreamWriter( socket.getOutputStream()))); BufferedReader console = new BufferedReader(new InputStreamReader(System.in)); //提交讀 pool.submit(new WriteThread(pw,console)); pool.submit(new ReadThread(br,"client")); while (true){ Thread.sleep(100000); } } catch (Exception e) { e.printStackTrace(); } finally { try { System.out.println("關閉中......"); br.close(); pw.close(); socket.close(); } catch (IOException e) { e.printStackTrace(); } } } }
java socket編程基礎