網絡編程 一

一、UDP socket api的使用

Java? ? ? ? 把系統原生的封裝了.

核心的類有兩個:

1? ?->? ?DatagramSocket

操作系統中,有一類文件,就叫socket文件.

socket文件,抽象表示了 " 網卡"這樣的硬件設備.

進行網絡通信最核心的硬件設備網卡

通過網卡發送數據,就是寫socket文件

通過網卡接收數據,就是讀socket文件

2? ?->? ?DatagramPacket

UDP面向數據報,每次發送接收數據的基本單位,就是一個UDP數據報.

表示了一個UDP數據報

二、回顯服務器

這是網絡編程中,最簡單的程序了,網絡編程的hello world

客戶端發什么請求返回什么請求

1. socket api的使用

2. 典型的客戶端服務器基本工作流程

1.1 服務器代碼

 private DatagramSocket socket = null;public UdpEchoServer(int port) throws SocketException {socket = new DatagramSocket(port);}//服務器啟動邏輯public void start() throws IOException {System.out.println("服務器啟動");while(true) {//每次循環,就是一個請求//1.讀取請求并解析DatagramPacket requestPacket = new DatagramPacket(new byte[4096],4096);socket.receive(requestPacket);//讀到的字節數組,轉成String方便后續的邏輯處理String request = new String(requestPacket.getData(),0,requestPacket.getLength());//2.根據請求計算響應String response = process(request);//3.把響應返回到客戶端//構造一個DatagramPacket 作為響應對象DatagramPacket responsePacket = new DatagramPacket(response.getBytes(),response.getBytes().length,requestPacket.getSocketAddress());socket.send(responsePacket);//打印日志System.out.printf("[%s:%d] req: %s,resp: %s\n",requestPacket.getAddress().toString(),requestPacket.getPort(),request,response);}}private String process(String request) {return request;}public static void main(String[] args) throws IOException {UdpEchoServer server = new UdpEchoServer(9090);server.start();}

