国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

網(wǎng)絡(luò)編程3——TCP Socket實(shí)現(xiàn)的客戶端服務(wù)器通信完整代碼(詳細(xì)注釋幫你快速理解)

這篇具有很好參考價值的文章主要介紹了網(wǎng)絡(luò)編程3——TCP Socket實(shí)現(xiàn)的客戶端服務(wù)器通信完整代碼(詳細(xì)注釋幫你快速理解)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。


前言

本人是一個剛剛上路的IT新兵,菜鳥!分享一點(diǎn)自己的見解,如果有錯誤的地方歡迎各位大佬蒞臨指導(dǎo),如果這篇文章可以幫助到你,勞請大家點(diǎn)贊轉(zhuǎn)發(fā)支持一下!

今天分享的內(nèi)容是TCP流套接字實(shí)現(xiàn)的客戶端與服務(wù)器的通信,一定要理解 DatagramSocket,DatagramPacket 這兩個類的作用以及方法,十分有助于你理解服務(wù)器,客戶端代碼。


一、理論準(zhǔn)備

Socket套接字是什么

Socket套接字,是由系統(tǒng)提供用于網(wǎng)絡(luò)通信的技術(shù),是基于TCP/IP協(xié)議的網(wǎng)絡(luò)通信的基本操作單元。基于Socket套接字的網(wǎng)絡(luò)程序開發(fā)就是網(wǎng)絡(luò)編程。

程序猿?????編寫網(wǎng)絡(luò)程序,主要編寫的是 應(yīng)用層的程序代碼 ,但是真正想要發(fā)送或接收數(shù)據(jù),都是要 通過應(yīng)用層調(diào)用傳輸層 。

因此傳輸層就為應(yīng)用層(為我們編寫代碼)提供了一組api統(tǒng)稱為
Socket api
。

簡單來說,這一組api是提供給咱們 編寫網(wǎng)絡(luò)程序使用的接口 用來發(fā)送 / 接收網(wǎng)絡(luò)數(shù)據(jù)使用的接口 。

Socket套接字主要針對傳輸層協(xié)議劃分為如下三類:
1?? 數(shù)據(jù)報套接字:使用傳輸層UDP協(xié)議 (本文重點(diǎn)講解)
2?? 流套接字:使用傳輸層TCP協(xié)議 (下篇文章重點(diǎn)講解)
3??原始套接字(不做介紹)


TCP協(xié)議的特點(diǎn)

特點(diǎn) 說明
有連接 刻意保存對端的相關(guān)信息
可靠傳輸 盡全力將數(shù)據(jù)傳輸過去不是百分百成功,自己會知道數(shù)據(jù)傳輸是否成功
面向字節(jié)流 以一個字節(jié)為基本單位(一個數(shù)據(jù)可以分成幾份 多次發(fā)多次收)
有接收緩沖區(qū),也有發(fā)送緩沖區(qū) 后續(xù)文章介紹
大小不受限 對于要傳輸?shù)臄?shù)據(jù)大小沒有要求
全雙工 一條通信路徑,雙向通信。(可以同時發(fā)送和接收數(shù)據(jù))

二、TCP 流套接字提供的API

ServerSocket API

ServerSocket 創(chuàng)建TCP服務(wù)端Socket的API 。

Server Socket對象可以理解為一個管家,每當(dāng)有客戶端想要連接服務(wù)器時,他就會為每個連接進(jìn)來的服務(wù)器提供一個專門伺候他的Socket對象(保姆)

ServerSocket構(gòu)造方法 方法說明
ServerSocket(int port) 創(chuàng)建一個服務(wù)端 流套接字Socket,并綁定到指定端口
ServerSocket方法 方法說明
Socket accept() 開始監(jiān)聽指定端口(創(chuàng)建時綁定的端口),有客戶端連接后,返回一個服務(wù)端Socket對象,并基于該Socket建立與客戶端的連接,否則阻塞等待
void close() 關(guān)閉此套接字

Socket API

