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

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

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


JavaEE-網(wǎng)絡(luò)編程套接字(UDP/TCP),Java-EE,網(wǎng)絡(luò),java-ee,udp
JavaEE-網(wǎng)絡(luò)編程套接字(UDP/TCP),Java-EE,網(wǎng)絡(luò),java-ee,udp
JavaEE-網(wǎng)絡(luò)編程套接字(UDP/TCP),Java-EE,網(wǎng)絡(luò),java-ee,udp


JavaEE-網(wǎng)絡(luò)編程套接字(UDP/TCP),Java-EE,網(wǎng)絡(luò),java-ee,udp

JavaEE-網(wǎng)絡(luò)編程套接字(UDP/TCP),Java-EE,網(wǎng)絡(luò),java-ee,udp
JavaEE-網(wǎng)絡(luò)編程套接字(UDP/TCP),Java-EE,網(wǎng)絡(luò),java-ee,udp


下面寫一個簡單的UDP客戶端服務(wù)器流程
思路:
對于服務(wù)器端:讀取請求,并解析–> 根據(jù)解析出的請求,做出響應(yīng)(這里是一個回顯,)–>把響應(yīng)寫回客戶端
對于客戶端:從控制臺讀取用戶輸入的內(nèi)容–>從控制臺讀取用戶輸入的內(nèi)容–>從控制臺讀取用戶輸入的內(nèi)容–>將其顯示在屏幕上
全部代碼如下:
服務(wù)器端:

package network;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
//UDP的回顯服務(wù)器   客戶端發(fā)出的請求是啥,服務(wù)器返回的響應(yīng)就是啥
public class UdpEchoServer {
    private DatagramSocket socket=null;

    //  指定服務(wù)器的port
    public UdpEchoServer(int port) throws SocketException {
        socket=new DatagramSocket(port);
    }

    //指定一個方法啟動服務(wù)器
    public void start() throws IOException {
        System.out.println("服務(wù)器開始啟動");
        while(true){
            // 反復(fù)的, 長期的執(zhí)行針對客戶端請求處理的邏輯.
            // 一個服務(wù)器, 運(yùn)行過程中, 要做的事情, 主要是三個核心環(huán)節(jié).
            //服務(wù)器這里需要接收請求
            //1.讀取請求,并解析
            DatagramPacket requestPacket=new DatagramPacket(new byte[4096],4096);
            socket.receive(requestPacket);
            //解析
            String request=new String(requestPacket.getData(),0, requestPacket.getLength());
            //2.根據(jù)解析出的請求,做出響應(yīng)(這里是一個回顯,)
            String response=process(request);
            //3. 把響應(yīng)寫回客戶端  此時需要告訴網(wǎng)卡,要發(fā)的內(nèi)容是啥,發(fā)給誰
            //構(gòu)造一個發(fā)送數(shù)據(jù)包
            DatagramPacket responsePacket=new DatagramPacket(response.getBytes(),response.getBytes().length,
                    requestPacket.getSocketAddress());
            socket.send(responsePacket);
            //記錄日志
            System.out.printf("[%s:%d]  req: %s, resp: %s\n",requestPacket.getAddress().toString(),requestPacket.getPort(),
                    request,response);
        }
    }
    //這里是一個回顯,只需要返回這個字符串
    public String process(String request){
        return request;
    }

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

客戶端:

package network;

import java.io.IOException;
import java.net.*;
import java.util.Scanner;
public class UdpEchoClient {
    //由于客戶端的port是自動分配的,所以這里不會像服務(wù)器那樣配置port
    //但是,客戶端需要向服務(wù)器發(fā)送請求,所以,這里我們需要知道服務(wù)器的ip和port
    private DatagramSocket socket=null;
    private String serverIp;
    private int serverPort;

