java socket如何請求485協議_javaSE第十五部分 網絡編程(1)Socket和ServerSocket

網絡編程基礎知識

C/S結構:全稱為Client/Server結構,是指客戶端和服務器結構。常見程序有QQ、迅雷等軟件。

B/S結構:全稱為Browser/Server結構,是指瀏覽器和服務器結構。常見瀏覽器有谷歌、火狐等。

兩種架構各有優勢,但是無論哪種架構,都離不開網絡的支持。網絡編程,就是在一定的協議下,實現兩臺計算機的通信的程序。

TCP/IP協議:傳輸控制協議/因特網互聯協議( Transmission Control Protocol/Internet Protocol),是Internet最基本、最廣泛的協議。

它定義了計算機如何連入因特網,以及數據如何在它們之間傳輸的標準。它的內部包含一系列的用于處理數據通信的協議,

并采用了4層的分層模型,每一層都呼叫它的下一層所提供的協議來完成自己的需求。

TCP/IP協議中的四層分別是應用層、傳輸層、網絡層和鏈路層,每層分別負責不同的通信功能。

鏈路層:鏈路層是用于定義物理傳輸通道,通常是對某些網絡連接設備的驅動協議,例如針對光纖、網線提供的驅動。

網絡層:網絡層是整個TCP/IP協議的核心,它主要用于將傳輸的數據進行分組,將分組數據發送到目標計算機或者網絡。

運輸層:主要使網絡程序進行通信,在進行網絡通信時,可以采用TCP協議,也可以采用UDP協議。

應用層:主要負責應用程序的協議,例如HTTP協議、FTP協議等。

java.net 包中提供了兩種常見的網絡協議的支持:UDP 和 TCP

1. UDP:用戶數據報協議(User Datagram Protocol)。UDP是無連接通信協議,即在數據傳輸時,數據的發送端和接收端不建立邏輯連接。

簡單來說,當一臺計算機向另外一臺計算機發送數據時,發送端不會確認接收端是否存在,就會發出數據,同樣接收端在收到數據時,也不會向發送端反饋是否收到數據。

由于使用UDP協議消耗資源小,通信效率高,所以通常都會用于音頻、視頻和普通數據的傳輸例如視頻會議都使用UDP協議,因為這種情況即使偶爾丟失一兩個數據包,也不會對接收結果產生太大影響。

但是在使用UDP協議傳送數據時,由于UDP的面向無連接性,不能保證數據的完整性,因此在傳輸重要數據時不建議使用UDP協議。

特點:數據被限制在64kb以內,超出這個范圍就不能發送了。

數據報(Datagram):網絡傳輸的基本單位

2. TCP:傳輸控制協議 (Transmission Control Protocol)。TCP協議是面向連接的通信協議,

即傳輸數據之前,在發送端和接收端建立邏輯連接,然后再傳輸數據,它提供了兩臺計算機之間可靠無差錯的數據傳輸。

在TCP連接中必須要明確客戶端與服務器端,由客戶端向服務端發出連接請求,每次連接的創建都需要經過“三次握手”。

三次握手:TCP協議中,在發送數據的準備階段,客戶端與服務器之間的三次交互,以保證連接的可靠。

第一次握手,客戶端向服務器端發出連接請求,等待服務器確認。

第二次握手,服務器端向客戶端回送一個響應,通知客戶端收到了連接請求。

第三次握手,客戶端再次向服務器端發送確認信息,確認連接。

完成三次握手,連接建立后,客戶端和服務器就可以開始進行數據傳輸了。由于這種面向連接的特性,TCP協議可以保證傳輸數據的安全,所以應用十分廣泛,例如下載文件、瀏覽網頁等。

3. IP地址:指互聯網協議地址(Internet Protocol Address)

IPv4:是一個32位的二進制數,通常被分為4個字節,表示成`a.b.c.d` 的形式,例如`192.168.65.100` 。其中a、b、c、d都是0~255之間的十進制整數,那么最多可以表示42億個。

IPv6:由于互聯網的蓬勃發展,IP地址的需求量愈來愈大,但是網絡地址資源有限,使得IP的分配越發緊張。

為了擴大地址空間,擬通過IPv6重新定義地址空間,采用128位地址長度,每16個字節一組,分成8組十六進制數,

表示成`ABCD:EF01:2345:6789:ABCD:EF01:2345:6789`,號稱可以為全世界的每一粒沙子編上一個網址,這樣就解決了網絡地址資源數量不夠的問題。

