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

基于UDP/TCP的網(wǎng)絡(luò)通信編程實(shí)現(xiàn)

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

今日雞湯

紅色是心中永不褪色的赤誠(chéng)
基于UDP/TCP的網(wǎng)絡(luò)通信編程實(shí)現(xiàn),計(jì)算機(jī)網(wǎng)絡(luò),udp,tcp/ip,網(wǎng)絡(luò),計(jì)算機(jī)網(wǎng)絡(luò),java,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò)通信

Socket套接字

操作系統(tǒng)為網(wǎng)絡(luò)編程提供了Socket api, Socket是基于TCP/IP協(xié)議的網(wǎng)絡(luò)通信的基本單元, 基于Socket的網(wǎng)絡(luò)程序開發(fā)就是網(wǎng)絡(luò)編程.

  • 由于直接與應(yīng)用層聯(lián)系的是傳輸層, 所以針對(duì)應(yīng)用層協(xié)議(TCP, UDP), Shocket提供了三種套接字, 分別是流套接字(使用TCP), 數(shù)據(jù)報(bào)套接字(使用UDP), 原始套接字
    先簡(jiǎn)單介紹一下TCP和UDP吧
  1. TCP傳輸有連接, 可靠傳輸, 面向字節(jié)流, 全雙工
    (1)有連接: 在數(shù)據(jù)轉(zhuǎn)發(fā)之前會(huì)先建立連接, 這里涉及到揮手, 之后會(huì)具體介紹
    (2)可靠傳輸: 可靠傳輸不代表一定會(huì)傳輸過去, 而是說發(fā)送方會(huì)知道是否發(fā)送成功, 如果失敗, 則會(huì)重新發(fā)送
    (3)面向字節(jié)流: 以字節(jié)為單位
    (4) 全雙工: 在發(fā)送的同時(shí)也可以作為接收方來接收數(shù)據(jù)
  2. UDP傳輸無連接, 不可靠, 面向報(bào)文段, 全雙工
    (1) 無連接: 在數(shù)據(jù)轉(zhuǎn)發(fā)之前發(fā)送方和接收方不會(huì)建立連接
    (2) 不可靠: 發(fā)送方在發(fā)送之后不會(huì)管是否被接受
    (3) 面向報(bào)文段: 發(fā)送數(shù)據(jù)以報(bào)文段為單位
    (4) 全雙工: 在發(fā)送數(shù)據(jù)的同時(shí)可以作為接收方接受數(shù)據(jù)

基于UDP來實(shí)現(xiàn)一個(gè)網(wǎng)絡(luò)通信程序

在這里要接觸到兩個(gè)類: DatagramSocket, 和DatagramPacket.

端口號(hào)用于指定區(qū)分進(jìn)程, 因此一個(gè)端口只能同時(shí)被一個(gè)進(jìn)程使用(實(shí)際上端口是被Socket對(duì)象使用), 一個(gè)進(jìn)程可以同時(shí)使用多個(gè)進(jìn)程(這里對(duì)端口號(hào)不熟悉有疑惑的同志可以先查閱了解一下端口號(hào)的作用)

當(dāng)進(jìn)程fock一個(gè)子進(jìn)程時(shí), 可以實(shí)現(xiàn)一個(gè)端口被多個(gè)進(jìn)程使用, 但是java并沒有提供fock的api

DatagramSocket類

通過DatagramSocket類創(chuàng)建的對(duì)象就是一個(gè)Socket, 操作系統(tǒng)將這個(gè)socket對(duì)象看成是一個(gè)文件, 之前普通文件對(duì)應(yīng)的硬件為硬盤, 這里的socket對(duì)應(yīng)的硬件是網(wǎng)卡, 有了socket之后就可以通過socket來操作網(wǎng)卡, 從而實(shí)現(xiàn)與其他主機(jī)的通信了.
下面看一下DatagramSocket類中的方法

  • 構(gòu)造方法
    基于UDP/TCP的網(wǎng)絡(luò)通信編程實(shí)現(xiàn),計(jì)算機(jī)網(wǎng)絡(luò),udp,tcp/ip,網(wǎng)絡(luò),計(jì)算機(jī)網(wǎng)絡(luò),java,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò)通信構(gòu)造方法無參時(shí), 會(huì)為當(dāng)前的通信線程隨機(jī)安排一個(gè)空閑端口, 指定port參數(shù)時(shí)會(huì)為當(dāng)前線程中的socket顯式綁定一個(gè)端口. 通常為服務(wù)器顯式指定一個(gè)端口, (因?yàn)榉?wù)器上的端口使用情況程序員是清楚的, 指定端口之后方便客戶端進(jìn)行訪問) 客戶端隨機(jī)分配空閑端口(因?yàn)椴淮_定當(dāng)前哪些端口空閑)

  • 發(fā)送和接收
    基于UDP/TCP的網(wǎng)絡(luò)通信編程實(shí)現(xiàn),計(jì)算機(jī)網(wǎng)絡(luò),udp,tcp/ip,網(wǎng)絡(luò),計(jì)算機(jī)網(wǎng)絡(luò),java,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò)通信這兩個(gè)方法用于客戶端表示向服務(wù)器發(fā)起請(qǐng)求, 接受來自服務(wù)器端的響應(yīng)
    這兩個(gè)方法用于服務(wù)器表示接受客戶端的請(qǐng)求, 向客戶端發(fā)起響應(yīng)

  • 關(guān)閉(釋放資源)基于UDP/TCP的網(wǎng)絡(luò)通信編程實(shí)現(xiàn),計(jì)算機(jī)網(wǎng)絡(luò),udp,tcp/ip,網(wǎng)絡(luò),計(jì)算機(jī)網(wǎng)絡(luò),java,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò)通信

