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

[網(wǎng)絡(luò)編程]UDP協(xié)議,基于UDP協(xié)議的回顯服務(wù)器

這篇具有很好參考價(jià)值的文章主要介紹了[網(wǎng)絡(luò)編程]UDP協(xié)議,基于UDP協(xié)議的回顯服務(wù)器。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

目錄

1.UDP協(xié)議介紹

2.UDP協(xié)議在Java中的類

2.1DatagramSocket類

2.2DatagramPacket

3.回顯服務(wù)器

3.1Sever端?

3.2Client端

1.UDP協(xié)議介紹

? UDP協(xié)議是一種網(wǎng)絡(luò)協(xié)議,它是無連接的,全雙工,并且是面向數(shù)據(jù)報(bào),不可靠的一種協(xié)議。常用于在線視頻播放,游戲這種實(shí)時(shí)性要求比較高的應(yīng)用?;蛘邿o需可靠傳輸?shù)膽?yīng)用,如DNS查詢 SNMP等。一次UDP數(shù)據(jù)報(bào)報(bào)文傳輸?shù)臄?shù)據(jù)最大為64kb,實(shí)際上,UDP因?yàn)轭^部占用八個(gè)字節(jié)。所以可傳輸?shù)木珳?zhǔn)大小為64kb-8b = 65507字節(jié)。

2.UDP協(xié)議在Java中的類

?UDP協(xié)議作為傳輸層協(xié)議,在Java中我們無需面對原生UDP協(xié)議,我們只需要調(diào)用Java封裝好的類來使用UDP協(xié)議來傳輸和接受數(shù)據(jù)即可。在Java中有兩個(gè)類,分別是DatagramSocket類和DatagramPacket類。

2.1DatagramSocket類

DatagramSocket用于創(chuàng)建Socket,綁定到端口號。它將網(wǎng)卡抽象成文件來方便程序猿來來操作。

DatagramSocket類的構(gòu)造方法:
[網(wǎng)絡(luò)編程]UDP協(xié)議,基于UDP協(xié)議的回顯服務(wù)器,網(wǎng)絡(luò),udp,服務(wù)器DatagramSocket類里的方法:

方法簽名 方法說明
void
receive(DatagramPacket p)
從此套接字接收數(shù)據(jù)報(bào)(如果沒有接收到數(shù)據(jù)報(bào),該方法會阻
塞等待)
void send(DatagramPacket
p)
從此套接字發(fā)送數(shù)據(jù)報(bào)包(不會阻塞等待,直接發(fā)送)
void close() 關(guān)閉此數(shù)據(jù)報(bào)套接字

2.2DatagramPacket

DatagramPacket是UDP Socket發(fā)送和接收的數(shù)據(jù)報(bào)

DatagramPacket的構(gòu)造方法:

方法簽名 方法說明
DatagramPacket(byte[]
buf, int length)
構(gòu)造一個(gè)DatagramPacket以用來接收數(shù)據(jù)報(bào),接收的數(shù)據(jù)保存在
字節(jié)數(shù)組(第一個(gè)參數(shù)buf)中,接收指定長度(第二個(gè)參數(shù)
length)
DatagramPacket(byte[]
buf, int offset, int length,
SocketAddress address)
構(gòu)造一個(gè)DatagramPacket以用來發(fā)送數(shù)據(jù)報(bào),發(fā)送的數(shù)據(jù)為字節(jié)
數(shù)組(第一個(gè)參數(shù)buf)中,從0到指定長度(第二個(gè)參數(shù)
length)。address指定目的主機(jī)的IP和端口號

DatagramPacket的方法:

方法簽名 方法說明
InetAddress
getAddress()
從接收的數(shù)據(jù)報(bào)中,獲取發(fā)送端主機(jī)IP地址;或從發(fā)送的數(shù)據(jù)報(bào)中,獲取
接收端主機(jī)IP地址
int getPort() 從接收的數(shù)據(jù)報(bào)中,獲取發(fā)送端主機(jī)的端口號;或從發(fā)送的數(shù)據(jù)報(bào)中,獲
取接收端主機(jī)端口號
byte[] getData() 獲取數(shù)據(jù)報(bào)中的數(shù)據(jù)

3.回顯服務(wù)器

為了方便大家理解和更好的使用UDP協(xié)議中的這兩個(gè)類來實(shí)現(xiàn)網(wǎng)絡(luò)編程,跨主機(jī)通信。

我們來寫個(gè)簡單的客戶端-服務(wù)器程序-回顯服務(wù)器,客戶端將數(shù)據(jù)發(fā)送到服務(wù)器上,服務(wù)器在返回給客戶端這個(gè)數(shù)據(jù)并且打印下來。主要目的是為了方便大家理解。

