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

網(wǎng)絡(luò)編程套接字之三【TCP】

這篇具有很好參考價(jià)值的文章主要介紹了網(wǎng)絡(luò)編程套接字之三【TCP】。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

目錄

1. ServerSocket API(給服務(wù)器端使用的類)

2. Socket API(既給服務(wù)器使用,也給客戶端使用)

3. 寫(xiě)TCP回顯—服務(wù)器

4. 使用線程池后的TCP服務(wù)器代碼(最終)

5. 寫(xiě)回顯-客戶端

6. TCP回顯—客戶端代碼

7. 運(yùn)行回顯服務(wù)器和客戶端


TCP流套接字編程

1. ServerSocket API(給服務(wù)器端使用的類)

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

?構(gòu)造方法

方法簽名 說(shuō)明
ServerSocket(int port) 創(chuàng)建一個(gè)服務(wù)端流套接字Socket,并綁定到指定端口

方法

方法簽名 說(shuō)明
Socket accept() 開(kāi)始監(jiān)聽(tīng)指定端口(創(chuàng)建時(shí)綁定的端口),有客戶端連接后,返回一個(gè)服務(wù)端Socket對(duì)象,并基于改Socket建立與客戶端的連接,否則阻塞等待(接受客戶端的連接)
void close() 關(guān)閉此套接字

2. Socket API(既給服務(wù)器使用,也給客戶端使用)

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

不管是客戶端還是服務(wù)端Socket,都是雙方建立連接以后,保存的對(duì)端信息,及用來(lái)與對(duì)方收發(fā)數(shù)據(jù)的

構(gòu)造方法

方法簽名 說(shuō)明
Socket(String host, int port)

創(chuàng)建一個(gè)客戶端流套接字Socket,并與對(duì)應(yīng)IP的主機(jī)上,對(duì)應(yīng)端口的

進(jìn)程建立連接(嘗試和指定的服務(wù)器建立連接)

方法

方法簽名 說(shuō)明
InetAddress getInetAddress() 返回套接字所連接的地址(返回套接字獲取到對(duì)方的IP地址和端口)
InputStream getInputStream() 返回此套接字的輸入流(通過(guò)Socket可以獲取到兩個(gè)流對(duì)象,分別用來(lái)讀和寫(xiě))
OutputStream getOutputStream() 返回此套接字的輸出流

3. 寫(xiě)TCP回顯—服務(wù)器

1.先寫(xiě)一個(gè)ServerSocket對(duì)象

    private ServerSocket listenSocket = null;

2.下面寫(xiě)Tcp服務(wù)器構(gòu)造方法

    public TcpEchoServer(int port) throws IOException {
     listenSocket = new ServerSocket(port);
    }

3.寫(xiě)一個(gè)啟動(dòng)服務(wù)器的方法start(),在start中寫(xiě)上while循環(huán)來(lái)執(zhí)行

? ?a)調(diào)用accept來(lái)接收客戶端的連接

? ?b)再處理這個(gè)連接,這里寫(xiě)一個(gè)processConnection()方法來(lái)處理

    public void start() throws IOException {
        System.out.println("服務(wù)器啟動(dòng)!");
        while(true) {
            //1. 先調(diào)用 accept 來(lái)接受客戶端的連接
            Socket clientSocket = listenSocket.accept();
            //2. 再處理這個(gè)連接
            processConnection(clientSocket);
        }
   }

4.下面來(lái)寫(xiě)這個(gè)processConnection()方法,處理連接客戶端連接

? ?方法中寫(xiě)try(這里寫(xiě)上InputStream(讀)和OutPutStream(寫(xiě))對(duì)象,寫(xiě)在try中幫助資源回收) {這里寫(xiě)上寫(xiě)具體處理邏輯步驟}

注意最后必須要寫(xiě)上finally來(lái)close關(guān)閉clientSocket

    private void processConnection(Socket clientSocket) throws IOException {
        System.out.printf("[%s:%d] 客戶端上線!\n",
                clientSocket.getInetAddress().toString(),
                clientSocket.getPort());
        //接下來(lái)處理客戶端請(qǐng)求
        try(InputStream inputStream = clientSocket.getInputStream();
            OutputStream outputStream = clientSocket.getOutputStream()) {
            while(true) {
           
            }
        }finally {
            //這里要關(guān)閉socket,是因?yàn)?            //socket也是一個(gè)文件,一個(gè)進(jìn)程能夠同時(shí)打開(kāi)的文件個(gè)數(shù)有上限(PCB文件描述符表,不是無(wú)限的
            clientSocket.close();
        }
    }

