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

Java網(wǎng)絡(luò)編程中的TCP/UDP詳解

 更新時間:2023年12月20日 08:55:38   作者:Yaaaaang194  
這篇文章主要介紹了Java網(wǎng)絡(luò)編程中的TCP/UDP詳解,網(wǎng)絡(luò)編程是指編寫運行在多個設(shè)備的程序,這些設(shè)備都通過網(wǎng)絡(luò)連接起來,java.net 包中 J2SE 的 API 包含有類和接口,它們提供低層次的通信細節(jié),需要的朋友可以參考下

Java網(wǎng)絡(luò)編程

網(wǎng)絡(luò)編程是指編寫運行在多個設(shè)備(計算機)的程序,這些設(shè)備都通過網(wǎng)絡(luò)連接起來。

java.net 包中 J2SE 的 API 包含有類和接口,它們提供低層次的通信細節(jié)。你可以直接使用這些類和接口,來專注于解決問題,而不用關(guān)注通信細節(jié)。

java.net 包中提供了兩種常見的網(wǎng)絡(luò)協(xié)議的支持:

TCP:TCP(英語:Transmission Control Protocol,傳輸控制協(xié)議) 是一種面向連接的、可靠的、基于字節(jié)流的傳輸層通信協(xié)議,TCP 層是位于 IP 層之上,應(yīng)用層之下的中間層。TCP 保障了兩個應(yīng)用程序之間的可靠通信。通常用于互聯(lián)網(wǎng)協(xié)議,被稱 TCP / IP。

UDP:UDP (英語:User Datagram Protocol,用戶數(shù)據(jù)報協(xié)議),位于 OSI 模型的傳輸層。一個無連接的協(xié)議。提供了應(yīng)用程序之間要發(fā)送數(shù)據(jù)的數(shù)據(jù)報。由于UDP缺乏可靠性且屬于無連接協(xié)議,所以應(yīng)用程序通常必須容許一些丟失、錯誤或重復(fù)的數(shù)據(jù)包。

網(wǎng)絡(luò)分層

(1)物理層 物理層處于OSI的最底層,是整個開放系統(tǒng)的基礎(chǔ)。物理層涉及通信信道上傳輸?shù)脑急忍亓鳎╞its),它的功能主要是為數(shù)據(jù)端設(shè)備提供傳送數(shù)據(jù)的通路以及傳輸數(shù)據(jù)。機房,硬件空調(diào)什么的。

(2)數(shù)據(jù)鏈路層 數(shù)據(jù)鏈路層的主要任務(wù)是實現(xiàn)計算機網(wǎng)絡(luò)中相鄰節(jié)點之間的可靠傳輸,把原始的、有差錯的物理傳輸線加上數(shù)據(jù)鏈路協(xié)議以后,構(gòu)成邏輯上可靠的數(shù)據(jù)鏈路。需要完成的功能有鏈路管理、成幀、差錯控制以及流量控制等。其中成幀是對物理層的原始比特流進行界定,數(shù)據(jù)鏈路層也能夠?qū)膩G失進行處理。交換機 雙絞線。

(3)網(wǎng)絡(luò)層 網(wǎng)絡(luò)層涉及源主機節(jié)點到目的主機節(jié)點之間可靠的網(wǎng)絡(luò)傳輸,它需要完成的功能主要包括路由選擇、網(wǎng)絡(luò)尋址、流量控制、擁塞控制、網(wǎng)絡(luò)互連等。IP,路由器。

(4)傳輸層 傳輸層起著承上啟下的作用,涉及源端節(jié)點到目的端節(jié)點之間可靠的信息傳輸。傳輸層需要解決跨越網(wǎng)絡(luò)連接的建立和釋放,對底層不可靠的網(wǎng)絡(luò),建立連接時需要三次握手,釋放連接時需要四次揮手。

(5)應(yīng)用層 應(yīng)用層為OSI的最高層,是直接為應(yīng)用進程提供服務(wù)的。其作用是在實現(xiàn)多個系統(tǒng)應(yīng)用進程相互通信的同時,完成一系列業(yè)務(wù)處理所需的服務(wù)。約定數(shù)據(jù)內(nèi)容和格式。

TCP/UDP

TCP(傳輸控制協(xié)議) TCP是面向連接的協(xié)議,因此每個TCP連接都有3個階段:連接建立、數(shù)據(jù)傳送和連接釋放。

