最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java中Socket實(shí)現(xiàn)數(shù)據(jù)通信的示例代碼

 更新時(shí)間:2023年09月04日 09:02:04   作者:江 流 兒  
本文主要介紹了Java中Socket實(shí)現(xiàn)數(shù)據(jù)通信的示例代碼,Socket可以建立起客戶(hù)端和服務(wù)器之間的連接,實(shí)現(xiàn)數(shù)據(jù)的傳輸和交互,感興趣的可以了解一下

前言

本文主要是為下一篇Websockt做鋪墊,大家了解socket的一些實(shí)現(xiàn)。

網(wǎng)絡(luò)編程三要素

網(wǎng)絡(luò)編程是指利用計(jì)算機(jī)網(wǎng)絡(luò)進(jìn)行程序設(shè)計(jì)、開(kāi)發(fā)的技術(shù)。網(wǎng)絡(luò)編程主要包含三個(gè)要素,分別是:

  • IP地址和端口號(hào)
  • 傳輸協(xié)議
  • Socket

IP地址和端口號(hào)

在計(jì)算機(jī)網(wǎng)絡(luò)中,每臺(tái)計(jì)算機(jī)都有一個(gè)IP地址,用于唯一標(biāo)識(shí)該計(jì)算機(jī)在網(wǎng)絡(luò)中的位置。IP地址由32位二進(jìn)制數(shù)表示,通常采用點(diǎn)分十進(jìn)制表示法,如192.168.1.1。

端口號(hào)是指計(jì)算機(jī)中應(yīng)用程序與網(wǎng)絡(luò)之間進(jìn)行交互時(shí),用于標(biāo)識(shí)該應(yīng)用程序的一個(gè)標(biāo)識(shí)符。端口號(hào)是一個(gè)16位的無(wú)符號(hào)整數(shù),取值范圍為0-65535,其中0-1023為系統(tǒng)保留端口號(hào),一般用于系統(tǒng)服務(wù)。

傳輸協(xié)議

在互聯(lián)網(wǎng)中,主要有兩種傳輸協(xié)議,分別是TCP協(xié)議和UDP協(xié)議。

TCP協(xié)議是一種可靠的面向連接的傳輸協(xié)議。在TCP協(xié)議中,數(shù)據(jù)傳輸前需要先建立連接,通過(guò)三次握手進(jìn)行確認(rèn),保證數(shù)據(jù)傳輸?shù)目煽啃浴CP協(xié)議適用于對(duì)數(shù)據(jù)傳輸可靠性要求較高的應(yīng)用場(chǎng)合,如文件傳輸、電子郵件等。

UDP協(xié)議是一種不可靠的無(wú)連接傳輸協(xié)議。在UDP協(xié)議中,數(shù)據(jù)在傳輸過(guò)程中不需要建立連接,也不需要進(jìn)行數(shù)據(jù)確認(rèn)。UDP協(xié)議適用于對(duì)數(shù)據(jù)傳輸可靠性要求較低的應(yīng)用場(chǎng)合,如音視頻傳輸、在線(xiàn)游戲等。

Socket

Socket是一種通信協(xié)議,可以實(shí)現(xiàn)不同計(jì)算機(jī)之間的網(wǎng)絡(luò)通信。使用Socket開(kāi)發(fā)網(wǎng)絡(luò)應(yīng)用程序,可以實(shí)現(xiàn)客戶(hù)端與服務(wù)器之間的數(shù)據(jù)交換,比如網(wǎng)頁(yè)數(shù)據(jù)、文件傳輸?shù)?。在Java中,可以使用Socket類(lèi)實(shí)現(xiàn)TCP協(xié)議的Socket連接??蛻?hù)端通過(guò)創(chuàng)建Socket對(duì)象并指定服務(wù)端的IP地址和端口號(hào)來(lái)連接服務(wù)端。服務(wù)端通過(guò)創(chuàng)建ServerSocket對(duì)象并監(jiān)聽(tīng)客戶(hù)端的請(qǐng)求,等待客戶(hù)端連接。