    //外部指定服務(wù)器的ip和port
    public UdpEchoClient(String ip,int port) throws SocketException {
        this.serverIp=ip;
        this.serverPort=port;
        //客戶端的port是自動分配的
        socket=new DatagramSocket();

    }
    // 讓這個客戶端反復(fù)的從控制臺讀取用戶輸入的內(nèi)容. 把這個內(nèi)容構(gòu)造成 UDP 請求, 發(fā)給服務(wù)器. 再讀取服務(wù)器返回的 UDP 響應(yīng)
    // 最終再顯示在客戶端的屏幕上.
    public void  start() throws IOException {
        Scanner scanner=new Scanner(System.in);
        System.out.println("客戶端開始啟動");
        while(true){
            //1. 從控制臺讀取用戶輸入的內(nèi)容
            System.out.println("->");
            String requset=scanner.next();
            //2.構(gòu)造請求對象,發(fā)送給服務(wù)器
            DatagramPacket requsetPacket=new DatagramPacket(requset.getBytes(),requset.getBytes().length,
                    InetAddress.getByName(serverIp),serverPort);
            socket.send(requsetPacket);
            //3.讀取服務(wù)器的響應(yīng),并解析出其內(nèi)容
            DatagramPacket responsePacket=new DatagramPacket(new byte[4096],4096);
            socket.receive(responsePacket);
            String response=new String(responsePacket.getData(),0,responsePacket.getLength());
            //4 。將其顯示在屏幕上
            System.out.println(response);
        }
    }
    public static void main(String[] args) throws IOException {
        UdpEchoClient udpEchoClient=new UdpEchoClient("127.0.0.1",9090);//127.0.0.1 本機(jī)ip
        udpEchoClient.start();

    }
}

運(yùn)行結(jié)果如下
JavaEE-網(wǎng)絡(luò)編程套接字(UDP/TCP),Java-EE,網(wǎng)絡(luò),java-ee,udp
對上述過程中的一些談?wù)摵头治觯?/p>

JavaEE-網(wǎng)絡(luò)編程套接字(UDP/TCP),Java-EE,網(wǎng)絡(luò),java-ee,udp

JavaEE-網(wǎng)絡(luò)編程套接字(UDP/TCP),Java-EE,網(wǎng)絡(luò),java-ee,udp

JavaEE-網(wǎng)絡(luò)編程套接字(UDP/TCP),Java-EE,網(wǎng)絡(luò),java-ee,udp
JavaEE-網(wǎng)絡(luò)編程套接字(UDP/TCP),Java-EE,網(wǎng)絡(luò),java-ee,udp


多個客戶端向一個服務(wù)器發(fā)送請求
JavaEE-網(wǎng)絡(luò)編程套接字(UDP/TCP),Java-EE,網(wǎng)絡(luò),java-ee,udp

JavaEE-網(wǎng)絡(luò)編程套接字(UDP/TCP),Java-EE,網(wǎng)絡(luò),java-ee,udp


JavaEE-網(wǎng)絡(luò)編程套接字(UDP/TCP),Java-EE,網(wǎng)絡(luò),java-ee,udp


下面寫一個簡單的翻譯服務(wù)器
JavaEE-網(wǎng)絡(luò)編程套接字(UDP/TCP),Java-EE,網(wǎng)絡(luò),java-ee,udp

重寫的服務(wù)器端的代碼如下:

package network;

import java.io.IOException;
import java.net.SocketException;
import java.util.HashMap;
import java.util.Map;

public class UdpDictServer extends UdpEchoServer{
    //使用HashMap保存中英文翻譯的鍵值對
    private Map<String,String> dict =new HashMap<>();
    //實(shí)現(xiàn)父類的構(gòu)造方法
    public UdpDictServer(int port) throws SocketException {
        super(port);

        //一些原始的鍵值對
        dict.put("cat","貓");
        dict.put("dog","狗");
        dict.put("people","人");
    }
    //與原始的UdpEachServer相比,這里對于請求的處理過程是不一樣的
    //重寫process方法

    @Override
    public String process(String request) {
        //找到對應(yīng)的翻譯,并返回
        //getOrDefault方法,找到key所對應(yīng)的value值,如果沒有找到,則返回defaultValue(即第二個參數(shù))
        return dict.getOrDefault(request,"該詞沒有查詢到");
    }

    public static void main(String[] args) throws IOException {
        UdpDictServer server=new UdpDictServer(9090);
        // start 不需要重新再寫一遍了. 直接就復(fù)用了之前的 start
        server.start();
    }
}

執(zhí)行結(jié)果如下:

JavaEE-網(wǎng)絡(luò)編程套接字(UDP/TCP),Java-EE,網(wǎng)絡(luò),java-ee,udp

JavaEE-網(wǎng)絡(luò)編程套接字(UDP/TCP),Java-EE,網(wǎng)絡(luò),java-ee,udp