3.1Sever端?

在Sever端寫之前,我們先講明白幾件事,首先就是我們的構(gòu)造方法要不要指定端口號。答案是肯定的,因?yàn)檫@是服務(wù)器端,客戶端想要訪問它,肯定要有一個(gè)固定的地址,不然如何去訪問,所以在構(gòu)造方法中,我們直接從1024-65535這些端口號中選擇一個(gè)給綁定上。

還有就是我們的主要邏輯過程:

1.接受數(shù)據(jù)并解析

2.將這個(gè)數(shù)據(jù)進(jìn)行服務(wù)器的操作,即根據(jù)請求計(jì)算響應(yīng)。

3.將響應(yīng)返回給客戶端。

明白了這些以后,我們開始編寫代碼

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
import java.nio.charset.StandardCharsets;

public class UdpEchoSever {
    DatagramSocket socket = null;
    public UdpEchoSever (int sort) throws SocketException {
        socket = new DatagramSocket(sort);//因?yàn)槭欠?wù)器程序,所以我們要指定端口號
    }
    public void start() throws IOException {
        while (true){ //這里的while(true)是因?yàn)闀泻芏嗫蛻舳藖碓L問這個(gè)服務(wù)器,所以我們的服務(wù)器是7*24小時(shí)運(yùn)行的
            System.out.println("服務(wù)器啟動(dòng)");
            byte[] bytes = new byte[1024];
            DatagramPacket packet = new DatagramPacket(bytes,0,bytes.length); //創(chuàng)建一個(gè)數(shù)據(jù)報(bào)用來接收,這是一個(gè)輸出型參數(shù)
            socket.receive(packet); //如果沒有客戶端進(jìn)行訪問,就會進(jìn)行阻塞等待
            String request = new String(packet.getData(),0, packet.getLength()); //將這個(gè)數(shù)據(jù)報(bào)解析成字符串的形式
            String response = fun(request);
            DatagramPacket responsePacket = new DatagramPacket(response.getBytes(),response.getBytes().length,packet.getSocketAddress());
            //在構(gòu)造的時(shí)候要將數(shù)據(jù)報(bào)轉(zhuǎn)化為字符數(shù)組,并且指定IP地址和端口號發(fā)送,這里我們的IP地址和端口號,已經(jīng)被存入到,packet.getSocketAddress()里面了
            System.out.printf("[%s :%d] req:%s,resp : %s\n",responsePacket.getAddress().toString(),responsePacket.getPort(),request,response);
            socket.send(responsePacket);
        }
    }

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

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

3.2Client端

至于客戶端,我們的邏輯就是,在構(gòu)造方法里,要傳入服務(wù)器的IP地址和端口號,以方便后續(xù)使用。

至于主方法,我們的大概思路分為以下幾步
1.用戶通過控制臺輸入,并且構(gòu)造成DatagramPacket數(shù)據(jù)報(bào),此時(shí)這個(gè)類里面應(yīng)該有我們的數(shù)據(jù)和IP地址以及端口號

2.將這個(gè)數(shù)據(jù)報(bào)發(fā)送給服務(wù)器

3.從服務(wù)器拿到響應(yīng)并且解析

4.將解析的響應(yīng)打印出來

現(xiàn)在我們開始編程:

import javax.xml.ws.soap.Addressing;
import java.io.IOException;
import java.net.*;
import java.util.Scanner;

public class UdpEchoClient {
    DatagramSocket socket = null;
    int severport;
    String severIp;
    public UdpEchoClient(String severIp,int severport) throws SocketException { //在構(gòu)造方法中傳入服務(wù)器的IP地址和端口號
        socket = new DatagramSocket();
        this.severIp = severIp;
        this.severport = severport;
    }
    public void start() throws IOException {
        Scanner scanner = new Scanner(System.in);
        System.out.println("客戶端啟動(dòng)");
        while (true){
            System.out.print("->");
            if(!scanner.hasNext()){ //用戶輸入到回車等這些空字符以后就結(jié)束
                break;
            }
            String request = scanner.next();
            DatagramPacket requestPacket = new DatagramPacket(request.getBytes(),request.getBytes().length,
                    InetAddress.getByName(severIp),severport); //將數(shù)據(jù)以及IP地址(這里的IP地址是字符串,
            // 所以我們需要調(diào)用InetAddress.getByName())以及端口號也寫進(jìn)去
            socket.send(requestPacket);//發(fā)送到服務(wù)器
            byte[] bytes = new byte[1024];
            DatagramPacket responsPacket = new DatagramPacket(bytes,bytes.length);//同樣是輸出型參數(shù),所以要先有一個(gè)空的字符數(shù)組
            socket.receive(responsPacket);//接收服務(wù)器傳來的響應(yīng)
            String respons = new String(responsPacket.getData(),0,responsPacket.getLength());//將響應(yīng)轉(zhuǎn)化為字符串
            System.out.println(respons);//打印下來
        }
    }

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

我們來看看運(yùn)行結(jié)果

[網(wǎng)絡(luò)編程]UDP協(xié)議,基于UDP協(xié)議的回顯服務(wù)器,網(wǎng)絡(luò),udp,服務(wù)器

?可以看到客戶端沒有問題。我們再來看看服務(wù)器端的控制臺:

[網(wǎng)絡(luò)編程]UDP協(xié)議,基于UDP協(xié)議的回顯服務(wù)器,網(wǎng)絡(luò),udp,服務(wù)器也和我們預(yù)期的結(jié)果一樣文章來源地址http://www.zghlxwxcb.cn/news/detail-814293.html

到了這里,關(guān)于[網(wǎng)絡(luò)編程]UDP協(xié)議,基于UDP協(xié)議的回顯服務(wù)器的文章就介紹完了。如果您還想了解更多內(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)文章