使用Scoket實(shí)現(xiàn)網(wǎng)絡(luò)通信

TCP

TCP通信-發(fā)送方

public class Client {
    public static void main(String[] args) throws IOException {
        //TCP協(xié)議,發(fā)送數(shù)據(jù)
        //1.創(chuàng)建Socket對(duì)象
        //細(xì)節(jié):在創(chuàng)建對(duì)象的同時(shí)會(huì)連接服務(wù)端
        //      如果連接不上,代碼會(huì)報(bào)錯(cuò)
        Socket socket = new Socket("127.0.0.1",10000);
        //2.可以從連接通道中獲取輸出流
        OutputStream os = socket.getOutputStream();
        //寫(xiě)出數(shù)據(jù)
        os.write("aaa".getBytes());
        //3.釋放資源
        os.close();
        socket.close();
    }
}

TCP通信-接收方

public class Server {
    public static void main(String[] args) throws IOException {
        //TCP協(xié)議,接收數(shù)據(jù)
        //1.創(chuàng)建對(duì)象ServerSocker
        ServerSocket ss = new ServerSocket(10000);
        //2.監(jiān)聽(tīng)客戶(hù)端的鏈接
        Socket socket = ss.accept();
        //3.從連接通道中獲取輸入流讀取數(shù)據(jù)
        InputStream is = socket.getInputStream();
        int b;
        while ((b = is.read()) != -1){
            System.out.println((char) b);
        }
        //4.釋放資源
        socket.close();
        ss.close();
    }
}

結(jié)果

UDP

UDP通信-發(fā)送方

package com.utils;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
/**
 * @BelongsProject: CSDN_score
 * @BelongsPackage: com.utils
 * @Author:qiutianshuo
 * @Description:
 * @CreateTime: 2023-09-01 11:24
 * @Version: 1.0
 */
public class SendDemo {
    public static void main(String[] args) throws IOException {
        //創(chuàng)建發(fā)送端的Socket對(duì)象(DatagramSocket)
        // DatagramSocket() 構(gòu)造數(shù)據(jù)報(bào)套接字并將其綁定到本地主機(jī)上的任何可用端口
        DatagramSocket ds = new DatagramSocket();
        //創(chuàng)建數(shù)據(jù),并把數(shù)據(jù)打包
        //DatagramPacket(byte[] buf, int length, InetAddress address, int port)
        //構(gòu)造一個(gè)數(shù)據(jù)包,發(fā)送長(zhǎng)度為 length的數(shù)據(jù)包到指定主機(jī)上的指定端口號(hào)。
        byte[] bys = "hello,udp,我來(lái)了".getBytes();
        DatagramPacket dp = new DatagramPacket(bys,bys.length, InetAddress.getByName("127.0.0.1"),10086);
        //調(diào)用DatagramSocket對(duì)象的方法發(fā)送數(shù)據(jù)
        //void send(DatagramPacket p) 從此套接字發(fā)送數(shù)據(jù)報(bào)包
        ds.send(dp);
        //關(guān)閉發(fā)送端
        //void close() 關(guān)閉此數(shù)據(jù)報(bào)套接字
        ds.close();
    }
}

UDP通信-接收方

package com.utils;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class ReceiveMessageDemo {
    public static void main(String[] args) throws IOException {
        //接收數(shù)據(jù)
        //1.創(chuàng)建DatagramSocket對(duì)象(快遞公司)
        //細(xì)節(jié):
        //在接收的時(shí)候,一定要綁定端口
        //而且綁定的端口一定要跟發(fā)送的端口保持一致
        DatagramSocket ds = new DatagramSocket(10086);
        //2.接收數(shù)據(jù)包
        byte[] bytes = new byte[1024];
        DatagramPacket dp = new DatagramPacket(bytes,bytes.length);
        //該方法是阻塞的
        //程序執(zhí)行到這一步的時(shí)候,會(huì)在這里死等
        //等發(fā)送端發(fā)送消息
        System.out.println(11111);
        ds.receive(dp);
        System.out.println(2222);
        //3.解析數(shù)據(jù)包
        byte[] data = dp.getData();
        int len = dp.getLength();
        InetAddress address = dp.getAddress();
        int port = dp.getPort();
        System.out.println("接收到數(shù)據(jù)" + new String(data,0,len));
        System.out.println("該數(shù)據(jù)是從" + address + "這臺(tái)電腦中的" + port + "這個(gè)端口發(fā)出的");
        //4.釋放資源
        ds.close();
    }
}