? ?a)讀取請(qǐng)求并解析

                Scanner scanner = new Scanner(inputStream);
                if(!scanner.hasNext()) {
                    //讀完了,連接可以斷開(kāi)了
                    System.out.printf("[%s:%d] 客戶端下線!\n",
                            clientSocket.getInetAddress().toString(),
                            clientSocket.getPort());
                    break;
                }
                String request = scanner.next();

? ?b)根據(jù)請(qǐng)求計(jì)算響應(yīng)(這里寫(xiě)一個(gè)process方法)

                String response = process(request);
    private String process(String request) {
        return request;
    }

?c)響應(yīng)寫(xiě)回到客戶端

                PrintWriter printWriter = new PrintWriter(outputStream);
                printWriter.println(response);
                //刷新緩沖區(qū)確保數(shù)據(jù)確實(shí)通過(guò)網(wǎng)卡發(fā)送出去了
                printWriter.flush();

? ?d)將發(fā)送的信息顯示到服務(wù)器界面上

                System.out.printf("[%s:%d] req: %s; resp: %s\n",
                        clientSocket.getInetAddress().toString(),
                        clientSocket.getPort(),
                        request,response);

5.最后再寫(xiě)上mian方法來(lái)執(zhí)行服務(wù)器

    public static void main(String[] args) throws IOException {
        TcpEchoServer tcpEchoServer = new TcpEchoServer(9090);
        tcpEchoServer.start();
    }
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
import java.util.concurrent.Semaphore;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 28463
 * Date: 2022—10—14
 * Time: 17:05
 */
public class TcpEchoServer {
    //代碼中會(huì)設(shè)計(jì)到多個(gè) socket 對(duì)象,使用不同的名字來(lái)區(qū)分
    private ServerSocket listenSocket = null;

    public TcpEchoServer(int port) throws IOException {
     listenSocket = new ServerSocket(port);
    }

    public void start() throws IOException {
        System.out.println("服務(wù)器啟動(dòng)!");
        while(true) {
            //1. 先調(diào)用 accept 來(lái)接受客戶端的連接
            Socket clientSocket = listenSocket.accept();
            //2. 再處理這個(gè)連接
            processConnection(clientSocket);
        }
    }

    private void processConnection(Socket clientSocket) throws IOException {
        System.out.printf("[%s:%d] 客戶端上線!\n", 
                clientSocket.getInetAddress().toString(),
                clientSocket.getPort());
        
        //接下來(lái)處理客戶端請(qǐng)求
        try(InputStream inputStream = clientSocket.getInputStream();
            OutputStream outputStream = clientSocket.getOutputStream()) {
            while(true) {
                //1.讀取請(qǐng)求并解析
                Scanner scanner = new Scanner(inputStream);
                if(!scanner.hasNext()) {
                    //讀完了,連接可以斷開(kāi)了
                    System.out.printf("[%s:%d] 客戶端下線!\n", 
                            clientSocket.getInetAddress().toString(),
                            clientSocket.getPort());
                    break;
                }
                String request = scanner.next();
                //2.根據(jù)請(qǐng)求計(jì)算響應(yīng)
                String response = process(request);
                //3.響應(yīng)寫(xiě)回到客戶端
                PrintWriter printWriter = new PrintWriter(outputStream);
                printWriter.println(response);
                //刷新緩沖區(qū)確保數(shù)據(jù)確實(shí)通過(guò)網(wǎng)卡發(fā)送出去了
                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();
        }
    }

    private String process(String request) {
        return request;
    }

    public static void main(String[] args) throws IOException {
        TcpEchoServer tcpEchoServer = new TcpEchoServer(9090);
        tcpEchoServer.start();
    }
}

?下面思考為啥代碼最后finally要執(zhí)行clientSocket的close,而前面的listenSocket以及UDP程序中的socekt為啥就沒(méi)close?

mfc創(chuàng)建tcp服務(wù)器線程,JavaEE,java

但是上面的代碼有個(gè)問(wèn)題,只能處理一個(gè)客戶端的請(qǐng)求,(本質(zhì)上第二個(gè)客戶端的消息是發(fā)出去了,但服務(wù)器此時(shí)還在執(zhí)行第一個(gè)客戶端的請(qǐng)求,只要從第一個(gè)客戶端這里出來(lái),服務(wù)器就會(huì)立刻執(zhí)行第二個(gè)客戶端的消息)

我們希望的是既能夠快速重復(fù)的調(diào)用到accept(也就是連接多個(gè)客戶端),又能夠循環(huán)的處理客戶端的請(qǐng)求。所以就需要使用到多線程了

mfc創(chuàng)建tcp服務(wù)器線程,JavaEE,java

那么為什么前面UDP就不需要考慮這個(gè)問(wèn)題,而TCP需要考慮?

UDP是無(wú)連接,客戶端直接發(fā)消息就行(不必專注于處理某一個(gè)客戶端)

TCP建立連接之后,要處理客戶端的多次請(qǐng)求,才導(dǎo)致無(wú)法快速的調(diào)用到accept(長(zhǎng)連接)(主要原因)

如果TCP每個(gè)連接只處理一個(gè)客戶端的請(qǐng)求,也能夠保證快速調(diào)用到accept(短連接)

?下面使用多線程,給每個(gè)客戶端連上來(lái)的都分配一個(gè)新的線程負(fù)責(zé)處理請(qǐng)求

mfc創(chuàng)建tcp服務(wù)器線程,JavaEE,java

?但是直接這樣使用多線程,如果循環(huán)多次,對(duì)應(yīng)就會(huì)創(chuàng)建很多線程,等線程執(zhí)行完,又會(huì)消毀很多的線程,所以更好的方法就是使用線程池

mfc創(chuàng)建tcp服務(wù)器線程,JavaEE,java

4. 使用線程池后的TCP服務(wù)器代碼(最終)

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
import java.util.concurrent.Executor;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Semaphore;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 28463
 * Date: 2022—10—14
 * Time: 17:05
 */
public class TcpEchoServer {
    //代碼中會(huì)設(shè)計(jì)到多個(gè) socket 對(duì)象,使用不同的名字來(lái)區(qū)分
    private ServerSocket listenSocket = null;