  • 【網(wǎng)絡(luò)編程】(TCP流套接字編程 ServerSocket API Socket API 手寫TCP版本的回顯服務(wù)器 TCP中的長短連接)

    【網(wǎng)絡(luò)編程】(TCP流套接字編程 ServerSocket API Socket API 手寫TCP版本的回顯服務(wù)器 TCP中的長短連接)

    TCP提供的API主要是兩個(gè)類:ServerSocket 和 Socket . TCP不需要一個(gè)類來表示\\\"TCP數(shù)據(jù)報(bào)\\\"因?yàn)門CP不是以數(shù)據(jù)報(bào)為單位進(jìn)行傳輸?shù)?是以字節(jié)的方式,流式傳輸 ServerSocket API ServerSocket 是專門給服務(wù)器使用的Socket對象. ServerSocket 構(gòu)造方法: ServerSocket(int port) 創(chuàng)建一個(gè)服務(wù)端流套接字Socket,并綁

    2024年02月12日
    瀏覽(34)
  • JavaEE & UDP簡易翻譯服務(wù)器 & 網(wǎng)絡(luò)編程示例2 & CTP回顯服務(wù)器,回顯客戶端

    JavaEE & UDP簡易翻譯服務(wù)器 & 網(wǎng)絡(luò)編程示例2 & CTP回顯服務(wù)器,回顯客戶端

    禁止白嫖 T T 點(diǎn)點(diǎn)贊唄 這個(gè)翻譯器主要是在上一章的回顯服務(wù)器和回顯客戶端上進(jìn)行修改 修改了計(jì)算響應(yīng)的過程, 即process方法 1.1 重寫方法 重寫方法是Java中的一種重要手段 指在一個(gè)類的子類里,對父類的一個(gè)方法進(jìn)行重新定義! 而父類的權(quán)限級別要大于等于子類~ 【除了

    2023年04月16日
    瀏覽(47)
  • JavaEE & UDP簡易翻譯服務(wù)器 & 網(wǎng)絡(luò)編程示例2 & TCP回顯服務(wù)器,回顯客戶端

    JavaEE & UDP簡易翻譯服務(wù)器 & 網(wǎng)絡(luò)編程示例2 & TCP回顯服務(wù)器,回顯客戶端

    禁止白嫖 T T 點(diǎn)點(diǎn)贊唄 這個(gè)翻譯器主要是在上一章的回顯服務(wù)器和回顯客戶端上進(jìn)行修改 修改了計(jì)算響應(yīng)的過程, 即process方法 1.1 重寫方法 重寫方法是Java中的一種重要手段 指在一個(gè)類的子類里,對父類的一個(gè)方法進(jìn)行重新定義! 而父類的權(quán)限級別要大于等于子類~ 【除了

    2023年04月16日
    瀏覽(20)
  • 【Java 網(wǎng)絡(luò)編程】網(wǎng)絡(luò)通信原理、TCP、UDP 回顯服務(wù)

    【Java 網(wǎng)絡(luò)編程】網(wǎng)絡(luò)通信原理、TCP、UDP 回顯服務(wù)