4. 端口號

網絡的通信,本質上是兩個進程(應用程序)的通信。每臺計算機都有很多的進程,那么在網絡通信時,如何區分這些進程呢?

如果說IP地址可以唯一標識網絡中的設備,那么端口號就可以唯一標識設備中的進程(應用程序)了。

端口號:用兩個字節表示的整數,它的取值范圍是0~65535。

其中,0~1023之間的端口號用于一些知名的網絡服務和應用,普通的應用程序需要使用1024以上的端口號。

如果端口號被另外一個服務或應用所占用,會導致當前程序啟動失敗。

利用`協議`+`IP地址`+`端口號` 三元組合,就可以標識網絡中的進程了,那么進程間的通信就可以利用這個標識與其它進程進行交互。

java實現服務端和客戶端

java中提供兩個類

1. 客戶端:`java.net.Socket` 類表示。創建`Socket`對象,向服務端發出連接請求,服務端響應請求,兩者建立連接開始通信。

2. 服務端:`java.net.ServerSocket` 類表示。創建`ServerSocket`對象,相當于開啟一個服務,并等待客戶端的連接。

Socket 類:該類實現客戶端套接字,套接字指的是兩臺設備之間通訊的端點。

構造方法:

public 

成員方法:

public 

ServerSocket類:這個類實現了服務器套接字,該對象等待通過網絡的請求。

構造方法

public 

成員方法

public 

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/542531.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/542531.shtml
英文地址,請注明出處:http://en.pswp.cn/news/542531.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【分享】linux下u盤使用

2019獨角獸企業重金招聘Python工程師標準>>> linux下u盤使用 方案一: Linux不像Windows一樣,接上新硬件后可以自動識別,在Linux下無法自動識別新硬件的,需要手動去識別。USB移動存儲設備通常被識別為sda1,…

kotlin中判斷字符串_Kotlin程序刪除字符串中所有出現的字符

kotlin中判斷字符串Given a string and a character, we have to remove all occurrences of the character in given string. 給定一個字符串和一個字符,我們必須刪除給定字符串中所有出現的字符。 Example: 例: Input:string "includeHelp Del…

Java9中使用jpa,jpa – eclipselink在Java 9上使用final字段進行靜態編織

我有一些JPA注釋字段,如下所示:Column(name "SOME_FIELD", updatable false, nullable false)private final String someField;當實體插入數據庫時??,這些字段存儲在數據庫中.它們無法進一步更新.對于Java編程語言,可以將這些字段視為final.使用Ecli…

python語言程序設計及醫學應用_Python語言程序設計(高等學校計算機專業規劃教材)...

第1章Python語言概述/1 1.1Python語言的發展1 1.1.1Python的起源1 1.1.2Python的發展2 1.2Python語言的特點2 1.2.1Python的特性2 1.2.2Python的缺點4 1.2.3Python與其他語言的比較5 1.3簡單的Python程序介紹5 1.4Python的程序開發工具8 1.4.1Python的版本選擇8 1.4.2Python的安…

swift 3.0 中使用 xib

文章寫于2016年9月底,Xcode 8,swift 3.0真是蛋疼,折騰了很長時間,試了網上很多教程,結果又莫名的可以了! 1.方法和OC中一樣 將一個xib文件和一個ViewController類進行關聯的幾步操作: command &…

數字圖像處理圖像反轉的實現_使用8086微處理器反轉16位數字

數字圖像處理圖像反轉的實現Problem statement: 問題陳述: Write an assembly language program in 8086 microprocessor to reverse 16 bit number using 8 bits operation. 在8086微處理器中編寫匯編語言程序,以使用8位操作反轉16位數字。 Example: …

php猴子找大王算法,教程方法;php實現猴子選大王問題算法實例電腦技巧-琪琪詞資源網...

琪琪詞資源網-教程方法;php實現猴子選大王問題算法實例電腦技巧,以下是給大家帶來的教程方法;php實現猴子選大王問題算法實例,大家可以了解一下哦!下面為你介紹php實現猴子選大王問題算法實例。本文實例講述了php實現猴子選大王問題算法。分享給大家供大…

numpy 歸一化_NumPy 數據歸一化、可視化

僅使用 NumPy,下載數據,歸一化,使用 seaborn 展示數據分布。下載數據import numpy as npurl https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.datawid np.genfromtxt(url, delimiter,, dtypefloat, usecols[1])僅提取…