    public TcpEchoServer(int port) throws IOException {
     listenSocket = new ServerSocket(port);
    }

    public void start() throws IOException {
        System.out.println("服務(wù)器啟動(dòng)!");
        ExecutorService service = Executors.newCachedThreadPool();
        while(true) {
            //1. 先調(diào)用 accept 來(lái)接受客戶端的連接
            Socket clientSocket = listenSocket.accept();
            //2. 再處理這個(gè)連接,這里應(yīng)該要使用多線程,每個(gè)客戶端連上來(lái)都分配一個(gè)新的線程負(fù)責(zé)處理
            service.submit(new Runnable() {
                @Override
                public void run() {
                    try {
                        processConnection(clientSocket);
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            });
        }
    }

    private void processConnection(Socket clientSocket) throws IOException {
        System.out.printf("[%s:%d] 客戶端上線!\n",
                clientSocket.getInetAddress().toString(),
                clientSocket.getPort());

        //接下來(lái)處理客戶端請(qǐng)求
        try(InputStream inputStream = clientSocket.getInputStream();
            OutputStream outputStream = clientSocket.getOutputStream()) {
            while(true) {
                //1.讀取請(qǐng)求并解析
                Scanner scanner = new Scanner(inputStream);
                if(!scanner.hasNext()) {
                    //讀完了,連接可以斷開(kāi)了
                    System.out.printf("[%s:%d] 客戶端下線!\n",
                            clientSocket.getInetAddress().toString(),
                            clientSocket.getPort());
                    break;
                }
                String request = scanner.next();
                //2.根據(jù)請(qǐng)求計(jì)算響應(yīng)
                String response = process(request);
                //3.響應(yīng)寫(xiě)回到客戶端
                PrintWriter printWriter = new PrintWriter(outputStream);
                printWriter.println(response);
                //刷新緩沖區(qū)確保數(shù)據(jù)確實(shí)通過(guò)網(wǎng)卡發(fā)送出去了
                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 {
            //這里要關(guān)閉socket,是因?yàn)?            //socket也是一個(gè)文件,一個(gè)進(jìn)程能夠同時(shí)打開(kāi)的文件個(gè)數(shù)有上限(PCB文件描述符表,不是無(wú)限的
            clientSocket.close();
        }
    }

    private String process(String request) {
        return request;
    }

    public static void main(String[] args) throws IOException {
        TcpEchoServer tcpEchoServer = new TcpEchoServer(9090);
        tcpEchoServer.start();
    }
}

5. 寫(xiě)回顯-客戶端

?1. 先寫(xiě)一個(gè)Socket對(duì)象,客戶端用Socket來(lái)建立連接

private Socket socket = null;

2.下面寫(xiě)Tcp客戶端構(gòu)造(和Udp區(qū)別較大,有連接和無(wú)連接的區(qū)別)

    public TcpEchoClient(String serverIP, int serverPort) throws IOException {
        //和服務(wù)器建立連接,就需要知道服務(wù)器在哪
        socket = new Socket(serverIP,serverPort);
    }

3.寫(xiě)客戶端執(zhí)行方法start(),給start里面放try,try中執(zhí)行的就是while,來(lái)讓客戶端循環(huán)輸入,還要在try后面括號(hào)中寫(xiě)上InputStream(讀)和OutputStream(寫(xiě))的對(duì)象(寫(xiě)在括號(hào)中中try會(huì)自動(dòng)幫助,關(guān)掉資源)

    public void start() throws IOException {
        Scanner scan = new Scanner(System.in);
        try(InputStream inputStream = socket.getInputStream();
            OutputStream outputStream = socket.getOutputStream()) {
            while(true) {

            }
         }
    }

while中寫(xiě)? a)從控制臺(tái)讀取數(shù)據(jù),構(gòu)造一個(gè)請(qǐng)求

                System.out.println("-> ");
                String request = scan.next();

? ? ? ? ? ? ? ? ?b)發(fā)送請(qǐng)求給服務(wù)器(PrintWriter)

                PrintWriter printWriter = new PrintWriter(outputStream);
                printWriter.println(request);
                //這個(gè) flush 不要忘記,否則可能導(dǎo)致請(qǐng)求沒(méi)有真發(fā)出去
                printWriter.flush();

? ? ? ? ? ? ? ? ?c)從服務(wù)器讀取響應(yīng)