結(jié)果

總結(jié)

網(wǎng)絡(luò)編程是現(xiàn)代計(jì)算機(jī)技術(shù)中非常重要的一部分,上述三要素是網(wǎng)絡(luò)編程的基礎(chǔ)。要實(shí)現(xiàn)網(wǎng)絡(luò)編程,需要了解IP地址和端口號(hào)的概念和使用,掌握TCP協(xié)議和UDP協(xié)議的特點(diǎn)和使用,以及掌握Socket編程相關(guān)知識(shí)和技能。同時(shí)在實(shí)現(xiàn)過(guò)程中也需要注意安全性問(wèn)題,例如加密數(shù)據(jù)傳輸、防止數(shù)據(jù)篡改等。

維度TCP協(xié)議UDP協(xié)議
傳輸可靠性面向連接、可靠傳輸數(shù)據(jù)無(wú)連接、不可靠傳輸數(shù)據(jù)
連接方式三次握手連接方式無(wú)連接方式
傳輸效率傳輸效率較低傳輸效率較高
數(shù)據(jù)包大小數(shù)據(jù)包大小不固定數(shù)據(jù)包大小固定
應(yīng)用場(chǎng)景適用于對(duì)數(shù)據(jù)傳輸可靠性要求較高的應(yīng)用場(chǎng)合,如文件傳輸、電子郵件等適用于對(duì)數(shù)據(jù)傳輸可靠性要求較低的應(yīng)用場(chǎng)合,如音視頻傳輸、在線(xiàn)游戲等
錯(cuò)誤檢測(cè)支持錯(cuò)誤檢測(cè)和重傳機(jī)制不支持錯(cuò)誤檢測(cè)和重傳機(jī)制
擁塞控制有擁塞控制機(jī)制,能夠避免網(wǎng)絡(luò)擁塞沒(méi)有擁塞控制機(jī)制,可能導(dǎo)致網(wǎng)絡(luò)擁塞
數(shù)據(jù)順序保證數(shù)據(jù)傳輸順序不保證數(shù)據(jù)傳輸順序
連接數(shù)量連接數(shù)量受限于系統(tǒng)內(nèi)存和處理器能力連接數(shù)量受限于系統(tǒng)內(nèi)存和處理器能力