Socket是客戶端的Socket,或服務(wù)端中接收到客戶端建立連接的請求后,accept方法 返回的服務(wù)端Socket。 是 創(chuàng)建TCP服務(wù)端Socket的API。

Socket對象就是ServerSocket API這個管家分配給每個服務(wù)器的保姆

Socket 構(gòu)造方法 方法說明
Socket(String host, int port) 創(chuàng)建一個客戶端流套接字Socket,并與對應(yīng)IP的主機(jī)上,對應(yīng)端口的進(jìn)程建立連接
Socket 方法 方法說明
InetAddress getInetAddress() 返回套接字所連接的地址
InputStream getInputStream() 返回此套接字的輸入流,可以直接使用這個輸入流讀取對端發(fā)送的數(shù)據(jù)
OutputStream getOutputStream() 返回此套接字的輸出流,可以直接使用這個輸出流向?qū)Χ税l(fā)送數(shù)據(jù)

三、代碼實(shí)現(xiàn)請求響應(yīng)式 客戶端服務(wù)器

服務(wù)器

TCP 流套接字是字節(jié)流讀取,因此要給每個數(shù)據(jù)規(guī)定一個結(jié)束標(biāo)志,即我們要自定義一個協(xié)議,下面就以換行為結(jié)束標(biāo)志當(dāng)作協(xié)議

服務(wù)器大致就分為三個功能。
1?? 讀取解析客戶端發(fā)來的請求
2?? 根據(jù)請求計(jì)算影響
3?? 把響應(yīng)結(jié)果寫回客戶端

下面代碼中一步一步實(shí)現(xiàn)了這三個功能,并配有詳細(xì)的注釋幫你快速理解

核心思路:
1??服務(wù)器的核心成員屬性 ServerSocket serverSocket (管家且只有一個)
2??構(gòu)造方法要給serverSocket指定端口號便于客戶端連接,
每有一個客戶端連接服務(wù)器,serverSocket就會通過accept方法專門指定一個Socket clientSocket(保姆),并生成一個獨(dú)立線程來服務(wù)這個客戶端。
3??processConnection 方法(服務(wù)器處理客戶端的主邏輯的方法),里面負(fù)責(zé)讀取客戶端的請求,然后調(diào)用process方法(根據(jù)請求計(jì)算響應(yīng)的主邏輯),計(jì)算出響應(yīng)后再返回給客戶端。

processConnection 方法通過clientSocket的getInputStream(),getOutputStream()這兩個方法得到能與對端直接通信的輸入輸出流,實(shí)現(xiàn)發(fā)送與讀取功能。

// 服務(wù)器
public class TcpEchoServer {
    // serverSocket 就是管家
    // clientSocket 就是伺候每個客戶端的保姆
    // serverSocket 只有一個. clientSocket 會給每個客戶端都分配一個~
    private ServerSocket serverSocket = null;

    // 指定一個端口號綁定,便于客戶端連接
    public TcpEchoServer(int port) throws IOException {
        this.serverSocket = new ServerSocket(port);
    }