JavaEE-網(wǎng)絡(luò)編程套接字(UDP/TCP),Java-EE,網(wǎng)絡(luò),java-ee,udp
JavaEE-網(wǎng)絡(luò)編程套接字(UDP/TCP),Java-EE,網(wǎng)絡(luò),java-ee,udp

JavaEE-網(wǎng)絡(luò)編程套接字(UDP/TCP),Java-EE,網(wǎng)絡(luò),java-ee,udp


下面寫一個基于TCP 的回顯流程

思路:
服務(wù)器端:先從隊(duì)列中拿到一個“連接”–> 讀取請求并解析–>根據(jù)請求計(jì)算響應(yīng)–>把響應(yīng)寫回給客戶端
客戶端:從控制臺輸入字符串–>把請求發(fā)送給服務(wù)器–>從服務(wù)器讀取響應(yīng).–>把響應(yīng)打印出來

全部代碼如下:
服務(wù)器端代碼:

package network;

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;

//基于TCP的回顯服務(wù)器
public class TcpEachServer {
    private ServerSocket serverSocket=null;

    //綁定端口號
    public  TcpEachServer(int port) throws IOException {
        serverSocket=new ServerSocket(port);
    }

    //啟動服務(wù)器
    public  void  start() throws IOException {
        System.out.println("服務(wù)器開始啟動");
        while(true){
            //從管理連接的隊(duì)列中拿出一個“連接”出來
            Socket clientSocket=serverSocket.accept();
            //處理這個連接內(nèi)的請求
            processConnection(clientSocket);
        }
    }
    //這個方法用來處理連接中的邏輯
    private void processConnection(Socket clientSocket) throws IOException {
        //日志
        System.out.printf("[%s:%d] 客戶端上線\n",clientSocket.getInetAddress().toString(),
                clientSocket.getPort());
        //下面開始讀取請求,計(jì)算響應(yīng),返回響應(yīng)  三步曲
        //Socket對象內(nèi)部包含兩種字節(jié)流對象InputStream和OutputStream,可以先把這兩個對象流獲
        // 取到,方便后續(xù)處理過程種的讀寫工作
        try(InputStream inputStream=clientSocket.getInputStream();
            OutputStream outputStream=clientSocket.getOutputStream()){
            //不同于UDP協(xié)議中的無連接,在客戶端的一次連接過程中,可能涉及多次請求/響應(yīng)過程
            //因此。這里使用一個while循環(huán),直到該連接中的所有請求處理完畢
            while(true){
                //1,讀取請求并解析
                Scanner scanner=new Scanner(inputStream);
                //hasNext的作用是,檢測輸入流中是否有結(jié)束輸入的控制符,比如0x1A(EOF,Ctrl-Z)
                //用于檢測一個連接是否結(jié)束
                if(!scanner.hasNext()){
                    //一個連接處理完畢
                    System.out.printf("[%s:%d] 客戶端本次連接處理完畢,下線!\n",clientSocket.getInetAddress().toString(),
                            clientSocket.getPort());
                    break;
                }
                // 這個代碼暗含一個約定, 客戶端發(fā)過來的請求, 得是文本數(shù)據(jù), 同時, 還得帶有空白符作為分割. (比如換行這種)
                //next():當(dāng)輸入到空白符結(jié)束
                String request=scanner.next();
                //2.根據(jù)請求計(jì)算響應(yīng)
               String response=process(request);
               //3. 把響應(yīng)寫回客戶端,把OutputStream用PrintWriter(此處的PrintWriter相當(dāng)于Scanner)包裹一下,便于發(fā)送數(shù)據(jù)
                //將outputStream和PrintWriter關(guān)聯(lián)起來
                PrintWriter writer=new PrintWriter(outputStream);
                //使用 PrintWriter 的 println 方法,打印到輸出流中 把響應(yīng)返回給客戶端.
                //此處用 println, 而不是 print 就是為了在結(jié)尾加上 \n . 方便客戶端讀取響應(yīng), 使用 scanner.next 讀取.
                writer.println(response);
                //這里還需要加一個 "刷新緩沖區(qū)" 操作.將緩沖區(qū)的數(shù)據(jù)強(qiáng)制輸出,用于清空緩沖區(qū)
                writer.flush();

                //日志 記錄當(dāng)前的請求和響應(yīng)
                System.out.printf("[%s:%d]  req: %s,resp: %s\n",clientSocket.getInetAddress().toString(),
                        clientSocket.getPort(),request,response);
            }
        }
    }