DatagramPacket類

通過DatagramPacket類創(chuàng)建的對(duì)象是一個(gè)數(shù)據(jù)報(bào). UDP是面向報(bào)文段, 創(chuàng)建了DatagramPacket對(duì)象之后便可以使用數(shù)據(jù)報(bào)來進(jìn)行通信, 下面看看這個(gè)類的方法

  • 構(gòu)造方法基于UDP/TCP的網(wǎng)絡(luò)通信編程實(shí)現(xiàn),計(jì)算機(jī)網(wǎng)絡(luò),udp,tcp/ip,網(wǎng)絡(luò),計(jì)算機(jī)網(wǎng)絡(luò),java,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò)通信由構(gòu)造方法可以知道, 在創(chuàng)建數(shù)據(jù)報(bào)時(shí)可以使用緩沖區(qū)數(shù)組, 并需要指定目的ip地址和目的端口號(hào).注意這里的緩沖數(shù)組是一個(gè)空數(shù)組, 在接收到來自客戶端的報(bào)文段時(shí)會(huì)填充, 屬于輸出型參數(shù)

還有一些獲取當(dāng)前報(bào)文段內(nèi)容, 獲取當(dāng)前報(bào)文段中的源ip, 獲取當(dāng)前報(bào)文段中的源端口等就不一 一列了

基于UDP的服務(wù)器端代碼

服務(wù)器要完成三個(gè)任務(wù):

  • 接受來自客戶端的報(bào)文段(請(qǐng)求)
  • 根據(jù)請(qǐng)求來計(jì)算響應(yīng)(復(fù)雜業(yè)務(wù)邏輯)
  • 將響應(yīng)發(fā)送到客戶端
public class echoServer1 {
   
    private DatagramSocket socket = null;
    //創(chuàng)建pocket對(duì)象, 這里是服務(wù)器端, 需指定端口號(hào)
    public echoServer1(int port) throws SocketException {
   
        socket = new DatagramSocket(port);
    }
    public void start() throws IOException {
   
        System.out.println("服務(wù)器啟動(dòng): ");
        while (true){
   
        //創(chuàng)建數(shù)據(jù)報(bào), 用于接受來自客戶端的數(shù)據(jù)報(bào)
            DatagramPacket requestPacket = new DatagramPacket(new byte[1024], 1024);
            //這里的receive會(huì)陷入阻塞, 直到有數(shù)據(jù)報(bào)發(fā)過來
            socket.receive(requestPacket);
            //將數(shù)據(jù)報(bào)中的內(nèi)容轉(zhuǎn)換為字符串, 方便計(jì)算響應(yīng)
            //上面的緩沖數(shù)組不一定會(huì)填滿, 這里只獲取實(shí)際長(zhǎng)度即可(getLength)
            String request = new String(requestPacket.getData(), 0, requestPacket.getLength());
            //調(diào)用計(jì)算方法, 計(jì)算響應(yīng)
            String response = handle(request);
            //注意此處用response.getBytes().length, 而不用responsePacket.length(), 因?yàn)閞esponsePacket中可能含有漢字, 漢字轉(zhuǎn)換為byte類型之后字節(jié)個(gè)數(shù)與字符個(gè)數(shù)不一樣
            DatagramPacket responsePacket =new DatagramPacket(response.getBytes(), response.getBytes().length,
                    requestPacket.getSocketAddress());
            //將響應(yīng)發(fā)送給客戶端
            socket.send(responsePacket);
            //打印日志
            System.out.printf("[%s, %d], req: %s, resp: %s \n", requestPacket.getAddress().toString(), requestPacket.getPort(),
                    request, response);
        }
    }
    public String handle(String request){
   
    //這里的響應(yīng)只是簡(jiǎn)單的回顯, 沒有復(fù)雜的代碼邏輯
        return request;
    }
 
