標籤:構造方法 初步 out 字元流 extend pack stream void ann
初步,還要改進
伺服器
package six.four.five.server;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;import java.io.OutputStreamWriter;import java.net.InetSocketAddress;import java.net.ServerSocket;import java.net.Socket;import java.net.SocketAddress;import java.util.ArrayList;import java.util.List;//:這是一個伺服器public class Sever { public static void main(String[] args) { //:接受來自用戶端的輸出資料流,並讀取其中的資訊 List<BufferedWriter> list = new ArrayList<BufferedWriter>(); try { //實現伺服器通訊端。伺服器通訊端等待請求通過網路傳入。它基於該請求執行某些操作,然後可能向要求者返回結果。 ServerSocket server = new ServerSocket(8888); System.out.println("伺服器已啟動"); while(true) { //此類實現用戶端通訊端(也可以就叫“通訊端”)。通訊端是兩台機器間通訊的端點。 Socket socket = server.accept(); System.out.println("Client has been linked!"); //返回此通訊端的輸入資料流,也就是用戶端的輸入資料流,交給線程並讀取其中的資料到 //InputStream is = socket.getInputStream(); //將位元組流轉換為字元流 InputStreamReader ir = new InputStreamReader(socket.getInputStream()); //建立緩衝流 BufferedReader br = new BufferedReader(ir); //返回此通訊端的輸出資料流,同理是用戶端的輸出資料流,交給集合list,要發給每個用戶端 OutputStream os = socket.getOutputStream(); //將字元流轉換為位元組流 OutputStreamWriter ow = new OutputStreamWriter(os); //建立緩衝流 BufferedWriter bw = new BufferedWriter(ow); //添加輸出資料流 list.add(bw); //將輸入資料流和集合傳到線程中,並執行線程 new MyThread(br, list).start(); } } catch (IOException e) { e.printStackTrace(); } }}
伺服器的線程
package six.four.five.server;//:不停的接受用戶端發來的訊息import java.io.BufferedInputStream;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;import java.io.OutputStreamWriter;import java.util.List;public class MyThread extends Thread{ //接受輸出資料流的集合 private List<BufferedWriter> ow; //緩衝流 private BufferedReader br; //線程的構造方法 public MyThread(BufferedReader br, List<BufferedWriter> ow) { this.ow = ow; //this.is = new InputStreamReader(is); this.br = br; } @Override public void run() { String msg = null; while(true) { try { while(null != (msg = br.readLine())) { //輸出字串 System.out.println(msg); } for(BufferedWriter lo : ow) { //將接受到用戶端的資訊寫到流中,以便發給每個用戶端 lo.write(msg); lo.flush(); } } catch (IOException e) { e.printStackTrace(); } } }}
用戶端
package six.four.five.clients;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;import java.io.OutputStreamWriter;import java.net.InetAddress;import java.net.Socket;import java.net.UnknownHostException;import java.util.Scanner;public class Clients { public static void main(String[] args) { try { Socket socket = new Socket(InetAddress.getByName("192.168.0.124"), 8888); System.out.println("You has benn linked Sever!"); // InputStream is = socket.getInputStream(); InputStreamReader ir = new InputStreamReader(is); BufferedReader br = new BufferedReader(ir); // OutputStream os = socket.getOutputStream(); OutputStreamWriter ow = new OutputStreamWriter(os); BufferedWriter bw = new BufferedWriter(ow); // Scanner input = new Scanner(System.in); System.out.println("What your name?"); String name = input.nextLine(); System.out.print("Now,you can say anything:"); String msg = ""; new MyThread(br).start(); while(!(msg.equals("bye"))) { //b = msg.getBytes(); msg = name + ": " + input.nextLine(); bw.write(msg); bw.flush(); } } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }}
用戶端的線程
package six.four.five.clients;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;public class MyThread extends Thread{ private BufferedReader br; public MyThread(BufferedReader br) { this.br = br; } @Override public void run() { String msg = null; while(true) { try { while(null != (msg = br.readLine())) { System.out.println(msg); } } catch (IOException e) { e.printStackTrace(); } } }}
TCP協議下java通訊