                Scanner respScanner = new Scanner(inputStream);
                String response = respScanner.next();

? ? ? ? ? ? ? ? ?d)把響應(yīng)顯示到界面上

                System.out.println(response);

4.最后再寫(xiě)上mian方法來(lái)執(zhí)行客戶端

    public static void main(String[] args) throws IOException {
        TcpEchoClient tcpEchoClient = new TcpEchoClient("127.0.0.1",9090);
        tcpEchoClient.start();

?Udp和Tcp構(gòu)造的區(qū)別,有連接和無(wú)連接?

mfc創(chuàng)建tcp服務(wù)器線程,JavaEE,java

6. TCP回顯—客戶端代碼

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 28463
 * Date: 2022—10—14
 * Time: 17:06
 */
public class TcpEchoClient {
    //客戶端需要使用這個(gè) Socket 對(duì)象來(lái)建立連接
    private Socket socket = null;

    public TcpEchoClient(String serverIP, int serverPort) throws IOException {
        //和服務(wù)器建立連接,就需要知道服務(wù)器在哪
        socket = new Socket(serverIP,serverPort);
    }

    public void start() throws IOException {
        Scanner scan = new Scanner(System.in);
        try(InputStream inputStream = socket.getInputStream();
            OutputStream outputStream = socket.getOutputStream()) {
            while(true) {
                //1.從控制臺(tái)讀取數(shù)據(jù),構(gòu)造成一個(gè)請(qǐng)求
                System.out.println("-> ");
                String request = scan.next();

                //2.發(fā)送請(qǐng)求給服務(wù)器
                PrintWriter printWriter = new PrintWriter(outputStream);
                printWriter.println(request);
                //這個(gè) flush 不要忘記,否則可能導(dǎo)致請(qǐng)求沒(méi)有真發(fā)出去
                printWriter.flush();

                //3.從服務(wù)器讀取響應(yīng)
                Scanner respScanner = new Scanner(inputStream);
                String response = respScanner.next();

                //4.把響應(yīng)顯示到界面上
                System.out.println(response);
            }
        }
    }

    public static void main(String[] args) throws IOException {
        TcpEchoClient tcpEchoClient = new TcpEchoClient("127.0.0.1",9090);
        tcpEchoClient.start();
    }
}

7. 運(yùn)行回顯服務(wù)器和客戶端

mfc創(chuàng)建tcp服務(wù)器線程,JavaEE,java

?mfc創(chuàng)建tcp服務(wù)器線程,JavaEE,javamfc創(chuàng)建tcp服務(wù)器線程,JavaEE,java

?mfc創(chuàng)建tcp服務(wù)器線程,JavaEE,java文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-805067.html

到了這里,關(guān)于網(wǎng)絡(luò)編程套接字之三【TCP】的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • 【網(wǎng)絡(luò)編程】網(wǎng)絡(luò)編程套接字(三)TCP網(wǎng)絡(luò)程序

    【網(wǎng)絡(luò)編程】網(wǎng)絡(luò)編程套接字(三)TCP網(wǎng)絡(luò)程序

    與前邊的UDP網(wǎng)絡(luò)程序相同,創(chuàng)建套接字的接口都是socket,下邊對(duì)socket接口進(jìn)行介紹: 協(xié)議家族選擇AF_INET,因?yàn)槲覀円M(jìn)行網(wǎng)絡(luò)通信。 而第二個(gè)參數(shù),為服務(wù)類型,傳入SOCK_STREAM,我們編寫(xiě)TCP程序,所以要選擇流式的服務(wù)。 第三個(gè)參數(shù)默認(rèn)傳入0,由前兩個(gè)參數(shù)就可以推出這是