    互聯(lián)網(wǎng)從何而來? 這要追溯到上個(gè)世紀(jì) 50 - 60 年代,當(dāng)時(shí)正逢美蘇爭霸冷戰(zhàn), 核武器 給戰(zhàn)爭雙方提供了足夠的威懾力,想要保全自己,就要保證自己的 反制手段 是有效的。 如何保證能夠反擊: 保存指揮機(jī)構(gòu) 保存核彈頭和發(fā)射井 指揮機(jī)構(gòu)和核彈頭之間的通信鏈路 需要保證

    2023年04月10日
    瀏覽(33)
  • 《TCP/IP網(wǎng)絡(luò)編程》閱讀筆記--基于UDP的服務(wù)器端/客戶端

    《TCP/IP網(wǎng)絡(luò)編程》閱讀筆記--基于UDP的服務(wù)器端/客戶端

    目錄 1--TCP和UDP的主要區(qū)別 2--基于 UDP 的數(shù)據(jù) I/O 函數(shù) 3--基于 UDP 的回聲服務(wù)器端/客戶端 4--UDP客戶端Socket的地址分配 5--UDP存在數(shù)據(jù)邊界 6--UDP已連接與未連接的設(shè)置 ① TCP 提供的是可靠數(shù)據(jù)傳輸服務(wù),而 UDP 提供的是不可靠數(shù)據(jù)傳輸服務(wù); ② UDP 在結(jié)構(gòu)上比 TCP 更簡潔,其不會

    2024年02月09日
    瀏覽(53)
  • 【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)
  • 【skynet】 網(wǎng)絡(luò)編程之回顯服務(wù)器

    skynet 提供了一套 tcp 的 API ,本文將給出簡單的回顯服務(wù)器實(shí)現(xiàn),以及講解。 拉取 skynet 工程 編譯 負(fù)責(zé)啟動(dòng) gate 服務(wù) \\\"L\\\" 表示客服端的消息前帶四字節(jié)大端序的 msg_size skynet.address(skynet.self()) 把自己設(shè)置為 watchdog ,有新連接通過 text 消息告訴自己 port TCP 監(jiān)聽端口 0 將 TCP 數(shù)據(jù)

    2024年04月25日
    瀏覽(48)
  • 【網(wǎng)絡(luò)編程】TCP流套接字編程(TCP實(shí)現(xiàn)回顯服務(wù)器)

    【網(wǎng)絡(luò)編程】TCP流套接字編程(TCP實(shí)現(xiàn)回顯服務(wù)器)

    Socket(既能給客戶端使用,也能給服務(wù)器使用) 構(gòu)造方法 基本方法: ServerSocket(只能給服務(wù)器使用) 構(gòu)造方法: 基本方法: 客戶端代碼示例: 服務(wù)器代碼示例: 運(yùn)行結(jié)果: 代碼執(zhí)行流程: 服務(wù)器啟動(dòng),阻塞在accept,等待客戶端建立連接. 客戶端啟動(dòng).這里的new操作會觸發(fā)和服務(wù)器之間建立連

    2024年04月25日
    瀏覽(23)
  • [C++ 網(wǎng)絡(luò)協(xié)議編程] UDP協(xié)議

    [C++ 網(wǎng)絡(luò)協(xié)議編程] UDP協(xié)議

    目錄 1. UDP和TCP的區(qū)別 2. UDP的工作原理 3. UDP存在數(shù)據(jù)邊界 4. UDP的I/O函數(shù) 4.1 sendto函數(shù) 4.2 recvfrom函數(shù) 4. 已連接(connected)UDP套接字和未連接(unconnected)UDP套接字 5. UDP的通信流程 5.1 服務(wù)器端通信流程 5.2 客戶端通信流程 主要區(qū)別: TCP和UDP的主要區(qū)別是,TCP具有流控制機(jī)制,而UDP沒

    2024年02月12日
    瀏覽(32)
  • 網(wǎng)絡(luò)編程(TCP與UDP協(xié)議)

    網(wǎng)絡(luò)編程(TCP與UDP協(xié)議)

    Java是 Internet 上的語言,它從語言級上提供了對網(wǎng)絡(luò)應(yīng)用程序的支持,程序員能夠很容易開發(fā)常見的網(wǎng)絡(luò)應(yīng)用程序。 Java提供的網(wǎng)絡(luò)類庫,可以實(shí)現(xiàn)無痛的網(wǎng)絡(luò)連接,聯(lián)網(wǎng)的底層細(xì)節(jié)被隱藏在 Java 的本機(jī)安裝系統(tǒng)里,由 JVM 進(jìn)行控制。并且 Java 實(shí)現(xiàn)了一個(gè)跨平臺的網(wǎng)絡(luò)庫, 程序

    2023年04月27日
    瀏覽(32)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包