    //回顯,只需要再返回這個字符串
    public String process(String requset){
        return requset;
    }
    public static void main(String[] args) throws IOException {
        TcpEachServer tcpEachServer=new TcpEachServer(9090);
        tcpEachServer.start();
    }
}

客戶端代碼:

package network;

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

public class TcpEchoClient {
    private Socket socket=null;

    //服務(wù)器端的ip和port
    public  TcpEchoClient(String serverIp,int serverPort) throws IOException {
        //這個new的動作完成后,完成了tcp的建立
        socket=new Socket(serverIp,serverPort);
    }

    public void start() throws IOException {
        System.out.println("客戶端啟動");
        Scanner scannerConsole=new Scanner(System.in);
        //Socket對象內(nèi)部包含兩種字節(jié)流對象InputStream和OutputStream,可以先把這兩個對象流獲
        //   取到,方便后續(xù)處理過程種的讀寫工作
        try(InputStream inputStream=socket.getInputStream();
            OutputStream outputStream=socket.getOutputStream()){
            while(true){
                //1.從控制臺輸入字符串
                System.out.println("-->");
                String request=scannerConsole.next();
                //2.把請求發(fā)送給服務(wù)器  需要對request進(jìn)行包裝,使用PrintWriter
                PrintWriter printWriter=new PrintWriter(outputStream);
                //使用 println 帶上換行. 后續(xù)服務(wù)器讀取請求, 就可以使用 scanner.next 來獲取了
                printWriter.println(request);//發(fā)送請求
                printWriter.flush();
                //3.從服務(wù)器中接收響應(yīng)
                Scanner scannerNetwork=new Scanner(inputStream);
                String response=scannerNetwork.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();
    }
}

當(dāng)開多個線程時,發(fā)現(xiàn)只有一個線程在被處理,其它線程都在等待,
JavaEE-網(wǎng)絡(luò)編程套接字(UDP/TCP),Java-EE,網(wǎng)絡(luò),java-ee,udp
當(dāng)被處理的線程下線后,其他線程的邏輯才開始被處理
JavaEE-網(wǎng)絡(luò)編程套接字(UDP/TCP),Java-EE,網(wǎng)絡(luò),java-ee,udp

JavaEE-網(wǎng)絡(luò)編程套接字(UDP/TCP),Java-EE,網(wǎng)絡(luò),java-ee,udp
原因在于 Socket clientSocket = serverSocket.accept();和processConnection(clientSocket);都是主線程進(jìn)行處理的且在同一次循環(huán)體中,只有一個clinetSocket連接被處理完后,才會去隊(duì)列中accept下一個連接,為此,這里我們可以采用多線程進(jìn)行處理。
JavaEE-網(wǎng)絡(luò)編程套接字(UDP/TCP),Java-EE,網(wǎng)絡(luò),java-ee,udp

修改為多線程后,可以看到 有多個客戶端可以訪問服務(wù)器
JavaEE-網(wǎng)絡(luò)編程套接字(UDP/TCP),Java-EE,網(wǎng)絡(luò),java-ee,udp

JavaEE-網(wǎng)絡(luò)編程套接字(UDP/TCP),Java-EE,網(wǎng)絡(luò),java-ee,udp
考慮到一個現(xiàn)實(shí)的情況,許多客戶端需要頻繁的訪問服務(wù)器,那就是需要頻繁的斷開/連接,我們這里可以使用線程池
JavaEE-網(wǎng)絡(luò)編程套接字(UDP/TCP),Java-EE,網(wǎng)絡(luò),java-ee,udp
JavaEE-網(wǎng)絡(luò)編程套接字(UDP/TCP),Java-EE,網(wǎng)絡(luò),java-ee,udp
同樣也可以實(shí)現(xiàn)多個客戶端同時訪問服務(wù)器。

最終的服務(wù)器的代碼如下:

package network;

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.ExecutorService;
import java.util.concurrent.Executors;
//基于TCP的回顯服務(wù)器
public class TcpEachServer {
    private ServerSocket serverSocket=null;
    //創(chuàng)建一個非固定數(shù)目的線程池
    private ExecutorService service= Executors.newCachedThreadPool();

    //綁定端口號
    public  TcpEachServer(int port) throws IOException {
        serverSocket=new ServerSocket(port);
    }

    //啟動服務(wù)器
    public  void  start() throws IOException {
        System.out.println("服務(wù)器開始啟動");
        while(true){
            //從管理連接的隊(duì)列中拿出一個“連接”出來
            Socket clientSocket=serverSocket.accept();
            //處理這個連接內(nèi)的請求
            service.submit(new Runnable() {
                @Override
                public void run() {
                    try {
                        processConnection(clientSocket);
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            });
/*            Thread t=new Thread(() ->{
                try {
                    processConnection(clientSocket);
                } catch (IOException e) {
                    e.printStackTrace();
                }
            });
            t.start();*/
        }
    }
    //這個方法用來處理連接中的邏輯
    private void processConnection(Socket clientSocket) throws IOException {
        //日志
        System.out.printf("[%s:%d] 客戶端上線\n",clientSocket.getInetAddress().toString(),
                clientSocket.getPort());
        //下面開始讀取請求,計(jì)算響應(yīng),返回響應(yīng)  三步曲
        //Socket對象內(nèi)部包含兩種字節(jié)流對象InputStream和OutputStream,可以先把這兩個對象流獲
        // 取到,方便后續(xù)處理過程種的讀寫工作
        try(InputStream inputStream=clientSocket.getInputStream();
            OutputStream outputStream=clientSocket.getOutputStream()){
            //不同于UDP協(xié)議中的無連接,在客戶端的一次連接過程中,可能涉及多次請求/響應(yīng)過程
            //因此。這里使用一個while循環(huán),直到該連接中的所有請求處理完畢
            while(true){
                //1,讀取請求并解析
                Scanner scanner=new Scanner(inputStream);
                //hasNext的作用是,檢測輸入流中是否有結(jié)束輸入的控制符,比如0x1A(EOF,Ctrl-Z)
                //用于檢測一個連接是否結(jié)束
                if(!scanner.hasNext()){
                    //一個連接處理完畢
                    System.out.printf("[%s:%d] 客戶端本次連接處理完畢,下線!\n",clientSocket.getInetAddress().toString(),
                            clientSocket.getPort());
                    break;
                }
                // 這個代碼暗含一個約定, 客戶端發(fā)過來的請求, 得是文本數(shù)據(jù), 同時, 還得帶有空白符作為分割. (比如換行這種)
                //next():當(dāng)輸入到空白符結(jié)束
                String request=scanner.next();
                //2.根據(jù)請求計(jì)算響應(yīng)
               String response=process(request);
               //3. 把響應(yīng)寫回客戶端,把OutputStream用PrintWriter(此處的PrintWriter相當(dāng)于Scanner)包裹一下,便于發(fā)送數(shù)據(jù)
                //將outputStream和PrintWriter關(guān)聯(lián)起來
                PrintWriter writer=new PrintWriter(outputStream);
                //使用 PrintWriter 的 println 方法,打印到輸出流中 把響應(yīng)返回給客戶端.
                //此處用 println, 而不是 print 就是為了在結(jié)尾加上 \n . 方便客戶端讀取響應(yīng), 使用 scanner.next 讀取.
                writer.println(response);
                //這里還需要加一個 "刷新緩沖區(qū)" 操作.將緩沖區(qū)的數(shù)據(jù)強(qiáng)制輸出,用于清空緩沖區(qū)
                writer.flush();

                //日志 記錄當(dāng)前的請求和響應(yīng)
                System.out.printf("[%s:%d]  req: %s,resp: %s\n",clientSocket.getInetAddress().toString(),
                        clientSocket.getPort(),request,response);
            }
        } finally {
            clientSocket.close();
        }
    }

    //回顯,只需要再返回這個字符串
    public String process(String requset){
        return requset;
    }
    public static void main(String[] args) throws IOException {
        TcpEachServer tcpEachServer=new TcpEachServer(9090);
        tcpEachServer.start();
    }
}


上述過程中的一些思路

JavaEE-網(wǎng)絡(luò)編程套接字(UDP/TCP),Java-EE,網(wǎng)絡(luò),java-ee,udp

JavaEE-網(wǎng)絡(luò)編程套接字(UDP/TCP),Java-EE,網(wǎng)絡(luò),java-ee,udp

JavaEE-網(wǎng)絡(luò)編程套接字(UDP/TCP),Java-EE,網(wǎng)絡(luò),java-ee,udp

JavaEE-網(wǎng)絡(luò)編程套接字(UDP/TCP),Java-EE,網(wǎng)絡(luò),java-ee,udp

JavaEE-網(wǎng)絡(luò)編程套接字(UDP/TCP),Java-EE,網(wǎng)絡(luò),java-ee,udp
JavaEE-網(wǎng)絡(luò)編程套接字(UDP/TCP),Java-EE,網(wǎng)絡(luò),java-ee,udp文章來源地址http://www.zghlxwxcb.cn/news/detail-728019.html


到了這里,關(guān)于JavaEE-網(wǎng)絡(luò)編程套接字(UDP/TCP)的文章就介紹完了。如果您還想了解更多內(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)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

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

相關(guān)文章

  • UDP網(wǎng)絡(luò)套接字編程

    UDP網(wǎng)絡(luò)套接字編程

    先來說說數(shù)據(jù)在網(wǎng)絡(luò)上的傳輸過程吧,我們知道系統(tǒng)其實(shí)終究是根據(jù)馮諾依曼來構(gòu)成的,而網(wǎng)絡(luò)數(shù)據(jù)是怎么發(fā)的呢? 其實(shí)很簡單,網(wǎng)絡(luò)有五層。如下: 如上圖,我們知道的是,每層對應(yīng)的操作系統(tǒng)中的那些地方,有些可能說是網(wǎng)絡(luò)有七層,其實(shí)和這個五層一樣的。下面我們

    2024年02月04日
    瀏覽(95)
  • 【JaveEE】網(wǎng)絡(luò)編程之TCP套接字、UDP套接字

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

    目錄 1.網(wǎng)絡(luò)編程的基本概念 1.1為什么需要網(wǎng)絡(luò)編程? 1.2服務(wù)端與用戶端 1.3網(wǎng)絡(luò)編程五元組? 1.4套接字的概念 2.UDP套接字編程 2.1UDP套接字的特點(diǎn) ?2.2UDP套接字API 2.2.1DatagramSocket類 2.2.2DatagramPacket類? 2.2.3基于UDP的回顯程序 2.2.4基于UDP的單詞查詢? 3.TCP套接字編程 3.1TCP套接字的特

    2023年04月13日
    瀏覽(915)
  • 網(wǎng)絡(luò)編程套接字(3)——Java數(shù)據(jù)報(bào)套接字(UDP協(xié)議)

    網(wǎng)絡(luò)編程套接字(3)——Java數(shù)據(jù)報(bào)套接字(UDP協(xié)議)

    目錄 一、Java數(shù)據(jù)報(bào)套接字通信模型 二、UDP數(shù)據(jù)報(bào)套接字編程 1、DatagramSocket ????????(1)DatagramSocket構(gòu)造方法 ????????(2)DatagramSocket方法 2、DatagramPacket ????????(1)DatagramPacket構(gòu)造方法 ????????(2)DatagramPacket方法 3、InetSocketAddress 三、代碼示例:回顯服務(wù)

    2024年03月12日
    瀏覽(233)
  • 【JavaEE初階】 網(wǎng)絡(luò)編程基礎(chǔ)與Socket套接字

    【JavaEE初階】 網(wǎng)絡(luò)編程基礎(chǔ)與Socket套接字

    用戶在瀏覽器中,打開在線視頻網(wǎng)站,如騰訊看視頻,實(shí)質(zhì)是通過網(wǎng)絡(luò),獲取到網(wǎng)絡(luò)上的一個視頻資源。 與本地打開視頻文件類似,只是視頻文件這個資源的來源是 網(wǎng)絡(luò) 。 相比本地資源來說,網(wǎng)絡(luò)提供了更為豐富的網(wǎng)絡(luò)資源: 所謂的網(wǎng)絡(luò)資源,其實(shí)就是在網(wǎng)絡(luò)中可以獲取

    2024年02月05日
    瀏覽(97)
  • 【Linux】網(wǎng)絡(luò)基礎(chǔ)+UDP網(wǎng)絡(luò)套接字編程

    【Linux】網(wǎng)絡(luò)基礎(chǔ)+UDP網(wǎng)絡(luò)套接字編程

    只做自己喜歡做的事情,不被社會和時代裹挾著前進(jìn),是一件很奢侈的事。 1. 首先計(jì)算機(jī)是人類設(shè)計(jì)出來提高生產(chǎn)力的工具,而人類的文明綿延至今一定離不開人類之間互相的協(xié)作,既然人類需要協(xié)作以完成更為復(fù)雜的工作和難題,所以計(jì)算機(jī)作為人類的工具自然也一定需要

    2024年02月08日
    瀏覽(89)
  • 網(wǎng)絡(luò)編程套接字(2): 簡單的UDP網(wǎng)絡(luò)程序

    網(wǎng)絡(luò)編程套接字(2): 簡單的UDP網(wǎng)絡(luò)程序

    3.1 服務(wù)端創(chuàng)建 (1) 創(chuàng)建套接字 create an endpoint for communication: 創(chuàng)建用于通信的端點(diǎn) 關(guān)于socket參數(shù)詳細(xì)介紹: (1) domain: 指定套接字的通信域,相當(dāng)于 struct sockaddr結(jié)構(gòu)體的前16比特位(2字節(jié)) domain的選項(xiàng)是以宏的形式給出的,我們直接選用即可。常用就是上面框住的兩個: AF_UNIX,本

    2024年02月10日
    瀏覽(91)
  • 網(wǎng)絡(luò)編程『socket套接字 ‖ 簡易UDP網(wǎng)絡(luò)程序』

    網(wǎng)絡(luò)編程『socket套接字 ‖ 簡易UDP網(wǎng)絡(luò)程序』

    ??個人主頁: 北 海 ??所屬專欄: Linux學(xué)習(xí)之旅、神奇的網(wǎng)絡(luò)世界 ??操作環(huán)境: CentOS 7.6 阿里云遠(yuǎn)程服務(wù)器 在當(dāng)今數(shù)字化時代,網(wǎng)絡(luò)通信作為連接世界的橋梁,成為計(jì)算機(jī)科學(xué)領(lǐng)域中至關(guān)重要的一部分。理解網(wǎng)絡(luò)編程是每一位程序員必備的技能之一,而掌握套接字編程則

    2024年02月04日
    瀏覽(103)
  • 【Linux網(wǎng)絡(luò)】網(wǎng)絡(luò)編程套接字(預(yù)備知識+UDP)

    【Linux網(wǎng)絡(luò)】網(wǎng)絡(luò)編程套接字(預(yù)備知識+UDP)

    目錄 預(yù)備知識 1. 理解源IP地址和目的IP地址 2. 理解源MAC地址和目的MAC地址 3. 認(rèn)識端口號 ?4. 理解源端口號和目的端口號 5. 端口號(port) vs 進(jìn)程pid 6. 認(rèn)識TCP協(xié)議和認(rèn)識UDP協(xié)議 7. 網(wǎng)絡(luò)字節(jié)序 socket編程接口? 1. socket 常見API 2. sockaddr結(jié)構(gòu)? 簡單的UDP網(wǎng)絡(luò)程序? 1. 服務(wù)端創(chuàng)建udp

    2024年02月19日
    瀏覽(93)
  • 【網(wǎng)絡(luò)編程】詳解UDP/TCP套接字的創(chuàng)建流程

    【網(wǎng)絡(luò)編程】詳解UDP/TCP套接字的創(chuàng)建流程

    需要云服務(wù)器等云產(chǎn)品來學(xué)習(xí)Linux的同學(xué)可以移步/--騰訊云--/--阿里云--/--華為云--/官網(wǎng),輕量型云服務(wù)器低至112元/年,新用戶首次下單享超低折扣。 ? 目錄 一、網(wǎng)絡(luò)編程套接字 1、一些概念 1.1源IP地址和目的IP地址 1.2端口號port 1.3TCP和UDP的性質(zhì) 1.4網(wǎng)絡(luò)字節(jié)序、IP地址類型轉(zhuǎn)換

    2024年02月05日
    瀏覽(95)
  • 【Linux Network】網(wǎng)絡(luò)編程套接字(代碼練習(xí))—UDP

    【Linux Network】網(wǎng)絡(luò)編程套接字(代碼練習(xí))—UDP

    目錄 1. 常用接口 2. C/S 回聲模擬 3. C/S myshell 的制作 ?Linux網(wǎng)絡(luò)編程? 1. 常用接口 socket:創(chuàng)建套接字: 返回值: 套接字創(chuàng)建成功返回一個文件描述符 ,創(chuàng)建失敗返回-1,同時錯誤碼會被設(shè)置。 參數(shù): domain: 網(wǎng)絡(luò)通信 設(shè)置為 AF_INET(IPv4)或AF_INET6(IPv6) ; type:基于 UDP的網(wǎng)

    2024年02月03日
    瀏覽(234)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包