31.JAVA編程之網(wǎng)絡(luò)編程TCP協(xié)議

tcp是一個(gè)可靠的協(xié)議,面向連接的協(xié)議,實(shí)現(xiàn)tcp程序,需要編寫服務(wù)器端和客戶端
ServerSocket:此類實(shí)現(xiàn)服務(wù)器套接字
Socket:此類實(shí)現(xiàn)客戶端套接字(也可以就叫套接字)
Socket是網(wǎng)絡(luò)驅(qū)動(dòng)層提供給應(yīng)用程序編程的接口和一種機(jī)制

單服務(wù)器和單用戶端通信

示例程序:
服務(wù)器端代碼:

//服務(wù)器端:先讀再寫
public class EchoServerDemo {
    public static void main(String[] args) {
        //step1:創(chuàng)建一個(gè)服務(wù)器端的Socket(91024-65535)
        try {
            ServerSocket server = new ServerSocket(6666);
            System.out.println("服務(wù)器已啟動(dòng),正在等待客戶端連接");
            //step2:等待客戶端連接,造成阻塞,如果沒(méi)有客戶端連進(jìn)來(lái)就一直等待
            //如果有客戶端連接成功,立即返回一個(gè)Socket對(duì)象
            Socket socket = server.accept();
            System.out.println("客戶端連接成功"+server.getInetAddress().getHostAddress());
            BufferedReader br = new BufferedReader(
                    new InputStreamReader(socket.getInputStream()));
            //step3:通過(guò)輸入流讀取網(wǎng)絡(luò)數(shù)據(jù),如果沒(méi)有數(shù)據(jù),會(huì)造成阻塞
            String info = br.readLine();
            System.out.println(info);
            //step4:獲取輸出流,向客戶端返回消息
            PrintStream ps = new PrintStream(
                    new BufferedOutputStream(socket.getOutputStream()));
            ps.println("echo:"+info);
            ps.flush();
            //step5:關(guān)閉
            ps.close();
            br.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}

客戶端代碼:

public class EchoClientDemo {
    public static void main(String[] args) {
        //step1:創(chuàng)建一個(gè)Socket對(duì)象
        try {
            Socket socket = new Socket("localhost",6666);
            //step2:獲取socket的輸入輸出流
            PrintStream ps = new PrintStream(
                    new BufferedOutputStream(socket.getOutputStream())
            );

            BufferedReader br = new BufferedReader(
                    new InputStreamReader(socket.getInputStream())
            );
            ps.println("hello");
            ps.flush();

            //讀取服務(wù)器端返回的數(shù)據(jù)
            String info = br.readLine();
            System.out.println(info);
            ps.close();
            br.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

運(yùn)行效果:

先運(yùn)行服務(wù)器端:

在運(yùn)行客戶端:

此時(shí)服務(wù)器端:

單服務(wù)器和多客戶端通信

需要加入多線程的處理機(jī)制

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容