java虛擬機規范閱讀(三)異常

Java虛擬機里面的異常使用Throwable或其子類的實例來表示,拋異常的本質實際上是程序控制權的一種即時的、非局部(Nonlocal)的轉換——從異常拋出的地方轉換至處理異常的地方。絕大多數的異常的產生都是由于當前線程執行的某個操作所導致的&am…

puppeteer api_使用Node.js和puppeteer API從URL創建PDF文件

puppeteer apiWe will continue using Node.js and puppeteer which is a node library. As we saw in our last article, Puppeteer is a Node library developed by Google and provides a high-level API for developers. 我們將繼續使用Node.js和puppeteer(這是一個節點庫)…

python線程同步鎖_[python] 線程間同步之Lock RLock

為什么需要同步 同樣舉之前的例子,兩個線程分別對同一個全局變量進行加減,得不到預期結果,代碼如下: total 0 def add(): global total for i in range(1000000): total 1 def desc(): global total for i in range(1000000): t…

servlet的由來

2019獨角獸企業重金招聘Python工程師標準>>> 動靜態網頁技術 首先說下訪問網頁的大概過程: 你在瀏覽器中輸入網址,按下enter鍵,此時瀏覽器代你做了很多事,簡要說為:將你輸入的這個網址作為目的地參數&#…

php header 文件大小,php獲取遠程文件大小及信息的函數(head_php

php獲取遠程文件大小及信息的函數(header頭信息獲取)阿里西西Alixixi.com開發團隊在做一個客戶系統時,需要做遠程下載的功能,并實時顯示進度條效果。所以,需要預先讀取遠程文件的大小信息,然后做為實時下載進度條的參數。功能函數…

Java ObjectInputStream readUnsignedShort()方法(帶示例)

ObjectInputStream類readUnsignedShort()方法 (ObjectInputStream Class readUnsignedShort() method) readUnsignedShort() method is available in java.io package. readUnsignedShort()方法在java.io包中可用。 readUnsignedShort() method is used to read 2 bytes (i.e. …

python中info的用法_Python pandas.DataFrame.info函數方法的使用

DataFrame.info(self, verboseNone, bufNone, max_colsNone, memory_usageNone, null_countsNone) [source] 打印DataFrame的簡要摘要。 此方法顯示有關DataFrame的信息,包括索引dtype和列dtype,非空值和內存使用情況。 參數:verbose &#x…

第四次作業 孫保平034 李路平029

用C編寫一個學生成績管理系統 1、可以實現以下功能&#xff1a; cout<<"〓〓〓〓〓〓〓〓〓★ ☆ 1.增加學生成績 ☆ ★〓〓〓〓〓〓〓〓〓"<<endl; 2、用鏈表存儲信息 * 程序頭部的注釋結束 3、約定的規范&#xff1a; 1界面設計簡介&#xff0c;人性化…

php serialize error at offset,PHP Notice: unserialize(): Error at offset XX of XX bytes

之前同事在本地開發的時候&#xff0c;出現一個錯誤&#xff0c;如下圖所示&#xff1a;字面意思就是反序列化錯誤&#xff0c;由此bug引申出來序列化和反序列化得應用&#xff0c;以及php array當key為string類型的數字值時&#xff0c;會發生什么情形。先來看序列化$str [1 …

Java ClassLoader setClassAssertionStatus()方法與示例

ClassLoader類setClassAssertionStatus()方法 (ClassLoader Class setClassAssertionStatus() method) setClassAssertionStatus() method is available in java.lang package. setClassAssertionStatus()方法在java.lang包中可用。 setClassAssertionStatus() method is used …

python怎么變各種顏色_python – 如何淡化顏色

有很多方法可以做到這一點.您如何選擇這取決于您是否重視速度和簡單性或感知均勻性.如果你需要它是真正統一的,你需要用顏色配置文件定義RGB顏色,你需要配置文件的原色,這樣你就可以轉換為XYZ,然后轉換到LAB,你可以操作L通道. 大多數情況下,您不需要這樣做,而是可以使用像Photo…

informatica中元數據管理

摘自&#xff1a; http://blog.itpub.net/28690368/viewspace-766528/ informaica是一個很強大的ETL工具&#xff0c;WORKFLOW MANAGER負責對ETL調度流程進行設計與管理和執行&#xff0c;informatica在資料庫中提供以下表來存儲調動流程的相關信息&#xff0c;以便WORKFLOW …