簡單的java socket 示例


簡單的java socket 示例:

一、搭建服務器端

a)、創建ServerSocket對象綁定監聽端口。

b)、通過accept()方法監聽客戶端的請求。

c)、建立連接后,通過輸入輸出流讀取客戶端發送的請求信息。

d)、通過輸出流向客戶端發送請求信息。

e)、關閉相關資源。

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=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);
        }
    }
}

二、搭建客戶器端

a)、創建Socket對象,指明需要連接的服務器的地址和端口。

b)、建立連接后,通過輸出流向服務器發送請求信息。

c)、通過輸入流獲取服務器的響應信息。

d)、關閉響應資源

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("192.168.1.115", 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