    public void start() throws IOException {
        System.out.println("服務(wù)器啟動");
        while (true) {
            // 如果沒有客戶端連接,accept方法會阻塞等待
            Socket clientSocket = serverSocket.accept();

            // 如果直接調(diào)用 processConnection(clientSocket)方法
            // 那么此時就會進(jìn)入該方法,無法及時處理其他連接進(jìn)來的客戶端的請求
            // 解決方案:創(chuàng)建新的線程, 用新線程來調(diào)用 processConnection
            // 每次來一個新的客戶端都搞一個新的線程即可!!

            // 方法1. 每次都手動創(chuàng)建新線程
            /*
            Thread t = new Thread(() -> {
                try {
                    processConnection(clientSocket);
                } catch (IOException e) {
                    e.printStackTrace();
                }
            });
            t.start();*/

            // 方法2. 創(chuàng)建線程池來解決
            ExecutorService executorService = Executors.newCachedThreadPool();
            executorService.submit(new Runnable() {
                @Override
                public void run() {
                    try {
                        processConnection(clientSocket);
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            });
        }
    }

    // 服務(wù)器處理客戶端請求的主邏輯
    private void processConnection(Socket clientSocket) throws IOException {
        // 因?yàn)閷Χ耸峭ㄟ^字節(jié)流來發(fā)送的數(shù)據(jù),因此如果對方發(fā)送多條數(shù)據(jù),就無法區(qū)分?jǐn)?shù)據(jù)
        // 所以要雙方約定好,數(shù)據(jù)的結(jié)束標(biāo)記,遇到結(jié)束標(biāo)記就代表收到了一個完整的數(shù)據(jù)
        // 此次客戶端服務(wù)器使用的結(jié)束標(biāo)記為換行 \n
        System.out.printf("[%s,%d 客戶端上線!\n]",clientSocket.getInetAddress().toString(),clientSocket.getPort());
        // try () 這種寫法, ( ) 中允許寫多個流對象,
        // 并且會在try結(jié)束后,自動調(diào)用對應(yīng)流的close方法
        // 使用 ; 來分割
        try (InputStream inputStream = clientSocket.getInputStream();
             OutputStream outputStream = clientSocket.getOutputStream()){
            Scanner scanner = new Scanner(inputStream);// 讀
            PrintWriter printWriter = new PrintWriter(outputStream);// 寫
            // 沒有這個 scanner 和 printWriter, 完全可以!! 但是代價就是得一個字節(jié)一個字節(jié)扣, 找到哪個是請求的結(jié)束標(biāo)記 \n
            // 不是不能做, 而是代碼比較麻煩.
            // 為了簡單, 把字節(jié)流包裝成了更方便的字符流~~

            while (true) {
                // 如果對端關(guān)閉連接,hasNext就會返回false
                // 如果對端有數(shù)據(jù),hasNext就會返回true
                if (!scanner.hasNext()) {
                    // 讀取的流到了結(jié)尾了 (對端關(guān)閉了)
                    System.out.printf("[%s:%d] 客戶端下線!\n", clientSocket.getInetAddress().toString(),
                            clientSocket.getPort());
                    break;
                }

                // 1. 讀取請求
                // 直接使用 scanner 讀取一段字符串.
                // next遇到換行自動停止讀取
                String request = scanner.next();
                // 2. 根據(jù)請求計(jì)算響應(yīng)
                String response = process(request);
                // 3. 把響應(yīng)寫回給客戶端. 不要忘了, 響應(yīng)里也是要帶上換行 \n
                printWriter.println(response);// 該方法會在放送的同時添加換行添加了換行 \n
                //手動刷新緩沖區(qū)
                printWriter.flush();
                System.out.printf("[%s:%d] req: %s; resp: %s\n", clientSocket.getInetAddress().toString(),
                        clientSocket.getPort(), request, response);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            clientSocket.close();
        }
    }

    // 根據(jù)請求計(jì)算響應(yīng)的邏輯
    private String process(String request) {
        return request;
    }

    public static void main(String[] args) throws IOException {
        // 實(shí)例化服務(wù)器對象
        TcpEchoServer tcpEchoServer = new TcpEchoServer(9090);
        // 啟動主邏輯
        tcpEchoServer.start();
    }
}

客戶端

客戶端大致就分為三個功能。
1?? 讀取用戶輸入的請求
2?? 將請求發(fā)送至服務(wù)器
3?? 讀取服務(wù)器的響應(yīng)
4?? 將響應(yīng)轉(zhuǎn)換為字符串并打印

下面代碼中一步一步實(shí)現(xiàn)了這四個功能,并配有詳細(xì)的注釋幫你快速理解

核心思路:
1??服務(wù)器的核心成員屬性 Socket socket (保姆)
2??構(gòu)造方法要給socket指定IP地址與端口號與服務(wù)器進(jìn)行連接。
3??start方法(客戶端主邏輯),用來向服務(wù)器發(fā)送請求與讀取服務(wù)器的響應(yīng)

start方法通過socket的getInputStream(),getOutputStream()這兩個方法得到能與對端直接通信的輸入輸出流,實(shí)現(xiàn)發(fā)送與讀取功能。

// 客戶端
public class TcpEchoClient {
    private Socket socket = null;

    public TcpEchoClient(String serverIp,int port) throws IOException {
        // 這個操作相當(dāng)于讓客戶端和服務(wù)器建立 tcp 連接.
        // 這里的連接連上了, 服務(wù)器的 accept 就會返回.
        this.socket = new Socket(serverIp,port);
    }

    public void start() {
        Scanner scanner = new Scanner(System.in);
         try (InputStream inputStream = socket.getInputStream();
              OutputStream outputStream = socket.getOutputStream();
              Scanner scannerFromSocket = new Scanner(inputStream);
              PrintWriter printWriter = new PrintWriter(outputStream)){

             while (true) {
                 // 1. 從鍵盤上讀取用戶輸入的內(nèi)容.
                 System.out.print("-> ");
                 String request = scanner.next();
                 // 2. 把讀取的內(nèi)容構(gòu)造成請求, 發(fā)送給服務(wù)器.
                 //    注意, 這里的發(fā)送, 是帶有換行的!!
                 printWriter.println(request);
                 printWriter.flush();// 手動刷新緩沖區(qū)
                 // 3. 從服務(wù)器讀取響應(yīng)內(nèi)容
                 String response = scannerFromSocket.next();
                 // 4. 把響應(yīng)結(jié)果顯示到控制臺上.
                 System.out.printf("req: %s; resp: %s\n", request, response);
             }
         } catch (IOException e) {
             e.printStackTrace();
         }
    }

    public static void main(String[] args) throws IOException {
        // 實(shí)例化客戶端對象
        TcpEchoClient tcpEchoClient = new TcpEchoClient("127.0.0.1", 9090);
        // 啟動客戶端主邏輯
        tcpEchoClient.start();
    }
}

通信結(jié)果:

網(wǎng)絡(luò)服務(wù)器代碼,JavaEE,網(wǎng)絡(luò),tcp/ip,服務(wù)器,java,java-ee,網(wǎng)絡(luò)協(xié)議

網(wǎng)絡(luò)服務(wù)器代碼,JavaEE,網(wǎng)絡(luò),tcp/ip,服務(wù)器,java,java-ee,網(wǎng)絡(luò)協(xié)議

網(wǎng)絡(luò)服務(wù)器代碼,JavaEE,網(wǎng)絡(luò),tcp/ip,服務(wù)器,java,java-ee,網(wǎng)絡(luò)協(xié)議


如何同時多次運(yùn)行同一個代碼網(wǎng)絡(luò)服務(wù)器代碼,JavaEE,網(wǎng)絡(luò),tcp/ip,服務(wù)器,java,java-ee,網(wǎng)絡(luò)協(xié)議
網(wǎng)絡(luò)服務(wù)器代碼,JavaEE,網(wǎng)絡(luò),tcp/ip,服務(wù)器,java,java-ee,網(wǎng)絡(luò)協(xié)議
選中第一個即可。


疑惑解答

為什么服務(wù)器進(jìn)程需要手動指定端口號而客戶端進(jìn)程不需要

服務(wù)器的功能是用來處理其他客戶端發(fā)來的請求,因此需要為客戶端提供自己的端口號,方便客戶端進(jìn)行訪問。

雖然服務(wù)器要給客戶端一個響應(yīng),但是客戶端的IP地址與端口號都可以在客戶端發(fā)來請求的數(shù)據(jù)報中獲得,因此客戶端不需要手動指定端口號


為什么客戶端中的服務(wù)器IP與端口號是"127.0.0.1" 與 9090

127.0.0.1 是主機(jī)環(huán)回地址。主機(jī)環(huán)回是指地址為 127.0.0.1 的任何數(shù)據(jù)包都不應(yīng)該離開計(jì)算機(jī)(主機(jī)),發(fā)送它——而不是被發(fā)送到本地網(wǎng)絡(luò)或互聯(lián)網(wǎng),它只是被自己“環(huán)回”,并且發(fā)送數(shù)據(jù)包的計(jì)算機(jī)成為接收者。

端口號是9090是因?yàn)槭请S意指定的,當(dāng)然也有一些特殊端口號被指定分配給了一些牛逼的程序。


為什么服務(wù)器Socket對象要關(guān)閉,ServerSocket對象卻不用,客戶端的Socket對象也不用關(guān)閉

Socket對象與ServerSocket對象都會產(chǎn)生文件描述符,如果如果文件描述符表滿了會產(chǎn)生文件資源泄露的嚴(yán)重bug,那么為什么有的調(diào)用,有的沒有調(diào)用close方法???

服務(wù)器的Socket對象為什么要關(guān)閉?
因?yàn)槊坑幸粋€客戶端連接服務(wù)器,服務(wù)器當(dāng)中的就會產(chǎn)生一個Socket對象(保姆),如果有n個客戶端連接服務(wù)器,那么服務(wù)器就很有可能會產(chǎn)生文件資源泄露,因此服務(wù)器的Socket對象在完成業(yè)務(wù)后,要調(diào)用close方法

服務(wù)器的ServerSocket對象為什么不用關(guān)閉?
服務(wù)器就只有唯一一個ServerSocket對象(管家),他會伴隨服務(wù)器整個生命周期,調(diào)用close的時候,也就是服務(wù)器這個進(jìn)程結(jié)束的時候,因此沒必要調(diào)用,進(jìn)程結(jié)束時會自動將文件關(guān)閉。

每個客戶端都只有唯一一個Socket對象,他也會伴隨整個客戶端的生命周期,調(diào)用close的時候,也就是客戶端這個進(jìn)程結(jié)束的時候,因此沒必要調(diào)用。


緩沖區(qū)是什么?為什么要手動刷新緩沖區(qū)???

讀寫硬盤,讀寫網(wǎng)卡都視為IO操作

網(wǎng)卡的IO操作很慢,為了提高效率就引入了緩沖區(qū)。

假如要往網(wǎng)卡中寫入10次,那么就先把這些數(shù)據(jù)都寫進(jìn)緩沖區(qū),等緩沖區(qū)滿了,就集中寫入網(wǎng)卡1次,這樣就盡量減少了IO的操作次數(shù),就提高了效率。

因此只有緩沖區(qū)滿了,才會真正寫入網(wǎng)卡。
因此代碼中要手動刷新緩沖區(qū),才能保證無論數(shù)據(jù)大小都可以及時發(fā)送。


總結(jié)

以上就是今天要分享的內(nèi)容,本文介紹了Socket套接字,以及使用TCP協(xié)議的特點(diǎn)以及TCP流套接字實(shí)現(xiàn)的客戶端與服務(wù)器的通信。網(wǎng)絡(luò)編程讓我愈發(fā)感覺到了編程的魅力,也讓我領(lǐng)略到了科技的神奇。各位加油!

路漫漫不止修身,也養(yǎng)性。文章來源地址http://www.zghlxwxcb.cn/news/detail-660981.html

到了這里,關(guān)于網(wǎng)絡(luò)編程3——TCP Socket實(shí)現(xiàn)的客戶端服務(wù)器通信完整代碼(詳細(xì)注釋幫你快速理解)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Java【網(wǎng)絡(luò)編程2】使用 TCP 的 Socket API 實(shí)現(xiàn)客戶端服務(wù)器通信(保姆級教學(xué), 附代碼)

