實現Java Socket 客戶端服務端交互實例


SocketService.java

package socket;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class SocketService {
    //搭建服務器端
    public static void main(String[] args) throws IOException{
        SocketService socketService = new SocketService();
        //1、a)創建一個服務器端Socket,即SocketService 
        socketService.oneServer();
    }
    public  void oneServer(){
        try{
            ServerSocket server=null;
            try{
                server=new ServerSocket(5209);
                //b)指定綁定的端口,並監聽此端口。
                System.out.println("服務器啟動成功");
                //創建一個ServerSocket在端口5209監聽客戶請求
            }catch(Exception e) {
                    System.out.println("沒有啟動監聽:"+e);
                    //出錯,打印出錯信息
            }
            Socket socket=null;
            try{
                socket=server.accept();
                //2、調用accept()方法開始監聽,等待客戶端的連接 
                //使用accept()阻塞等待客戶請求,有客戶
                //請求到來則產生一個Socket對象,並繼續執行
            }catch(Exception e) {
                System.out.println("Error."+e);
                //出錯,打印出錯信息
            }
            //3、獲取輸入流,並讀取客戶端信息 
            String line;
            BufferedReader in=new BufferedReader(new InputStreamReader(socket.getInputStream()));
            //由Socket對象得到輸入流,並構造相應的BufferedReader對象
            PrintWriter writer=new PrintWriter(socket.getOutputStream());
            //由Socket對象得到輸出流,並構造PrintWriter對象
            BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
            //由系統標准輸入設備構造BufferedReader對象
            System.out.println("Client:"+in.readLine());
            //在標准輸出上打印從客戶端讀入的字符串
            line=in.readLine();
//            line=br.readLine();
            //從標准輸入讀入一字符串
            //4、獲取輸出流,響應客戶端的請求 
            while(!line.equals("end")){
            //如果該字符串為 "bye",則停止循環
  //              writer.println(line);
                //向客戶端輸出該字符串
 //               writer.flush();
                //刷新輸出流,使Client馬上收到該字符串
 //               System.out.println("Server:"+line);
                //在系統標准輸出上打印讀入的字符串
                System.out.println("Client:"+in.readLine());
                //從Client讀入一字符串,並打印到標准輸出上
    //            line=br.readLine();
                //從系統標准輸入讀入一字符串
            } //繼續循環

            //5、關閉資源 
            writer.close(); //關閉Socket輸出流
            in.close(); //關閉Socket輸入流
            socket.close(); //關閉Socket
            server.close(); //關閉ServerSocket
        }catch(Exception e) {//出錯,打印出錯信息
            System.out.println("Error."+e);
        }
    }
}

SocketClient.java

package socket;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;
import java.net.URL;

public class SocketClient {
    // 搭建客戶端
    public static void main(String[] args) throws IOException {
        try {
            // 1、創建客戶端Socket,指定服務器地址和端口
            // Socket socket=new Socket("127.0.0.1",5200);
            Socket socket = new Socket("127.0.0.1", 5209);
            System.out.println("客戶端啟動成功");
            // 2、獲取輸出流,向服務器端發送信息
            // 向本機的52000端口發出客戶請求
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            // 由系統標准輸入設備構造BufferedReader對象
            PrintWriter write = new PrintWriter(socket.getOutputStream());
            // 由Socket對象得到輸出流,並構造PrintWriter對象
            //3、獲取輸入流,並讀取服務器端的響應信息 
    //        BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            // 由Socket對象得到輸入流,並構造相應的BufferedReader對象
            String readline;
            readline = br.readLine(); // 從系統標准輸入讀入一字符串
            while (!readline.equals("end")) {
                // 若從標准輸入讀入的字符串為 "end"則停止循環
                write.println(readline);
                // 將從系統標准輸入讀入的字符串輸出到Server
                write.flush();
                // 刷新輸出流,使Server馬上收到該字符串
                System.out.println("Client:" + readline);
                // 在系統標准輸出上打印讀入的字符串
  //              System.out.println("Server:" + in.readLine());
                // 從Server讀入一字符串,並打印到標准輸出上
                readline = br.readLine(); // 從系統標准輸入讀入一字符串
            } // 繼續循環
            //4、關閉資源 
            write.close(); // 關閉Socket輸出流
  //          in.close(); // 關閉Socket輸入流
            socket.close(); // 關閉Socket
        } catch (Exception e) {
            System.out.println("can not listen to:" + e);// 出錯,打印出錯信息
        }
    }

}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM