UDP和TCP示例程序

查看自己的IP地址

以管理員身份運行cmd

輸入

ipconfig

復制圖中的IPv4地址

UDP通信程序

UdpReceiver.java

import java.net.*;public class UdpReceiver {public static void main(String[] args) {// 監聽端口(需與發送端保持一致)int listenPort = 8888;// 接收數據的緩沖區大小(這里設置為1024字節)byte[] receiveBuffer = new byte[1024];try (DatagramSocket socket = new DatagramSocket(listenPort)) {System.out.println("接收端已啟動,正在監聽端口 " + listenPort + " ...");// 創建用于接收數據的空數據報包DatagramPacket packet = new DatagramPacket(receiveBuffer, receiveBuffer.length);// 阻塞等待接收數據(程序會在此處暫停,直到收到數據)socket.receive(packet);// 解析接收到的數據String receivedMessage = new String(packet.getData(), 0, packet.getLength()  // 只取有效數據部分(避免緩沖區殘留數據干擾));// 打印發送方信息和接收內容System.out.println("收到來自 " + packet.getAddress().getHostAddress() + ":" + packet.getPort() + " 的消息:" + receivedMessage);} catch (SocketException e) {System.err.println("Socket創建失敗(可能端口被占用):" + e.getMessage());} catch (Exception e) {System.err.println("接收過程中發生異常:" + e.getMessage());}}
}

UdpSender.java

import java.net.*;public class UdpSender {public static void main(String[] args) {// 目標IP地址String targetIp = "172.18.92.212";// 目標端口(需與接收端保持一致)int targetPort = 8888;// 要發送的數據String message = "這是來自UDP發送端的測試消息!";try (DatagramSocket socket = new DatagramSocket()) {// 將字符串轉換為字節數組byte[] sendData = message.getBytes();// 創建數據報包:指定目標地址、端口和要發送的數據DatagramPacket packet = new DatagramPacket(sendData, sendData.length, InetAddress.getByName(targetIp), targetPort);// 發送數據報socket.send(packet);System.out.println("發送成功!發送內容:" + message);} catch (SocketException e) {System.err.println("Socket創建失敗:" + e.getMessage());} catch (UnknownHostException e) {System.err.println("目標IP地址解析失敗:" + e.getMessage());} catch (Exception e) {System.err.println("發送過程中發生異常:" + e.getMessage());}}
}

運行

先啟動接收端,再啟動發送端

TCP通信程序

TcpClient.java

import java.io.*;
import java.net.*;public class TcpClient {public static void main(String[] args) {// 目標服務器IPString serverIp = "172.18.92.212";// 目標服務器端口(需與服務器端保持一致)int serverPort = 9999;// 要發送的數據String message = "這是來自TCP客戶端的測試消息!";try (Socket socket = new Socket(serverIp, serverPort);OutputStream os = socket.getOutputStream();PrintWriter pw = new PrintWriter(os, true)) {  // 自動刷新緩沖區// 發送數據pw.println(message);System.out.println("客戶端已連接服務器,消息發送成功:" + message);} catch (UnknownHostException e) {System.err.println("目標服務器IP解析失敗:" + e.getMessage());} catch (ConnectException e) {System.err.println("連接失敗(可能服務器未啟動/端口錯誤):" + e.getMessage());} catch (IOException e) {System.err.println("通信過程中發生異常:" + e.getMessage());}}
}

TcpServer.java

import java.io.*;
import java.net.*;public class TcpServer {public static void main(String[] args) {// 監聽端口(需與客戶端保持一致)int listenPort = 9999;try (ServerSocket serverSocket = new ServerSocket(listenPort)) {System.out.println("服務器已啟動,正在監聽端口 " + listenPort + " ...");// 阻塞等待客戶端連接(程序會在此處暫停,直到有客戶端連接)try (Socket clientSocket = serverSocket.accept()) {  // 接收到連接后自動關閉clientSocketInetSocketAddress clientAddress = (InetSocketAddress) clientSocket.getRemoteSocketAddress();System.out.println("客戶端連接成功!客戶端地址:" + clientAddress.getAddress().getHostAddress() + ":" + clientAddress.getPort());// 獲取輸入流讀取客戶端數據InputStream is = clientSocket.getInputStream();BufferedReader br = new BufferedReader(new InputStreamReader(is));// 讀取一行數據(與客戶端的println對應)String receivedMessage = br.readLine();System.out.println("收到客戶端消息:" + receivedMessage);} catch (IOException e) {System.err.println("客戶端連接處理異常:" + e.getMessage());}} catch (IOException e) {System.err.println("服務器啟動失敗(可能端口被占用):" + e.getMessage());}}
}

運行

先啟動服務器端,再啟動客戶端

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

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

相關文章

Double使用注意事項

目錄 數據精度問題BigDecimal的正確使用構造陷阱數值比較除法舍入控制 RoundingMode 數據精度問題 Java開發中,Double類作為包裝類用于處理雙精度浮點數。浮點數double無法精確表示某些十進制小數(如0.1),導致運算結果出現誤差 …

8.2 線性變換的矩陣

一、線性變換的矩陣 本節將對每個線性變換 T T T 都指定一個矩陣 A A A. 對于一般的列向量,輸入 v \boldsymbol v v 在空間 V R n \pmb{\textrm V}\pmb{\textrm R}^n VRn 中,輸出 T ( v ) T(\boldsymbol v) T(v) 在空間 W R m \textrm{\pmb W}\…

【后端高階面經:微服務篇】5、限流實戰:高并發系統流量治理全攻略

一、限流閾值的三維度計算模型 1.1 系統容量基準線:壓測驅動的安全水位 1.1.1 壓力測試方法論 測試目標:確定系統在資源安全水位(CPU≤80%,內存≤70%,RT≤500ms)下的最大處理能力測試工具: 單機壓測:JMeter(模擬10萬并發)、wrk(低資源消耗)集群壓測:LoadRunner …

同一無線網絡下的設備IP地址是否相同?

在家庭和辦公網絡普及的今天,許多人都會好奇:連接同一個Wi-Fi的設備是否共享相同的IP地址?這個問題看似簡單,實則涉及多個角度。本文將為您揭示其中的技術奧秘。 用一個無線網IP地址一樣嗎?同一無線網絡(如…

git push出現 “HTTP 400 curl 22 The requested URL returned error: 400...“錯誤

錯誤內容是: 錯誤:RPC 失敗。HTTP 400 curl 22 The requested URL returned error: 400 send-pack: unexpected disconnect while reading sideband packet 致命錯誤:遠端意外掛斷了 檢查發現;文件大小5M,遠低于100M&a…

對WireShark 中的UDP抓包數據進行解析

對WireShark 中的UDP抓包數據進行解析 本文嘗試對 WireShark 中抓包的 UDP 數據進行解析。 但是在嘗試對 TCP 中的 FTP 數據進行解析的時候,發現除了從端口號進行區分之外, 沒有什么好的方式來進行處理。 import numpy as np import matplotlib.pyplot …

云原生安全基石:Linux進程隔離技術詳解

🔥「炎碼工坊」技術彈藥已裝填! 點擊關注 → 解鎖工業級干貨【工具實測|項目避坑|源碼燃燒指南】 一、基礎概念 進程隔離是操作系統通過內核機制將不同進程的運行環境和資源訪問范圍隔離開的技術。其核心目標在于: 資源獨占:確保…

云跡機器人底盤調用

云跡機器人底盤調用還是比較友好的,就是純socket收發指令就能實現,今天實現一個底盤移動到指定點位功能。底盤的默認IP是192.168.10.10通訊端口是31001,測試機與底盤接入統一網絡后直接發指令即可。本文給出兩種語言調用源碼,選擇…

勇闖Chromium—— Chromium的多進程架構

問題 構建一個永不崩潰或掛起的渲染引擎幾乎是不可能的,構建一個絕對安全的渲染引擎也幾乎是不可能的。 從某種程度上來說,2006 年左右的網絡瀏覽器狀態與過去單用戶、協作式多任務操作系統的狀況類似。正如在這樣的操作系統中,一個行為不端的應用程序可能導致整個系統崩潰…

MYSQL中的分庫分表及產生的分布式問題

分庫分表是分布式數據庫架構中常用的優化手段,用于解決單庫單表數據量過大、性能瓶頸等問題。其核心思想是將數據分散到多個數據庫(分庫)或多個表(分表)中,以提升系統的吞吐量、查詢性能和可擴展性。 一&am…

GAMES104 Piccolo引擎搭建配置

操作系統:windows11 家庭版 inter 17 12 th 顯卡:amd 運行內存:>12 1、如何構建? 在github下載:網址如下 https://github.com/BoomingTech/Piccolo 下載后安裝 git、vs2022 Git Visual Studio 2022 IDE - …

頁表:從虛擬內存到物理內存的轉換

目錄 引言 虛擬內存 頁表 單級頁表 頁表項 單級頁表的不足 二級頁表 四級頁表 快表TLB 結語 引言 一個系統中,CPU和內存是被所有進程共享的,而且一個系統中往往運行著多個進程。如果一個進程不小心寫了另一個進程的內存,那么被寫入…

互聯網大廠Java求職面試:短視頻平臺大規模實時互動系統架構設計

互聯網大廠Java求職面試:短視頻平臺大規模實時互動系統架構設計 面試背景介紹 技術總監(嚴肅臉): 歡迎來到我們今天的模擬面試,我是技術部的李總監,負責平臺后端架構和高可用系統設計。今天我們將圍繞一個…

網絡段、主機段、子網掩碼

子網掩碼把 IP 切割成了網絡段和主機段兩部分。同一網段下的不同主機之間可以互通網絡。 掩碼 IPV4 默認情況下 IP 地址 192.168.0.x 可以分配 256 個主機地址(不考慮首尾兩個特殊的地址時)。 假設我們只需要用到 8 個主機,就可以借助子網掩…

從零搭建SpringBoot Web 單體項目2、SpringBoot 整合數據庫

系列文章 從零搭建SpringBoot Web單體項目【基礎篇】1、IDEA搭建SpringBoot項目 從零搭建 SpringBoot Web 單體項目【基礎篇】2、SpringBoot 整合數據庫 目錄 一、項目基礎環境說明 二、數據庫整合流程 1. 添加 MyBatis-Plus 相關依賴(pom.xml) 2…

4款頂級磁力下載工具,速度提升器,可以變下變播

今天給大家帶來一些超給力的磁力下載工具,速度飛快,最高可達20MB/s,而且還能邊下邊播! 下載鏈接:夸克網盤分享(點擊藍色字體自行保存下載) 一、柚子下載 柚子下載界面干凈,沒有廣…

怎樣判斷服務器網絡質量的狀態?

服務器存儲著企業的重要數據信息,服務器的網絡質量會影響到用戶訪問數據信息的速度,也決定著網站頁面是否會出現卡頓或頁面崩潰的情況,那我們對于服務器中網絡質量的狀態該如何進行判斷呢? 服務器的網絡狀態通常是指服務器與外部網…

零基礎入門Selenium自動化測試:自動登錄edu郵箱

🌟 Selenium簡單概述一下 Selenium 是一個開源的自動化測試工具,主要用于 Web 應用程序的功能測試。它能夠模擬用戶操作瀏覽器的行為(如點擊按鈕、填寫表單、導航頁面等),應用于前端開發、測試和運維領域。 特點 跨…

day36 python神經網絡訓練

目錄 一、數據準備與預處理 二、數據集劃分與歸一化 三、構建神經網絡模型 四、定義損失函數和優化器 五、訓練模型 六、評估模型 在機器學習和深度學習的實踐中,信貸風險評估是一個非常重要的應用場景。通過構建神經網絡模型,我們可以對客戶的信用…

如何確定是不是一個bug?

在軟件測試過程中,我們經常會遇到一些異常現象,但并非所有異常都是Bug。如何準確判斷一個問題是否屬于Bug?本文將從Bug的定義、判定標準、常見誤區和實戰技巧四個方面展開,幫助測試工程師提高Bug判定的準確性。 1. Bug的定義:什么情況下算Bug? 一個Bug(缺陷)通常指軟件…