    public static void main(String[] args) throws IOException {
   
       //創(chuàng)建服務(wù)器對(duì)象, 指定端口為1025, 此端口號(hào)與客戶端發(fā)送請(qǐng)求時(shí)指定的端口號(hào)需一致
        echoServer1 server1 = new echoServer1(1025);
        //調(diào)用start方法, 啟動(dòng)服務(wù)器
        server1.start();
    }
}

基于UDP的客戶端代碼

客戶端要完成四個(gè)任務(wù):文章來源地址http://www.zghlxwxcb.cn/news/detail-717448.html

  • 從控制臺(tái)接收數(shù)據(jù)
  • 根據(jù)數(shù)據(jù)向服務(wù)器發(fā)送請(qǐng)求
  • 接受服務(wù)器的響應(yīng)
  • 將服務(wù)器響應(yīng)打印出來
public 

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

本文來自互聯(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)文章

  • 使用 python socket 實(shí)現(xiàn)UDP/TCP網(wǎng)絡(luò)通信

    使用 python socket 實(shí)現(xiàn)UDP/TCP網(wǎng)絡(luò)通信

    目錄 目錄 1.socket簡(jiǎn)介 2.創(chuàng)建socket 2.1創(chuàng)建UDPSocket 2.2創(chuàng)建TCPSocket 3.使用UDPSocket發(fā)送數(shù)據(jù)并接收 4.使用UDPSocket發(fā)送廣播 5.UDPSocket聊天器 (多線程實(shí)現(xiàn)消息的收發(fā)功能) 6.使用TCPSocket建立客戶端 7.使用TCPSocket建立服務(wù)端 ? ? ? ?socket(簡(jiǎn)稱:套接字),是支持TCP和UDP(網(wǎng)絡(luò)傳輸方式

    2023年04月10日
    瀏覽(24)
  • 【QT網(wǎng)絡(luò)編程】實(shí)現(xiàn)UDP協(xié)議通信

    【QT網(wǎng)絡(luò)編程】實(shí)現(xiàn)UDP協(xié)議通信

    Internet 協(xié)議集支持一個(gè)無連接的傳輸協(xié)議,該協(xié)議稱為用戶數(shù)據(jù)報(bào)協(xié)議(UDP,User Datagram Protocol)。UDP 為應(yīng)用程序提供了 一種無需建立連接就可以發(fā)送封裝的 IP 數(shù)據(jù)包的方法 。RFC 768 描述了 UDP。 UDP協(xié)議根據(jù)消息傳送模式可以分為: 單播(Unicast)、組播(Multicast)和廣播(

    2024年02月02日
    瀏覽(25)
  • 【Java】--網(wǎng)絡(luò)編程:基于TCP協(xié)議的網(wǎng)絡(luò)通信

    【Java】--網(wǎng)絡(luò)編程:基于TCP協(xié)議的網(wǎng)絡(luò)通信

    TCP協(xié)議(Transmission Control Protocol),即傳輸控制協(xié)議,是一種 面向連接 的, 可靠 的,基于 字節(jié)流 的傳輸層通信協(xié)議。數(shù)據(jù)大小無限制。 建立連接的過程需要 三次握手 。 斷開連接的過程需要 四次揮手 。 使用TCP協(xié)議的通信雙方分別為 客戶端 和 服務(wù)器端 。 客戶端負(fù)責(zé)向服務(wù)

    2024年01月23日
    瀏覽(40)
  • 網(wǎng)絡(luò)編程day2——基于TCP/IP協(xié)議的網(wǎng)絡(luò)通信

    ? ? ? ? 計(jì)算機(jī)S ? ? ? ? ? ? ? ? ? ? ? ? ????????????????????????計(jì)算機(jī)C ? ? ?創(chuàng)建socket對(duì)象 ? ? ? ? ? ? ? ? ????????????????? 創(chuàng)建socket對(duì)象 ? ? ?準(zhǔn)備通信地址(自己的ip(非公網(wǎng)ip))? ? ? 準(zhǔn)備通信地址 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (計(jì)算

    2024年02月10日
    瀏覽(40)
  • 【網(wǎng)絡(luò)編程】利用套接字實(shí)現(xiàn)一個(gè)簡(jiǎn)單的網(wǎng)絡(luò)通信(UDP實(shí)現(xiàn)聊天室 附上源碼)

    【網(wǎng)絡(luò)編程】利用套接字實(shí)現(xiàn)一個(gè)簡(jiǎn)單的網(wǎng)絡(luò)通信(UDP實(shí)現(xiàn)聊天室 附上源碼)

    源IP地址(Source IP Address): 源IP地址是數(shù)據(jù)包發(fā)送方(或數(shù)據(jù)流出發(fā)點(diǎn))的唯一標(biāo)識(shí)符。它用于在互聯(lián)網(wǎng)或本地網(wǎng)絡(luò)中定位發(fā)送數(shù)據(jù)包的設(shè)備或主機(jī)。源IP地址是數(shù)據(jù)包的出發(fā)點(diǎn),即數(shù)據(jù)從這個(gè)地址開始傳送,向目的IP地址指示的設(shè)備發(fā)送。 在TCP/IP協(xié)議中,源IP地址通常由發(fā)

    2024年02月14日
    瀏覽(25)
  • 【JavaEE】_基于UDP實(shí)現(xiàn)網(wǎng)絡(luò)通信

    【JavaEE】_基于UDP實(shí)現(xiàn)網(wǎng)絡(luò)通信

    目錄 1. 服務(wù)器 1.1?實(shí)現(xiàn)邏輯 1.2 代碼 1.3 部分代碼解釋 2. 客戶端 2.1?實(shí)現(xiàn)邏輯 2.2 代碼 2.3?客戶端部分代碼解釋 3. 程序運(yùn)行結(jié)果 4. 服務(wù)器客戶端交互邏輯 普通服務(wù)器:收到請(qǐng)求,根據(jù)請(qǐng)求計(jì)算響應(yīng),返回響應(yīng); 回顯服務(wù)器:忽略計(jì)算,直接將收到的請(qǐng)求作為響應(yīng)返回; (

    2024年01月21日
    瀏覽(20)
  • 【Qt網(wǎng)絡(luò)編程】實(shí)現(xiàn)TCP協(xié)議通信

    【Qt網(wǎng)絡(luò)編程】實(shí)現(xiàn)TCP協(xié)議通信

    傳輸控制協(xié)議(TCP,Transmission Control Protocol)是 一種面向連接的、可靠的、基于字節(jié)流的傳輸層通信協(xié)議 ,由IETF的RFC 793 定義。 TCP建立連接前,需要進(jìn)行三次握手,如下圖所示: TCP斷開連接前,需要進(jìn)行四次揮手,如下圖所示: Qt中提供了QTcpSocket類和QTcpServer類分別用于創(chuàng)

    2024年02月16日
    瀏覽(21)
  • QT網(wǎng)絡(luò)通信-TCP、UDP通信

    時(shí)間記錄:2024/1/17 pro文件添加模塊network (1)創(chuàng)建TCP服務(wù)器對(duì)象 QTcpServer (2)為 QTcpServer 對(duì)象的 newConnection 信號(hào)綁定槽,用來監(jiān)聽TCP客戶端的新連接,有新的客戶端連接便會(huì)觸發(fā)此信號(hào) (3)使用 nextPendingConnection 方法獲取連接的Tcp客戶端對(duì)象 QTcpSocket (4)為 QTcpSocket 的 r

    2024年01月18日
    瀏覽(29)
  • 「網(wǎng)絡(luò)編程」第二講:網(wǎng)絡(luò)編程socket套接字(三)_ 簡(jiǎn)單TCP網(wǎng)絡(luò)通信程序的實(shí)現(xiàn)

    「網(wǎng)絡(luò)編程」第二講:網(wǎng)絡(luò)編程socket套接字(三)_ 簡(jiǎn)單TCP網(wǎng)絡(luò)通信程序的實(shí)現(xiàn)

    「前言」文章是關(guān)于網(wǎng)絡(luò)編程的socket套接字方面的,上一篇是網(wǎng)絡(luò)編程socket套接字(二),下面開始講解!? 「歸屬專欄」網(wǎng)絡(luò)編程 「主頁鏈接」個(gè)人主頁 「筆者」楓葉先生(fy) 「楓葉先生有點(diǎn)文青病」「每篇一句」 I?do?not?know?where?to?go,but?I?have?been?on?the?road. 我不知

    2024年02月11日
    瀏覽(29)
  • 網(wǎng)絡(luò)通信(Socket/TCP/UDP)

    網(wǎng)絡(luò)通信(Socket/TCP/UDP)

    Socket(又叫套接字)是通信的基石,是支持TCP/IP協(xié)議的網(wǎng)絡(luò)通信的基本操作單元。它是網(wǎng)絡(luò)通信過程中端點(diǎn)的抽象表示,包含進(jìn)行網(wǎng)絡(luò)通信必須的五種信息:連接協(xié)議,客戶端的IP地址,客戶端的端口,服務(wù)器的IP地址,服務(wù)器的端口。 一個(gè)Socket是一對(duì)IP地址和端口。 Socket可以看

    2024年01月22日
    瀏覽(22)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包