java socket 編程

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.Socket;

public class EchoThread implements Runnable {
    private Socket client = null;

    public EchoThread(Socket client) {
        this.client = client;
    }

    public void run() {
        PrintStream out = null; // 打印流輸出最方便
        BufferedReader bufferedReader = null;// 接收輸入流
        try {
            out = new PrintStream(client.getOutputStream());// 輸出流
            // 準備接收客戶端的輸入信息
            bufferedReader = new BufferedReader(new InputStreamReader(client.getInputStream()));
            boolean flag = true ; // 標誌位,表示可以一直接收並回應信息
            while (flag) {
                String acceptContent = bufferedReader.readLine();// 接收客戶端發送的內容
                if ("quit".equals(acceptContent)|| (acceptContent == null)) {//如果輸入quit就退出
                    flag = false;
                } else if ("".equals(acceptContent.trim())) {//沒有內容
                    out.println("Echo : 請輸入內容 ");
                } else {
                    System.out.println(acceptContent);
                    out.println("Echo : " + acceptContent);//迴應信息
                }
            }
            bufferedReader.close();
            out.close();
            client.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

 

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;

public class EchoThreadServer {
    public void startSocket() {
        ServerSocket server = null; // 定義ServerSocket類
        Socket client = null; // 表示客 戶端
        try {
            server = new ServerSocket(8888); // 服務器在8888端口上監聽
            boolean flag = true; // 定義個標記位
            while (flag) {
                System.out.println("服務器運行,等待客戶端連接。");
                client = server.accept(); // 得到連接,程序進入到阻塞狀態
                // 1.
                // new Thread(new EchoThread(client)).start(); // 每一個客戶端表示一個線程
                //2.
                Executor executor = Executors.newSingleThreadExecutor();
                executor.execute(new EchoThread(client));
            }
            server.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        EchoThreadServer echoThreadServer = new EchoThreadServer();
        echoThreadServer.startSocket();
    }
}
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.Socket;
import java.net.UnknownHostException;

public class EchoClient {

    public static void main(String[] args) {
        Socket client = null;// 客戶端
        BufferedReader input = null;// 接收鍵盤數據
        BufferedReader buf = null;// 一次接收服務器數據
        PrintStream out = null;// 發送數據
        Boolean flag = true;//標識
        try {
            client = new Socket("localhost", 8888);
            input = new BufferedReader(new InputStreamReader(System.in));// 鍵盤數據
            buf = new BufferedReader(new InputStreamReader(client.getInputStream()));// 服務器響應數據
            out = new PrintStream(client.getOutputStream());// 發送數據
            while (flag) {
                System.out.println("輸入信息 : ");
                String str = input.readLine();// 接收鍵盤輸入信息
                out.println(str);//發送數據
                if ("quit".equals(str)) {//如果輸入quit就退出
                    flag = false;
                } else {
                    System.out.println(buf.readLine());//接收返回結果,輸出結果信息
                }
                out.flush();
            }
        } catch (UnknownHostException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {//釋放資源
            try {
                out.close();
                buf.close();
                input.close();
                client.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章