    Java【網(wǎng)絡(luò)編程2】使用 TCP 的 Socket API 實(shí)現(xiàn)客戶端服務(wù)器通信(保姆級教學(xué), 附代碼)

    ??各位讀者好, 我是小陳, 這是我的個人主頁 ??小陳還在持續(xù)努力學(xué)習(xí)編程, 努力通過博客輸出所學(xué)知識 ??如果本篇對你有幫助, 煩請點(diǎn)贊關(guān)注支持一波, 感激不盡 ?? 希望我的專欄能夠幫助到你: JavaSE基礎(chǔ): 基礎(chǔ)語法, 類和對象, 封裝繼承多態(tài), 接口, 綜合小練習(xí)圖書管理系統(tǒng)

    2024年02月05日
    瀏覽(32)
  • 網(wǎng)絡(luò)編程——socket服務(wù)端和客戶端(TCP)

    網(wǎng)絡(luò)編程——socket服務(wù)端和客戶端(TCP)

    所謂套接字(Socket),就是對網(wǎng)絡(luò)中不同主機(jī)上的應(yīng)用進(jìn)程之間進(jìn)行雙向通信的端點(diǎn)的抽象。一個套接字就是網(wǎng)絡(luò)上進(jìn)程通信的一端,提供了應(yīng)用層進(jìn)程利用網(wǎng)絡(luò)協(xié)議交換數(shù)據(jù)的機(jī)制。從所處的地位來講,套接字上聯(lián)應(yīng)用進(jìn)程,下聯(lián)網(wǎng)絡(luò)協(xié)議棧,是應(yīng)用程序通過網(wǎng)絡(luò)協(xié)議進(jìn)行通