到此這篇關(guān)于Java中Socket實(shí)現(xiàn)數(shù)據(jù)通信的示例代碼的文章就介紹到這了,更多相關(guān)Java Socket數(shù)據(jù)通信內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

  • 用java實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)

    用java實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)學(xué)生信息管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-09-09
  • SpringBoot利用隨機(jī)鹽值實(shí)現(xiàn)密碼的加密與驗(yàn)證

    SpringBoot利用隨機(jī)鹽值實(shí)現(xiàn)密碼的加密與驗(yàn)證

    這篇文章主要為大家詳細(xì)介紹了SpringBoot如何利用隨機(jī)鹽值實(shí)現(xiàn)密碼的加密與驗(yàn)證,文中的示例代碼講解詳細(xì),有需要的小伙伴可以參考下
    2024-02-02
  • Netty網(wǎng)絡(luò)編程實(shí)戰(zhàn)之搭建Netty服務(wù)器

    Netty網(wǎng)絡(luò)編程實(shí)戰(zhàn)之搭建Netty服務(wù)器

    Netty是JBOSS開(kāi)源的一款NIO網(wǎng)絡(luò)編程框架,可用于快速開(kāi)發(fā)網(wǎng)絡(luò)的應(yīng)用。Netty是一個(gè)異步的、基于事件驅(qū)動(dòng)的網(wǎng)絡(luò)應(yīng)用框架,用于快速開(kāi)發(fā)高性能的服務(wù)端和客戶(hù)端。本文將詳細(xì)說(shuō)說(shuō)如何搭建Netty服務(wù)器,需要的可以參考一下
    2022-10-10
  • Java中定時(shí)任務(wù)的6種實(shí)現(xiàn)方式

    Java中定時(shí)任務(wù)的6種實(shí)現(xiàn)方式

    這篇文章主要給大家分享的是Java中定時(shí)任務(wù)的6種實(shí)現(xiàn)方式,幾乎在所有的項(xiàng)目中,定時(shí)任務(wù)的使用都是不可或缺的,如果使用不當(dāng)甚至?xí)斐少Y損,下面文章我們就來(lái)看看Java中定時(shí)任務(wù)的具體使用方式吧
    2021-10-10
  • 小程序與后端Java接口交互實(shí)現(xiàn)HelloWorld入門(mén)

    小程序與后端Java接口交互實(shí)現(xiàn)HelloWorld入門(mén)

    本文主要介紹了小程序與后端Java接口交互實(shí)現(xiàn)HelloWorld入門(mén) ,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-07-07
  • 淺析Java中XPath和JsonPath以及SpEL的用法與對(duì)比

    淺析Java中XPath和JsonPath以及SpEL的用法與對(duì)比

    XPath,即XML路徑語(yǔ)言,是一種用于在XML文檔中查找信息的語(yǔ)言,JsonPath是從XPath中發(fā)展而來(lái)的,專(zhuān)門(mén)用于JSON數(shù)據(jù)格式,本文主要來(lái)講講他們的用法與區(qū)別,需要的可以參考下
    2023-11-11
  • Java中的包、抽象類(lèi)、接口詳解(最新整理)

    Java中的包、抽象類(lèi)、接口詳解(最新整理)

    文章介紹了Java中的包、抽象類(lèi)、接口以及實(shí)現(xiàn)多個(gè)接口的概念,包用于組織類(lèi),避免命名沖突,抽象類(lèi)用于定義不能被實(shí)例化的類(lèi),可以包含抽象方法,接口則定義了一組抽象方法,可以被類(lèi)實(shí)現(xiàn),實(shí)現(xiàn)多個(gè)接口可以實(shí)現(xiàn)類(lèi)似多繼承的效果,感興趣的朋友一起看看吧
    2025-02-02
  • Java并發(fā)編程之同步容器

    Java并發(fā)編程之同步容器

    這篇文章主要介紹了Java并發(fā)編程之同步容器,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)java的小伙伴們有很好的幫助,需要的朋友可以參考下
    2021-05-05
  • Java觀察者模式的深入了解

    Java觀察者模式的深入了解

    這篇文章主要為大家介紹了Java觀察者模式,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-01-01
  • Java實(shí)現(xiàn)生成JSON字符串的三種方式分享

    Java實(shí)現(xiàn)生成JSON字符串的三種方式分享

    這篇文章主要來(lái)和大家分享一下Java實(shí)現(xiàn)生成JSON字符串的常見(jiàn)三種方式,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,需要的可以參考一下
    2023-05-05

最新評(píng)論

新营市| 辛集市| 连平县| 津市市| 宣威市| 罗甸县| 衡山县| 瓦房店市| 正镶白旗| 大连市| 丰原市| 开平市| 亚东县| 扶沟县| 天峨县| 盈江县| 宁晋县| 株洲市| 闻喜县| 拜城县| 丹江口市| 唐海县| 晋城| 平阳县| 通城县| 临泉县| 封丘县| 子洲县| 沁源县| 育儿| 普陀区| 禹州市| 江阴市| 涞水县| 广东省| 牟定县| 朝阳区| 黑水县| 安丘市| 雷州市| 颍上县|