Java基礎(網絡編程)

一、概述

目的:網絡通信:

1、設備和設備

2、進程和進程

? 1)不同設備之間

? 2)本地設備之間

需要解決的問題:

如何準確地發送到對方的主機 - IP地址 - 唯一的定位網絡中的一臺主機

如何準確的發送到對方主機的進程 - 端口

找到主機后如何可靠高效地進行數據傳輸,要能看懂 - 協議 - 規定/標準

二、網絡通信要素

如何實現網絡中的主機互相通信?

~一定的規則(即:網絡通信協議。有兩套參考模型)

? OSI參考模型

?TCP/IP參考模型(或TCP/IP協議)

~通信雙方地址

IP地址

端口號

2.1、網絡協議:

一種規則,人與人交流有語言的規則,計算機之間通過網絡交流也要有網絡的規則。

2.1.1、OSI參考模型

模型過于理想化,未能在因特網上進行廣泛推廣?

2.1.2、TCP\IP協議

?出現較早,事實上的標準。

兩種協議之間存在對應關系:

傳輸控制協議(TCP)和網絡互聯協議(IP),一組協議,不同功能互相關聯

2.1.3、TCP和UDP

TCP協議:

使用TCP協議前,須先建立TCP連接,形成傳輸數據通道;

傳輸前,采用三次握手方式,是可靠的;

TCP協議進行通信的兩個應用進程:客戶端、服務端;

在連接中可進行大數據量的傳輸;

傳輸完畢,使用四次揮手方式,釋放連接,結束傳輸,效率低。

UDP協議:

將數據、源、目的封裝成數據包,不需要建立連接;

每個數據報的大小限制在64KB內;

因無需連接,故是不可靠的;

發送數據結束時無需釋放資源,速度快。

三次握手過程:

四次揮手過程

?2.2、IP地址和端口號

2.2.1、IP地址

唯一的標識Internet上的計算機(通信實體)

分類:

IPV4:4個字節組成,4個0~255,如192.168.0.1

IPV6:128位(16個字節),寫成8個無符號整數,每個整數用四個十六進制表示

如:3ffe:3201:1401:1280:c8ff:fe4d:db39:198

2.2.2、端口號省略。。。

三、TCP編程_服務器和客戶端

目標:

1、客戶端能夠連接服務器

2、客戶端能夠給服務器發送字符串并在服務器的控制臺打印,直到發送exit表示發送結束

這里見源碼及其注釋:

import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;/*
* 服務器
* */
public class Server {public static void main(String[] args) throws IOException {//創建監聽套接字 最大端口65535ServerSocket serverSocket = new ServerSocket(60000);while (true) {//創建已連接套接字 - 返回表示有客戶端連接Socket socket = serverSocket.accept();//獲取客戶端的IP和端口System.out.println(socket.getInetAddress().getHostAddress() + ":" + socket.getPort() + "已連接");int len = 0;byte[] arr = new byte[1024];//IO操作InputStream in = socket.getInputStream();while(true) {len = in.read(arr, 0, arr.length);if(len == -1) {break;}//byte[] --> StringString s = new String(arr, 0, len);System.out.println(s);}//關閉socket.close();}}
}
package day31;import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
import java.util.Scanner;public class Client {public static void main(String[] args) throws IOException {Scanner sc = new Scanner(System.in);//創建套接字 -- 如果成功表示和服務器連接成功Socket socket = new Socket("127.0.0.1", 60000);//IO操作OutputStream out = socket.getOutputStream();while(true) {//獲取用戶輸入String s = sc.next();if(s.equals("exit")) {break;}//將輸入的數據發送給服務器out.write(s.getBytes());}//關閉socket.close();}
}

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

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

相關文章

第二屆parloo杯的RSA_Quartic_Quandary

(害,還是太菜了,上去秒了一道題之后就動不了了,今晚做個記錄,一點點的往回拾起吧) # from Crypto.Util.number import getPrime, bytes_to_long # import math # # FLAG b************** # # # def gene…

RL?_ Better Test-Time Scaling by Unifying LLM Reasoners With Verifiers

RL?: Better Test-Time Scaling by Unifying LLM Reasoners With Verifiers 在人工智能領域,大語言模型(LLM)的推理能力提升一直是研究熱點。今天要解讀的論文提出了一種全新的強化學習框架RL?,通過融合推理與驗證能力&#xf…

VS中將控制臺項目編程改為WINDOWS桌面程序

有時候因為誤操作,建立了控制臺項目,但是實際上想建立桌面程序。那么應該如何改過來呢? 一共要修改兩個地方,修改步驟如下: 第一處修改地點: 將C/C下面的預處理器選項中,將原本的_CONSOLE修改…

API Gateway REST API 集成 S3 服務自定義 404 頁面

需求分析 使用 API Gateway REST API 可以直接使用 S3 作為后端集成對外提供可以訪問的 API. 而當訪問的 URL 中存在無效的桶, 或者不存在的對象時, API Gateway 默認回向客戶端返回 200 狀態碼. 而實際上這并不是正確的響應, 本文將介紹如何自定義返回 404 錯誤頁面. 基本功…

【達夢數據庫】過程、函數、包頭和包體詳解零基礎

目錄 背景參考鏈接解釋包頭包體 背景 最近遇到關于包頭和包體的問題,學習并記錄 參考鏈接 參考鏈接: oracle的過程、函數、包頭和包體詳解零基礎 解釋 包頭主要用于定義接口,包體主要用以實現包體中聲明的存儲過程、函數等。 包頭 包體

C++字符串處理:`std::string`和`std::string_view`的區別與使用

在 C中,std::string和std::string_view都用于處理字符串,但它們的用途和性能特點有很大不同。本教程將通過代碼示例和流程圖,幫助你快速掌握它們的使用方法。 1.什么是std::string和std::string_view? 1.1std::string std::str…

Pod 節點數量

動態調整 在 Kubernetes 中,如果為量化交易系統的 Pod 設置了可伸縮(HPA / VPA / 自定義控制器),并且默認副本數是 5,那么節點數量(副本數)是否變化,主要取決于以下幾個因素。 ? …

基于OpenCV中的圖像拼接方法詳解

文章目錄 引言一、圖像拼接的基本流程二、代碼實現詳解1. 準備工作2. 特征檢測與描述detectAndDescribe 函數詳解(1)函數功能(2)代碼解析(3)為什么需要這個函數?(4)輸出數…

Java-List集合類全面解析

Java-List集合類全面解析 前言一、List接口概述與核心特性1.1 List在集合框架中的位置1.2 List的核心特性1.3 常見實現類對比 二、ArrayList源碼剖析與應用場景2.1 內部結構與初始化2.2 動態擴容機制2.3 性能特點與最佳實踐 三、LinkedList 源碼剖析與應用場景3.1 內部結構與節…

Flink 并行度的設置

在 Apache Flink 中,并行度(Parallelism) 是控制任務并發執行的核心參數之一。Flink 提供了 多個層級設置并行度的方式,優先級從高到低如下: 🧩 一、Flink 并行度的四個設置層級 層級描述設置方式Operator…

OpenCV 筆記(39):頻域中的拉普拉斯算子

1. 拉普拉斯算子 在該系列的第八篇文章中,我們曾經介紹過在二維空間拉普拉斯算子的定義為: 這是對函數 的二階偏導數之和。 2. 拉普拉斯算子的傅里葉變換及其推導 在該系列的第三十二篇文章中,我們曾給介紹過下面的公式 二維連續傅里葉變換&…

入職軟件開發與實施工程師了后........

時隔幾個月沒有創作的我又回來了,這幾個月很忙,我一直在找工作,在自考(順便還處理了一下分手的事),到處奔波,心力交瘁。可能我骨子里比較傲吧。我不愿意著急謀生,做我不愿意做的普通…

多卡跑ollama run deepseek-r1

# 設置環境變量并啟動模型 export CUDA_VISIBLE_DEVICES0,1,2,3 export OLLAMA_SCHED_SPREAD1 # 啟用多卡負載均衡 ollama run deepseek-r1:32b 若 deepseek-r1:32b 的顯存需求未超過單卡容量(如單卡 24GB),Ollama 不會自動啟用多卡 在run…

09、底層注解-@Import導入組件

09、底層注解-Import導入組件 Import是Spring框架中的一個注解,用于將組件導入到Spring的應用上下文中。以下是Import注解的詳細介紹: #### 基本用法 - **導入配置類** java Configuration public class MainConfig { // 配置內容 } Configuration Impo…

題解:P12207 [藍橋杯 2023 國 Python B] 劃分

鏈接 題目描述 給定 40 個數,請將其任意劃分成兩組,每組至少一個元素。每組的權值為組內所有元素的和。劃分的權值為兩組權值的乘積。請問對于以下 40 個數,劃分的權值最大為多少。 5160 9191 6410 4657 7492 1531 8854 1253 4520 9231126…

配置ssh服務-ubuntu到Windows拷貝文件方法

背景: 在工作中,需要頻繁從ubuntu到Windows拷貝文件,但有時間總是無法拷出,每次重啟虛擬機又比較麻煩并且效率較低。可以使用scp服務進行拷貝,不僅穩定而且高效,現將配置過程進行梳理,以供大家參…

線程池模式與C#中用法

一、線程池模式解析 1. 核心概念 線程池是一種 管理線程生命周期的技術,主要解決以下問題: 減少線程創建/銷毀開銷:復用已存在的線程 控制并發度:避免無限制創建線程導致資源耗盡 任務隊列:有序處理異步請求 2. …

設置IDEA打開新項目使用JDK17

由于最近在學習Spring-AI&#xff0c;所以JDK8已經不適用了&#xff0c;但是每次創建新項目都還是JDK8&#xff0c;每次調來調去很麻煩 把Projects和SDKs都調整為JDK17即可 同時&#xff0c;Maven也要做些更改&#xff0c;主要是添加build標簽 <build><plugins>&…

初識MySQL · 索引

目錄 前言&#xff1a; 重溫磁盤 認識索引 為什么這么做&#xff0c;怎么做 重談page 聚簇索引VS非聚簇索引 回表查詢 索引分類 前言&#xff1a; 前文我們主要是介紹了MySQL的一些基本操作&#xff0c;增刪查改一類的操作都介紹了&#xff0c;并且因為大多數情況下&am…

MySQL——7、復合查詢和表的內外連接

復合查詢和表的內外連接 1、基本查詢回顧2、多表查詢3、自連接4、子查詢4.1、單行子查詢4.2、多行子查詢4.3、多列子查詢4.4、在from子句中使用子查詢4.5、合并查詢 5、表的內連和外連5.1、內連接5.2、外連接5.2.1、左外連接5.2.2、右外連接 1、基本查詢回顧 1.1、查詢工資高于…