    2024年02月16日
    瀏覽(92)
  • 【Linux網(wǎng)絡(luò)】網(wǎng)絡(luò)編程套接字(TCP)

    【Linux網(wǎng)絡(luò)】網(wǎng)絡(luò)編程套接字(TCP)

    目錄 地址轉(zhuǎn)換函數(shù) 字符串IP轉(zhuǎn)整數(shù)IP 整數(shù)IP轉(zhuǎn)字符串IP 關(guān)于inet_ntoa 簡(jiǎn)單的單執(zhí)行流TCP網(wǎng)絡(luò)程序 TCP socket API 詳解及封裝TCP socket? 服務(wù)端創(chuàng)建套接字? 服務(wù)端綁定? 服務(wù)端監(jiān)聽(tīng)? 服務(wù)端獲取連接? 服務(wù)端處理請(qǐng)求 客戶端創(chuàng)建套接字 客戶端連接服務(wù)器 客戶端發(fā)起請(qǐng)求 服務(wù)器測(cè)試

    2024年03月21日
    瀏覽(113)
  • 【Linux】網(wǎng)絡(luò)---->套接字編程(TCP)

    【Linux】網(wǎng)絡(luò)---->套接字編程(TCP)

    TCP的編程流程:大致可以分為五個(gè)過(guò)程,分別是準(zhǔn)備過(guò)程、連接建立過(guò)程、獲取新連接過(guò)程、消息收發(fā)過(guò)程和斷開(kāi)過(guò)程。 1.準(zhǔn)備過(guò)程:服務(wù)端和客戶端需要?jiǎng)?chuàng)建各自的套接字,除此之外服務(wù)端還需要綁定自己的地址信息和進(jìn)行監(jiān)聽(tīng)。注意:服務(wù)端調(diào)用listen函數(shù)后,處理監(jiān)聽(tīng)狀

    2024年02月04日
    瀏覽(101)
  • Linux網(wǎng)絡(luò)編程——tcp套接字

    Linux網(wǎng)絡(luò)編程——tcp套接字

    本章Gitee倉(cāng)庫(kù):tcp套接字 客戶端: 客戶端: 關(guān)于構(gòu)造和初始化,可以直接在構(gòu)造的時(shí)候,將服務(wù)器初始化,那為什么還要寫(xiě)到 init 初始化函數(shù)里面呢? 構(gòu)造盡量簡(jiǎn)單一點(diǎn),不要做一些“有風(fēng)險(xiǎn)”的操作。 tcp 是面向連接的,通信之前要建立連接,服務(wù)器處于等待連接到來(lái)的

    2024年02月20日
    瀏覽(96)
  • 網(wǎng)絡(luò)編程套接字(2)——簡(jiǎn)單的TCP網(wǎng)絡(luò)程序

    網(wǎng)絡(luò)編程套接字(2)——簡(jiǎn)單的TCP網(wǎng)絡(luò)程序

    我們將TCP服務(wù)器封裝成一個(gè)類,當(dāng)我們定義出一個(gè)服務(wù)器對(duì)象后需要馬上對(duì)服務(wù)器進(jìn)行初始化,而初始化TCP服務(wù)器要做的第一件事就是創(chuàng)建套接字。 TCP服務(wù)器在調(diào)用socket函數(shù)創(chuàng)建套接字時(shí),參數(shù)設(shè)置如下: 協(xié)議家族選擇 AF_INET ,因?yàn)槲覀円M(jìn)行的是網(wǎng)絡(luò)通信。 創(chuàng)建套接字時(shí)

    2024年02月06日
    瀏覽(93)
  • 【Linux網(wǎng)絡(luò)編程】網(wǎng)絡(luò)編程套接字(TCP服務(wù)器)

    【Linux網(wǎng)絡(luò)編程】網(wǎng)絡(luò)編程套接字(TCP服務(wù)器)

    作者:愛(ài)寫(xiě)代碼的剛子 時(shí)間:2024.4.4 前言:本篇博客主要介紹TCP及其服務(wù)器編碼 只介紹基于IPv4的socket網(wǎng)絡(luò)編程,sockaddr_in中的成員struct in_addr sin_addr表示32位 的IP地址 但是我們通常用點(diǎn)分十進(jìn)制的字符串表示IP地址,以下函數(shù)可以在字符串表示和in_addr表示之間轉(zhuǎn)換 字符串轉(zhuǎn)in

    2024年04月14日
    瀏覽(108)
  • TCP/IP網(wǎng)絡(luò)編程(一) 理解網(wǎng)絡(luò)編程和套接字

    網(wǎng)絡(luò)編程和套接字概要 網(wǎng)絡(luò)編程就是編寫(xiě)程序使兩臺(tái)聯(lián)網(wǎng)的計(jì)算機(jī)相互交換數(shù)據(jù) 為了與遠(yuǎn)程計(jì)算機(jī)進(jìn)行數(shù)據(jù)傳輸,需要連接因特網(wǎng),而編程種的套接字就是用來(lái)連接該網(wǎng)絡(luò)的工具。 構(gòu)建套接字 1.調(diào)用soecket函數(shù)創(chuàng)建套接字 2.調(diào)用bind函數(shù)給套接字分配地址 3.調(diào)用listen函數(shù)將套

    2024年02月11日
    瀏覽(857)
  • 【網(wǎng)絡(luò)通信】socket編程——TCP套接字

    【網(wǎng)絡(luò)通信】socket編程——TCP套接字

    TCP依舊使用代碼來(lái)熟悉對(duì)應(yīng)的套接字,很多接口都是在udp中使用過(guò)的 所以就不會(huì)單獨(dú)把他們拿出來(lái)作為標(biāo)題了,只會(huì)把第一次出現(xiàn)的接口作為標(biāo)題 通過(guò)TCP的套接字 ,來(lái)把數(shù)據(jù)交付給對(duì)方的應(yīng)用層,完成雙方進(jìn)程的通信 在 tcpServer.hpp 中,創(chuàng)建一個(gè)命名空間 yzq 用于封裝 在命名

    2024年02月13日
    瀏覽(102)
  • JavaEE-網(wǎng)絡(luò)編程套接字(UDP/TCP)

    JavaEE-網(wǎng)絡(luò)編程套接字(UDP/TCP)

    下面寫(xiě)一個(gè)簡(jiǎn)單的UDP客戶端服務(wù)器流程 思路: 對(duì)于服務(wù)器端:讀取請(qǐng)求,并解析– 根據(jù)解析出的請(qǐng)求,做出響應(yīng)(這里是一個(gè)回顯,)–把響應(yīng)寫(xiě)回客戶端 對(duì)于客戶端:從控制臺(tái)讀取用戶輸入的內(nèi)容–從控制臺(tái)讀取用戶輸入的內(nèi)容–從控制臺(tái)讀取用戶輸入的內(nèi)容–將其顯示在

    2024年02月07日
    瀏覽(91)
  • C++網(wǎng)絡(luò)編程 TCP套接字基礎(chǔ)知識(shí),利用TCP套接字實(shí)現(xiàn)客戶端-服務(wù)端通信

    C++網(wǎng)絡(luò)編程 TCP套接字基礎(chǔ)知識(shí),利用TCP套接字實(shí)現(xiàn)客戶端-服務(wù)端通信

    流式套接字編程針對(duì)TCP協(xié)議通信,即是面向?qū)ο蟮耐ㄐ?,分為服?wù)端和客戶端兩部分。 1)加載套接字庫(kù)( 使用函數(shù)WSAStartup() ),創(chuàng)建套接字( 使用socket() ) 2)綁定套接字到一個(gè)IP地址和一個(gè)端口上( 使用函數(shù)bind() ) 3)將套接字設(shè)置為監(jiān)聽(tīng)模式等待連接請(qǐng)求( 使用函數(shù)

    2024年02月03日
    瀏覽(103)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包