    2024年02月07日
    瀏覽(152)
  • Linux網(wǎng)絡(luò)編程:socket、客戶端服務(wù)器端使用socket通信(TCP)

    Linux網(wǎng)絡(luò)編程:socket、客戶端服務(wù)器端使用socket通信(TCP)

    socket(套接字),用于網(wǎng)絡(luò)中不同主機(jī)間進(jìn)程的通信。 socket是一個偽文件,包含讀緩沖區(qū)、寫緩沖區(qū)。 socket必須成對出現(xiàn)。 socket可以建立主機(jī)進(jìn)程間的通信,但需要協(xié)議(IPV4、IPV6等)、port端口、IP地址。 ??????? ?(1)創(chuàng)建流式socket套接字。 ? ? ? ? ? ? ? ? a)此s

    2024年02月11日
    瀏覽(33)
  • Linux網(wǎng)絡(luò)編程:Socket服務(wù)器和客戶端實(shí)現(xiàn)雙方通信

    Linux網(wǎng)絡(luò)編程:Socket服務(wù)器和客戶端實(shí)現(xiàn)雙方通信

    目錄 一,什么是網(wǎng)絡(luò)編程 二,為什么使用端口號 三,TCP協(xié)議與UDP協(xié)議 ①TCP(傳輸控制協(xié)議) ②UDP(用戶數(shù)據(jù)報協(xié)議,User Data Protocol) ③總結(jié)歸納 四,Socket服務(wù)器和客戶端的開發(fā)流程 五,服務(wù)器和客戶端相關(guān)API說明 ①socket()函數(shù) ②bind()函數(shù) ③listen()函數(shù) ④accept()函數(shù) ⑤客戶端

    2024年02月11日
    瀏覽(34)
  • 【Java網(wǎng)絡(luò)編程】基于UDP-Socket 實(shí)現(xiàn)客戶端、服務(wù)器通信

    【Java網(wǎng)絡(luò)編程】基于UDP-Socket 實(shí)現(xiàn)客戶端、服務(wù)器通信

    ? 哈嘍,大家好~我是你們的老朋友: 保護(hù)小周??? 本期為大家?guī)淼氖蔷W(wǎng)絡(luò)編程的 UDP Socket 套接字,基于 UDP協(xié)議的 Socket 實(shí)現(xiàn)客戶端服務(wù)器通信 ,Socket 套接字可以理解為是,傳輸層給應(yīng)用層提供的一組 API,如此程序,確定不來看看嘛~~ 本期收錄于博主的專欄 : JavaEE_保

    2024年02月02日
    瀏覽(111)
  • 網(wǎng)絡(luò)編程-Socket通信實(shí)現(xiàn)服務(wù)器與客戶端互傳文件(JAVA語言實(shí)現(xiàn))

    網(wǎng)絡(luò)編程-Socket通信實(shí)現(xiàn)服務(wù)器與客戶端互傳文件(JAVA語言實(shí)現(xiàn))

    在網(wǎng)絡(luò)通信協(xié)議下,實(shí)現(xiàn)網(wǎng)絡(luò)互連的不同計(jì)算機(jī)上運(yùn)行的程序間可以進(jìn)行數(shù)據(jù)交換. 網(wǎng)絡(luò)編程三要素:ip地址、端口、協(xié)議 ip地址: 每臺計(jì)算機(jī)指定的一個標(biāo)識符,127.0.0.1是回送地址,可以代表本機(jī)地址 ,一般用來測試使用 ipconfig:命令行中查看本機(jī)地址 ping ip地址:檢查網(wǎng)絡(luò)是

    2023年04月14日
    瀏覽(30)
  • 【網(wǎng)絡(luò)編程】實(shí)現(xiàn)UDP/TCP客戶端、服務(wù)器

    【網(wǎng)絡(luò)編程】實(shí)現(xiàn)UDP/TCP客戶端、服務(wù)器

    需要云服務(wù)器等云產(chǎn)品來學(xué)習(xí)Linux的同學(xué)可以移步/--騰訊云--/--阿里云--/--華為云--/官網(wǎng),輕量型云服務(wù)器低至112元/年,新用戶首次下單享超低折扣。 ? 目錄 一、UDP 1、Linux客戶端、服務(wù)器 1.1udpServer.hpp 1.2udpServer.cc 1.3udpClient.hpp 1.4udpClient.cc 1.5onlineUser.hpp 2、Windows客戶端 二、T

    2024年02月06日
    瀏覽(18)
  • C#實(shí)現(xiàn)簡單TCP服務(wù)器和客戶端網(wǎng)絡(luò)編程

    C#實(shí)現(xiàn)簡單TCP服務(wù)器和客戶端網(wǎng)絡(luò)編程

    在C#中進(jìn)行網(wǎng)絡(luò)編程涉及許多類和命名空間,用于創(chuàng)建和管理網(wǎng)絡(luò)連接、傳輸數(shù)據(jù)等。下面是一些主要涉及的類和命名空間: System.Net 命名空間: 這個命名空間提供了大部分網(wǎng)絡(luò)編程所需的類,包括: IPAddress :用于表示IP地址。 IPEndPoint :表示IP地址和端口號的組合。 Socke

    2024年02月11日
    瀏覽(37)
  • 【網(wǎng)絡(luò)編程】——基于TCP協(xié)議實(shí)現(xiàn)回顯服務(wù)器及客戶端

    【網(wǎng)絡(luò)編程】——基于TCP協(xié)議實(shí)現(xiàn)回顯服務(wù)器及客戶端

    個人主頁:兜里有顆棉花糖 歡迎 點(diǎn)贊?? 收藏? 留言? 加關(guān)注??本文由 兜里有顆棉花糖 原創(chuàng) 收錄于專欄【網(wǎng)絡(luò)編程】【Java系列】 本專欄旨在分享學(xué)習(xí)網(wǎng)絡(luò)編程的一點(diǎn)學(xué)習(xí)心得,歡迎大家在評論區(qū)交流討論?? TCP提供的API主要有兩個類 Socket ( 既會給服務(wù)器使用也會給客

    2024年02月03日
    瀏覽(44)
  • 多進(jìn)程并發(fā)TCP服務(wù)器模型(含客戶端)(網(wǎng)絡(luò)編程 C語言實(shí)現(xiàn))

    摘要 :大家都知道不同pc間的通信需要用到套接字sockte來實(shí)現(xiàn),但是服務(wù)器一次只能收到一個客戶端發(fā)來的消息,所以為了能讓服務(wù)器可以接收多個客戶端的連接與消息的傳遞,我們就引入了多進(jìn)程并發(fā)這樣一個概念。聽名字就可以知道--需要用到進(jìn)程,當(dāng)然也有多線程并發(fā)

    2024年02月17日
    瀏覽(105)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包