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

【網(wǎng)絡(luò)編程】網(wǎng)絡(luò)編程 和 Socket 套接字認(rèn)識(shí)

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

【網(wǎng)絡(luò)編程】網(wǎng)絡(luò)編程 和 Socket 套接字認(rèn)識(shí)

?個(gè)人主頁:bit me??
?當(dāng)前專欄:Java EE初階??

??一. 網(wǎng)絡(luò)編程基礎(chǔ)

??1. 為什么需要網(wǎng)絡(luò)編程?

用戶在瀏覽器中,打開在線視頻網(wǎng)站,如優(yōu)酷看視頻,實(shí)質(zhì)是通過網(wǎng)絡(luò),獲取到網(wǎng)絡(luò)上的一個(gè)視頻資源。

與本地打開視頻文件類似,只是視頻文件這個(gè)資源的來源是網(wǎng)絡(luò)。
相比本地資源來說,網(wǎng)絡(luò)提供了更為豐富的網(wǎng)絡(luò)資源:

所謂的網(wǎng)絡(luò)資源,其實(shí)就是在網(wǎng)絡(luò)中可以獲取的各種數(shù)據(jù)資源。
而所有的網(wǎng)絡(luò)資源,都是通過網(wǎng)絡(luò)編程來進(jìn)行數(shù)據(jù)傳輸?shù)摹?/p>

??2. 什么是網(wǎng)絡(luò)編程

網(wǎng)絡(luò)編程,指網(wǎng)絡(luò)上的主機(jī),通過不同的進(jìn)程,以編程的方式實(shí)現(xiàn)網(wǎng)絡(luò)通信(或稱為網(wǎng)絡(luò)數(shù)據(jù)傳輸)。

【網(wǎng)絡(luò)編程】網(wǎng)絡(luò)編程 和 Socket 套接字認(rèn)識(shí)

當(dāng)然,我們只要滿足進(jìn)程不同就行;所以即便是同一個(gè)主機(jī),只要是不同進(jìn)程,基于網(wǎng)絡(luò)來傳輸數(shù)據(jù),也屬于網(wǎng)絡(luò)編程。

特殊的,對(duì)于開發(fā)來說,在條件有限的情況下,一般也都是在一個(gè)主機(jī)中運(yùn)行多個(gè)進(jìn)程來完成網(wǎng)絡(luò)編程。

但是,我們一定要明確,我們的目的是提供網(wǎng)絡(luò)上不同主機(jī),基于網(wǎng)絡(luò)來傳輸數(shù)據(jù)資源:

  • 進(jìn)程A:編程來獲取網(wǎng)絡(luò)資源
  • 進(jìn)程B:編程來提供網(wǎng)絡(luò)資源

??3. 網(wǎng)絡(luò)編程中的基礎(chǔ)概念

  1. 網(wǎng)絡(luò)編程:寫代碼,實(shí)現(xiàn)兩個(gè) / 多個(gè)進(jìn)程,通過網(wǎng)絡(luò),來進(jìn)行相互通信。

由于進(jìn)程具有隔離性(每個(gè)進(jìn)程都有自己獨(dú)立的虛擬空間地址),進(jìn)程間通信,借助一個(gè)每個(gè)進(jìn)程都能訪問到的公共區(qū)域,完成數(shù)據(jù)交換。

網(wǎng)絡(luò)編程,也就是一種進(jìn)程間通信的方式,借助公共的區(qū)域,就是網(wǎng)卡(當(dāng)下最主流的方式,既能讓同一個(gè)主機(jī)的多個(gè)進(jìn)程間通信,也可以讓不同主機(jī)的多個(gè)進(jìn)程間通信),尤其是對(duì)于高并發(fā),分布式,大數(shù)據(jù)這樣的時(shí)代有影響。

  1. 客戶端(client) / 服務(wù)器(server)

客戶端:主動(dòng)發(fā)送網(wǎng)絡(luò)數(shù)據(jù)的一方
服務(wù)器:被動(dòng)接受網(wǎng)絡(luò)數(shù)據(jù)的一方

因?yàn)榉?wù)器無法知道客戶端啥時(shí)候發(fā)來數(shù)據(jù),因此就只能長時(shí)間運(yùn)行,甚至 7 * 24 小時(shí)運(yùn)行。

  1. 請(qǐng)求(request) / 響應(yīng)(response)

請(qǐng)求:客戶端給服務(wù)器發(fā)送的數(shù)據(jù)
響應(yīng):服務(wù)器給客戶端返回的數(shù)據(jù)

  1. 客戶端和服務(wù)器之間的交互方式
  • 一問一答(最常見的方式,比如瀏覽網(wǎng)頁)