連接建立經(jīng)歷三個步驟,通常稱為“三次握手”。

握手過程中傳送的包里不包含數(shù)據(jù),三次握手完畢后,客戶端與服務(wù)器才正式開始傳送數(shù)據(jù)。

(TCPServer)

package com.lanou.test;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
public class TCPServer {
	public static void main(String[] args) {
		//JAVA的TCP編程中,BIO模型使用一個工具實現(xiàn)TCP編程,這個工具叫做Socket,服務(wù)端叫ServerSocket,
		try {
			ServerSocket ss = new ServerSocket(65535);//這個端口號 寫死 固定的
			//這個是客戶端發(fā)送上來的鏈接,服務(wù)器使用這個鏈接做數(shù)據(jù)處理
			Socket s = ss.accept();
			//分別是兩個指針對當前聯(lián)機的輸入輸出流
			OutputStream os = s.getOutputStream();
			InputStream is = s.getInputStream();			
			//改變輸入輸出流的狀態(tài)(套一個其它流)
			PrintWriter pw = new PrintWriter(os);
			Scanner scanner = new Scanner(System.in);
			BufferedReader br = new BufferedReader(new InputStreamReader(is));
			while(true) {
				String str= scanner.nextLine();	//nextline  阻塞式代碼
				pw.println(str);
				pw.flush();
				if(str.equals("")) {
					break;
				}
				str = br.readLine();
				System.out.println("我是服務(wù)器,我收到客戶端消息" + str);
				if(str.equals("")) {
					break;
				}	
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

(TCPClient)

package com.lanou.test;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;
public class TCPClient {
	public static void main(String[] args) {
		//客戶端,直接使用Sockert工具
		try {
			Socket s = new Socket("127.0.0.1", 65535);
			// host  鏈接到那個主機上 String的參數(shù)       port端口 
			InputStream is = s.getInputStream();
			OutputStream os = s.getOutputStream();
			BufferedReader br = new BufferedReader(new InputStreamReader(is));
			PrintWriter pw = new PrintWriter(os);
			Scanner scanner = new Scanner(System.in);
			String str;
			while(!(str = br.readLine()).equals("")) {	
				System.out.println("客戶端收到"+str);
				str = scanner.nextLine();
				pw.println(str);
				pw.flush();
				if(str.equals("")) {
					break;
				}
			}
		} catch (UnknownHostException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

(UDPServer)

package com.lanou.udp;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
public class UDP {
	public static void main(String[] args) {
		//UDP是面向報文的,所以數(shù)據(jù)傳輸過程中,是不需要建立鏈接的,只要有對應(yīng)的報文,就可以指揮網(wǎng)卡去發(fā)送這個數(shù)據(jù)包
		//但是對于服務(wù)器來說,UDP雖然沒有建立鏈接,卻需要在對應(yīng)的端口上進行監(jiān)聽,否則是有問題的
		//DatagramSocket,這個類型是JAVA對于UDP實現(xiàn)的一個網(wǎng)絡(luò)套接字,當我們需要使用UDP傳輸內(nèi)容的時候,只需要創(chuàng)建一個
		//DatagramSocket,對象就可以了,不用指定這個對象是否是服務(wù)(區(qū)別TCP的ServerSocket)	
		try {
			DatagramSocket socket = new DatagramSocket(10086);
			byte[] b = new byte[1024];
			DatagramPacket p =new DatagramPacket(b, b.length);
			while(true) {
				socket.receive(p);
				b = p.getData();//拿出數(shù)據(jù) 拆開包裹
				System.out.println(new String(b));	
				System.out.println(p.getAddress() + "說 : " + new String(b));
				p.setData("你開心就好".getBytes());
				socket.send(p);
			}		
		} catch (SocketException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

(UDPClient)

package com.lanou.udp;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
import java.net.SocketAddress;
import java.net.SocketException;
public class UDPClient {
	public static void main(String[] args) {
		try {
			DatagramSocket socket = new DatagramSocket();
			String str = "我是客戶端  ";
			DatagramPacket p = new DatagramPacket(str.getBytes(), str.getBytes().length);
			p.setSocketAddress(new InetSocketAddress("127.0.0.1", 10086));
			socket.send(p);
			socket.receive(p);
			System.out.println(new String(p.getData()));
		} catch (SocketException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}		
	}
}

到此這篇關(guān)于Java網(wǎng)絡(luò)編程中的TCP/UDP詳解的文章就介紹到這了,更多相關(guān)TCP/UDP詳解內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java實現(xiàn)走迷宮回溯算法

    Java實現(xiàn)走迷宮回溯算法

    這篇文章主要為大家詳細介紹了Java實現(xiàn)走迷宮回溯算法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • Spring?Boot與Spring?MVC?Spring對比及核心概念

    Spring?Boot與Spring?MVC?Spring對比及核心概念

    這篇文章主要為大家介紹了Spring?Boot與Spring?MVC?Spring的對比以及你需要了解的核心概念,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2022-03-03
  • 聊聊springboot靜態(tài)資源加載的規(guī)則

    聊聊springboot靜態(tài)資源加載的規(guī)則

    這篇文章主要介紹了springboot靜態(tài)資源加載的規(guī)則,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • ssm項目實現(xiàn)用戶登陸持久化(token)

    ssm項目實現(xiàn)用戶登陸持久化(token)

    這篇文章主要介紹了ssm項目實現(xiàn)用戶登陸持久化(token),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • JAVA工程中引用本地jar的3種常用簡單方式

    JAVA工程中引用本地jar的3種常用簡單方式

    Jar文件的全稱是Java Archive File即Java歸檔文件,主要是對class文件進行壓縮,是一種壓縮文件,和常見的zip壓縮文件兼容,下面這篇文章主要給大家介紹了關(guān)于JAVA工程中引用本地jar的3種常用簡單方式,需要的朋友可以參考下
    2024-03-03
  • Spring?Boot集成JasperReport生成文檔的方法

    Spring?Boot集成JasperReport生成文檔的方法

    由于工作需要,要實現(xiàn)后端根據(jù)模板動態(tài)填充數(shù)據(jù)生成PDF文檔,通過技術(shù)選型,使用Ireport5.6來設(shè)計模板,結(jié)合JasperReports5.6工具庫來調(diào)用渲染生成PDF文檔,這篇文章主要介紹了Spring?Boot集成JasperReport生成文檔,需要的朋友可以參考下
    2023-09-09
  • Java通過socket客戶端保持連接服務(wù)端實現(xiàn)代碼

    Java通過socket客戶端保持連接服務(wù)端實現(xiàn)代碼

    這篇文章主要介紹了Java通過socket客戶端保持連接服務(wù)端實現(xiàn)代碼,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-11-11
  • java接口冪等性的實現(xiàn)方式

    java接口冪等性的實現(xiàn)方式

    本文介紹了在不同層面上實現(xiàn)Java接口冪等性的方法,包括使用冪等表、Nginx+Lua和Redis、以及SpringAOP,通過這些方法,可以確保接口在多次請求時只執(zhí)行一次,避免重復(fù)處理和數(shù)據(jù)不一致,每種方法都有其適用場景和優(yōu)勢,通過實際測試驗證了冪等性邏輯的有效性
    2025-01-01
  • mybatis如何批量更新list對象

    mybatis如何批量更新list對象

    這篇文章主要介紹了mybatis如何批量更新list對象問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • 關(guān)于SpringCloud中Ribbon的7種負載均衡策略解析

    關(guān)于SpringCloud中Ribbon的7種負載均衡策略解析

    這篇文章主要介紹了關(guān)于SpringCloud中Ribbon的7種負載均衡策略解析,服務(wù)端負載均衡器的問題是,它提供了更強的流量控制權(quán),但無法滿足不同的消費者希望使用不同負載均衡策略的需求,而使用不同負載均衡策略的場景確實是存在的,需要的朋友可以參考下
    2023-07-07

最新評論

镇雄县| 那坡县| 舒兰市| 兴海县| 台前县| 瑞昌市| 岳阳县| 贵定县| 托克逊县| 绵阳市| 若尔盖县| 璧山县| 华阴市| 高安市| 满洲里市| 阿拉善盟| 汉中市| 梁山县| 阿瓦提县| 湖南省| 武宣县| 平江县| 顺昌县| 青河县| 松江区| 习水县| 岢岚县| 钟祥市| 阜康市| 黑山县| 镇平县| 大新县| 林芝县| 桂阳县| 天门市| 师宗县| 白河县| 财经| 商河县| 江陵县| 沁阳市|