1.2 客戶端代碼

 private DatagramSocket socket = null;private String serverIP;private int serverPort;public UdpEchoClient(String serverIP,int serverPort) throws SocketException {this.serverIP=serverIP;this.serverPort=serverPort;socket = new DatagramSocket();}public void start() throws IOException {System.out.println("客戶端啟動");Scanner scanner = new Scanner(System.in);while(true){System.out.print("->");if(!scanner.hasNext()){//沒有輸入就break;break;}String request = scanner.next();DatagramPacket requestPacket = new DatagramPacket(request.getBytes(),request.getBytes().length,InetAddress.getByName(serverIP),serverPort);socket.send(requestPacket);DatagramPacket responsePacket = new DatagramPacket(new byte[4096],4096);socket.receive(responsePacket);String response = new String(responsePacket.getData(),0,responsePacket.getLength());System.out.println(response);}}public static void main(String[] args) throws IOException {UdpEchoClient client = new UdpEchoClient("127.0.0.1",9090);client.start();}

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

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

相關文章

各手機品牌【短信收件箱數據庫列名】對比:inbox的column橫向對比

參考資料: https://blog.csdn.net/qq_35427437/article/details/85678647 https://www.cnblogs.com/bill-technology/p/4130917.html <font colorred>threads是存放會話的數據表&#xff0c;sms是存放短信的數據表&#xff0c;pdu是存放彩信的數據表</font> | 含義…

0基礎從前端到Web3 —— Mine Clearance Frontend(二)

在一的基礎上繼續往下&#xff0c;本篇主要是鏈上調用部分&#xff0c;讓整個項目可以進行最基本的掃雷游戲。 S u i M o v e \mathit {Sui\ Move} Sui Move 鏈上部署的自主實現的簡單掃雷游戲可以點擊查看&#xff0c;只不過這里將區域大小擴大為了 10 20 \text {10}\ \tim…

力扣Hot100-73矩陣置零(標記數組)

給定一個 m x n 的矩陣&#xff0c;如果一個元素為 0 &#xff0c;則將其所在行和列的所有元素都設為 0 。請使用 原地 算法。 示例 1&#xff1a; 輸入&#xff1a;matrix [[1,1,1],[1,0,1],[1,1,1]] 輸出&#xff1a;[[1,0,1],[0,0,0],[1,0,1]]示例 2&#xff1a; 輸入&…

大模型面試--大模型(LLMs)基礎面

大模型&#xff08;LLMs&#xff09;基礎面 1. 目前主流的開源模型體系有哪些&#xff1f; 目前主流的開源大模型體系有以下幾種&#xff1a; 1. Transformer 系列 Transformer 模型是深度學習中的一類重要模型&#xff0c;尤其在自然語言處理&#xff08;NLP&#xff09;領…

JavaWeb Sevelet學習 創建Sevelet程序

Servlet 是JavaWeb中的開發動態Web一門技術 是由Sun公司提供的一個接口&#xff0c;允許開發者編寫運行在服務器&#xff08;Tomcat&#xff09;上的Java程序&#xff0c;這些程序可以 生成動態網頁內容&#xff0c; 響應客戶端的請求。簡單來說&#xff0c;Servlet就是Java E…

今日arXiv最熱大模型論文:LoRA又有新用途,學得少忘得也少,成持續學習關鍵!

自大模型&#xff08;LLM&#xff09;誕生以來&#xff0c;苦于其高成本高消耗的訓練模式&#xff0c;學界和業界也在努力探索更為高效的參數微調方法。其中Low-Rank Adaptation&#xff08;LoRA&#xff09;自其誕生以來&#xff0c;就因其較低的資源消耗而受到廣泛關注和使用…

Spring MVC八股文面試題及參考答案(4萬字長文)

目錄 什么是Spring MVC? 解釋MVC模式及其在Spring MVC中的實現。 Spring MVC和Struts的區別是什么?

瑞芯微RV1126——交叉編譯與移植

一、搭建這個nfs服務掛載 (1) sudo apt install nfs-kernel-server (2) 然后在你的ubuntu創建一個nfs共享目錄&#xff1a; (3) sudo /etc/init.d/nfs-kernel-server restart 重啟nfs服務 (4) 修改配置文件: sudo vim /etc/exports 在這個配置文件里面添加&#xff1a;/hom…

C語言/數據結構——每日一題(設計循環隊列)

一.前言 上一次我們分享了關于隊列的基本實現——https://blog.csdn.net/yiqingaa/article/details/139033067?spm1001.2014.3001.5502 現在我們將使用隊列知識來解決問題——設計循環隊列&#xff1a;https://leetcode.cn/problems/design-circular-queue/submissions/533299…

50.WEB滲透測試-信息收集-CDN識別繞過(3)

免責聲明&#xff1a;內容僅供學習參考&#xff0c;請合法利用知識&#xff0c;禁止進行違法犯罪活動&#xff01; 內容參考于&#xff1a; 易錦網校會員專享課 上一個內容&#xff1a;49.WEB滲透測試-信息收集-CDN識別繞過&#xff08;2&#xff09; 關于cdn的識別方法內容…

Leecode熱題100--73:矩陣置零

題目&#xff1a; 給定一個 m x n 的矩陣&#xff0c;如果一個元素為 0 &#xff0c;則將其所在行和列的所有元素都設為 0 。請使用 原地 算法。 C&#xff1a; 思路&#xff1a; 可以使用兩個數組來記錄哪些行和列需要被置零。 首先&#xff0c;我們遍歷整個矩陣&#xff0c;…

設計模式--享元模式

引言 享元模式&#xff08;Flyweight Pattern&#xff09;作為一種高效節省內存的結構型設計模式&#xff0c;其核心在于通過共享技術有效支持大量細粒度對象的重用&#xff0c;從而減少內存占用&#xff0c;提高系統性能。特別是在處理大量相似對象的場景下&#xff0c;享元模…

智慧監獄人員行為識別監測系統

智慧監獄人員行為識別監測系統是基于神經網絡AI視覺智能分析算法開發的技術。智慧監獄人員行為識別監測系統利用現場監控攝像頭&#xff0c;通過對人體活動骨架的結構化分析&#xff0c;根據人體運動軌跡定義了多種異常行為&#xff0c;從而實現對監舍內的靜坐不動、離床、攀高…

Tron節點監控腳本使用說明

文章目錄 一、配置二、腳本編寫2.1 Python腳本--監控節點是否正在同步2.1.1 pyton腳本腳本示例2.1.2 使用說明2.2.3 腳本監控內容說明 2.2 Shell腳本--綜合情況監控2.2.1 shell腳本示例2.2.2 使用說明2.2.3 腳本監控內容說明 最近搭建了TRON節點&#xff0c;為了防止節點在生產…

Mixiy(米思齊)安裝

Mixiy(米思齊)安裝 官網地址&#xff1a;愛上米思齊 打開官網&#xff0c;選擇下圖的軟件進行下載 復制提取碼&#xff0c;點擊鏈接跳轉到網盤進行下載&#xff0c;選擇(RC4完整版) 下載完成后&#xff0c;解壓到合適的位置&#xff0c;進入文件夾&#xff0c;雙擊Mixly.exe即…

Docker 部署Jenkins

1、運行鏡像 docker run --namejenkins \--restartalways \--privilegedtrue \-u root \-p 8080:8080 \-p 50000:50000 \-v /home/docker/jenkins/jenkins_home:/var/jenkins_home \-v /usr/bin/docker:/usr/bin/docker \-v /var/run/docker.sock:/var/run/docker.sock \-e TZ…

【Crypto】MD5

文章目錄 MD5解題感悟 MD5 提示的很明顯MD5 小小flag&#xff0c;拿下&#xff01; 解題感悟 沒啥感悟…

Java輸入與輸出詳解

Java輸入和輸出 前言一、Java打印Hello World二、輸出到控制臺基本語法代碼示例格式化字符串 三、從鍵盤輸入讀入一個字符正確寫法 使用 Scanner 讀取字符串/整數/浮點數使用 Scanner 循環讀取 N 個數字 前言 推薦一個網站給想要了解或者學習人工智能知識的讀者&#xff0c;這…

使用 Java 和 MyBatis 實現動態排序的多表查詢

相關 java實現一個根據字段和排序方式進行排序 java實現自定義排序 自定義動態排序 前言 在Web開發中&#xff0c;前端通常會傳遞一些參數來決定數據的排序方式&#xff0c;例如排序字段和排序方向。本文將展示如何在 Java 項目中結合 MyBatis 實現動態排序&#xff0c;尤其…

MySQL-性能分析

1、數據庫服務器的優化步驟 2、查看系統性能參數 可以使用show status語句查詢一些MySQL數據庫服務器的性能參數 執行頻率語法格式&#xff1a;show [ global | session ] status like 參數 &#xff1b;常用性能參數如下所示 參數名說明connection連接MySQL服務器的次數upti…