客戶端給服務(wù)器發(fā)個(gè)請(qǐng)求,服務(wù)器給客戶端返回個(gè)響應(yīng)

  • 多問一答(更少見一些,比如上傳文件)

客戶端發(fā)多個(gè)請(qǐng)求,服務(wù)器響應(yīng)一個(gè)

  • 一問多答(還行,比如下載文件)

客戶端發(fā)一個(gè)請(qǐng)求,服務(wù)器返回多個(gè)響應(yīng)

  • 多問多答(遠(yuǎn)程控制,游戲串流…)

客戶端發(fā)送多個(gè)請(qǐng)求,服務(wù)器返回多個(gè)響應(yīng)


??二. Socket套接字

進(jìn)行網(wǎng)絡(luò)編程,需要使用 操作系統(tǒng) 提供的 網(wǎng)絡(luò)編程 API

【網(wǎng)絡(luò)編程】網(wǎng)絡(luò)編程 和 Socket 套接字認(rèn)識(shí)

網(wǎng)絡(luò)編程在應(yīng)用層進(jìn)行,就需要調(diào)用傳輸層,正是這個(gè)傳輸層,提供了 “網(wǎng)絡(luò)通信 api” ,這些 api 也叫做 socket api 。(操作系統(tǒng)提供的原生 api ,是 C 語言的。JVM 非常貼心把 C 風(fēng)格的 api 封裝了一下,變成 Java 中的面向?qū)ο箫L(fēng)格的 api)

Socket套接字,是由系統(tǒng)提供用于網(wǎng)絡(luò)通信的技術(shù),是基于TCP/IP協(xié)議的網(wǎng)絡(luò)通信的基本操作單元?;赟ocket套接字的網(wǎng)絡(luò)程序開發(fā)就是網(wǎng)絡(luò)編程。

傳輸層提供了兩個(gè)非常重要的協(xié)議:TCP / UDP。他們截然不同,這兩個(gè)協(xié)議對(duì)應(yīng)的 socket api 也是截然不同的。

流套接字使用傳輸層TCP協(xié)議

TCP,即Transmission Control Protocol(傳輸控制協(xié)議),傳輸層協(xié)議。

以下為TCP的特點(diǎn)(細(xì)節(jié)后續(xù)再講):

  • 有連接
  • 可靠傳輸
  • 面向字節(jié)流
  • 全雙工

對(duì)于字節(jié)流來說,可以簡單的理解為,傳輸數(shù)據(jù)是基于IO流,流式數(shù)據(jù)的特征就是在IO流沒有關(guān)閉的情況下,是無邊界的數(shù)據(jù),可以多次發(fā)送,也可以分開多次接收。

數(shù)據(jù)報(bào)套接字使用傳輸層UDP協(xié)議

UDP,即User Datagram Protocol(用戶數(shù)據(jù)報(bào)協(xié)議),傳輸層協(xié)議。

以下為UDP的特點(diǎn)(細(xì)節(jié)后續(xù)再講):

  • 無連接
  • 不可靠傳輸
  • 面向數(shù)據(jù)報(bào)
  • 全雙工

對(duì)于數(shù)據(jù)報(bào)來說,可以簡單的理解為,傳輸數(shù)據(jù)是一塊一塊的,發(fā)送一塊數(shù)據(jù)假如100個(gè)字節(jié),必須一次發(fā)送,接收也必須一次接收100個(gè)字節(jié),而不能分100次,每次接收1個(gè)字節(jié)。

原始套接字(了解即可):

原始套接字用于自定義傳輸層協(xié)議,用于讀寫內(nèi)核沒有處理的IP協(xié)議數(shù)據(jù)。

  • 有連接:打電話,先建立連接,然后再通信
  • 無連接:發(fā)微信,不必建立連接,直接通信即可
  • 可靠傳輸:數(shù)據(jù)對(duì)方收沒收到,發(fā)送方能夠有感知(打電話)
  • 不可靠傳輸:數(shù)據(jù)對(duì)方收沒收到,也不管,也不知道(發(fā)微信)

?
網(wǎng)絡(luò)通信是無法保證 100% 到達(dá)的(網(wǎng)線被挖掘機(jī)挖斷)

  • 面向字節(jié)流:這里的字節(jié)流和文件那里的字節(jié)流是一樣的(不光概念一樣,連代碼編寫都是一樣的)
  • 面向數(shù)據(jù)報(bào):以數(shù)據(jù)報(bào)為傳輸?shù)幕締挝?/font>
  • 全雙工:雙向通信,一個(gè)管道,能 A->B,B->A 同時(shí)進(jìn)行
  • 半雙工:單向通信,一個(gè)管道,同一時(shí)刻,要么 A->B,要么 B->A ,不能同時(shí)進(jìn)行。

??三. Socket編程注意事項(xiàng)

  1. 客戶端和服務(wù)端:開發(fā)時(shí),經(jīng)常是基于一個(gè)主機(jī)開啟兩個(gè)進(jìn)程作為客戶端和服務(wù)端,但真實(shí)的場景,一般都是不同主機(jī)。
  2. 注意目的IP和目的端口號(hào),標(biāo)識(shí)了一次數(shù)據(jù)傳輸時(shí)要發(fā)送數(shù)據(jù)的終點(diǎn)主機(jī)和進(jìn)程
  3. Socket編程我們是使用流套接字和數(shù)據(jù)報(bào)套接字,基于傳輸層的TCP或UDP協(xié)議,但應(yīng)用層協(xié)議,也需要考慮,這塊我們在后續(xù)來說明如何設(shè)計(jì)應(yīng)用層協(xié)議。
  4. 關(guān)于端口被占用的問題

如果一個(gè)進(jìn)程A已經(jīng)綁定了一個(gè)端口,再啟動(dòng)一個(gè)進(jìn)程B綁定該端口,就會(huì)報(bào)錯(cuò),這種情況也叫端
口被占用。對(duì)于java進(jìn)程來說,端口被占用的常見報(bào)錯(cuò)信息如下:

【網(wǎng)絡(luò)編程】網(wǎng)絡(luò)編程 和 Socket 套接字認(rèn)識(shí)

此時(shí)需要檢查進(jìn)程B綁定的是哪個(gè)端口,再查看該端口被哪個(gè)進(jìn)程占用。以下為通過端口號(hào)查進(jìn)程
的方式:

  • 在cmd輸入 netstat -ano | findstr 端口號(hào) ,則可以顯示對(duì)應(yīng)進(jìn)程的pid。

  • 在任務(wù)管理器中,通過pid查找進(jìn)程

解決端口被占用的問題:文章來源地址http://www.zghlxwxcb.cn/news/detail-414017.html

  • 如果占用端口的進(jìn)程A不需要運(yùn)行,就可以關(guān)閉A后,再啟動(dòng)需要綁定該端口的進(jìn)程B
  • 如果需要運(yùn)行A進(jìn)程,則可以修改進(jìn)程B的綁定端口,換為其他沒有使用的端口。

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

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(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)文章

  • [JAVAee]網(wǎng)絡(luò)編程-套接字Socket

    [JAVAee]網(wǎng)絡(luò)編程-套接字Socket

    目錄 基本概念 發(fā)送端與接收端 請(qǐng)求與響應(yīng) ?編輯客戶端與服務(wù)器 Socket套接字? 分類 數(shù)據(jù)報(bào)套接字 流套接字傳輸模型?? UDP數(shù)據(jù)報(bào)套接字編程 DatagramSocket API DatagramPacket API InetSocketAddress API 示例一: 示例二: TCP流數(shù)據(jù)報(bào)套接字編程 ServerSocket API Socket API 示例一: ? 網(wǎng)絡(luò)編程指的

    2024年02月13日
    瀏覽(126)
  • 【Python】Python 網(wǎng)絡(luò)編程 ( Socket 套接字簡介 | Socket 套接字使用步驟 | Socket 套接字服務(wù)端與客戶端開發(fā) )

    【Python】Python 網(wǎng)絡(luò)編程 ( Socket 套接字簡介 | Socket 套接字使用步驟 | Socket 套接字服務(wù)端與客戶端開發(fā) )

    Socket 套接字 是一種 進(jìn)程之間的 通信機(jī)制 , 通過套接字可以在 不同的進(jìn)程之間 進(jìn)行數(shù)據(jù)交換 ; 在 網(wǎng)絡(luò)編程 中 , Socket 套接字 主要用于 客戶端 與 服務(wù)器 之間的 通信 , 大部分 網(wǎng)絡(luò)相關(guān)的應(yīng)用程序 , 都使用到了 Socket 套接字技術(shù) ; 套接字有兩種類型 : 流套接字 : 提供了一個(gè)可

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

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

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

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

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

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

    2024年02月13日
    瀏覽(102)
  • Linux網(wǎng)絡(luò)編程- 原始套接字(Raw Socket)

    原始套接字(Raw Socket)提供了一種機(jī)制,允許應(yīng)用程序直接訪問底層傳輸協(xié)議,繞過操作系統(tǒng)提供的傳輸層接口。這種套接字通常用于實(shí)現(xiàn)新的協(xié)議或?qū)ΜF(xiàn)有協(xié)議進(jìn)行低級(jí)別的操作。 以下是對(duì)原始套接字的詳細(xì)介紹: 定義與用途 : 原始套接字是直接基于網(wǎng)絡(luò)層(如IP)的。

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

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

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

    2024年02月05日
    瀏覽(97)
  • 網(wǎng)絡(luò)編程之 Socket 套接字(使用數(shù)據(jù)報(bào)套接字和流套接字分別實(shí)現(xiàn)一個(gè)小程序(附源碼))

    網(wǎng)絡(luò)編程之 Socket 套接字(使用數(shù)據(jù)報(bào)套接字和流套接字分別實(shí)現(xiàn)一個(gè)小程序(附源碼))

    網(wǎng)絡(luò)編程是指網(wǎng)絡(luò)上的主機(jī),通過不同的進(jìn)程,以編程的方式實(shí)現(xiàn) 網(wǎng)絡(luò)通信(或稱為網(wǎng)絡(luò)數(shù)據(jù)傳輸) 只要滿足不同的進(jìn)程就可以進(jìn)行通信,所以即便是在同一個(gè)主機(jī),只要不同的進(jìn)程,基于網(wǎng)絡(luò)傳輸數(shù)據(jù),也屬于網(wǎng)絡(luò)編程 在一次網(wǎng)絡(luò)傳輸中: 發(fā)送端: 數(shù)據(jù)的 發(fā)送方進(jìn)程

    2024年02月03日
    瀏覽(84)
  • 【網(wǎng)絡(luò)編程】網(wǎng)絡(luò)編程概念,socket套接字,基于UDP和TCP的網(wǎng)絡(luò)編程

    【網(wǎng)絡(luò)編程】網(wǎng)絡(luò)編程概念,socket套接字,基于UDP和TCP的網(wǎng)絡(luò)編程

    前言: 大家好,我是 良辰丫 ,今天我們一起來學(xué)習(xí)網(wǎng)絡(luò)編程,網(wǎng)絡(luò)編程的基本概念,認(rèn)識(shí)套接字,UDP與TCP編程.?????? ??個(gè)人主頁:良辰針不戳 ??所屬專欄:javaEE初階 ??勵(lì)志語句:生活也許會(huì)讓我們遍體鱗傷,但最終這些傷口會(huì)成為我們一輩子的財(cái)富。 ??期待大家三連,關(guān)注

    2023年04月20日
    瀏覽(85)
  • 網(wǎng)絡(luò)編程day1——進(jìn)程間通信-socket套接字

    ????????基本特征:socket是一種接口技術(shù),被抽象了一種文件操作,可以讓同一計(jì)算機(jī)中的不同進(jìn)程之間通信,也可以讓不同計(jì)算機(jī)中的進(jìn)程之間通信(網(wǎng)絡(luò)通信) ? ? ? ? 進(jìn)程A? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ????????????????? 進(jìn)程B ? ? 創(chuàng)建socket對(duì)象

    2024年02月10日
    瀏覽(106)
  • 【Linux網(wǎng)絡(luò)】網(wǎng)絡(luò)編程套接字 -- 基于socket實(shí)現(xiàn)一個(gè)簡單UDP網(wǎng)絡(luò)程序

    【Linux網(wǎng)絡(luò)】網(wǎng)絡(luò)編程套接字 -- 基于socket實(shí)現(xiàn)一個(gè)簡單UDP網(wǎng)絡(luò)程序

    我們把數(shù)據(jù)從A主機(jī)發(fā)送到B主機(jī),是目的嗎?不是,真正通信的不是這兩個(gè)機(jī)器!其實(shí)是這兩臺(tái)機(jī)器上面的軟件(人) 數(shù)據(jù)有 IP(公網(wǎng)) 標(biāo)識(shí)一臺(tái)唯一的主機(jī) ,用誰來標(biāo)識(shí)各自主機(jī)上客戶或者服務(wù)進(jìn)程的唯一性呢? 為了更好的表示一臺(tái)主機(jī)上服務(wù)進(jìn)程的唯一性,我們采用 端口號(hào)

    2024年02月12日
    瀏覽(848)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包