TCP通信

第二十一章 網絡通信

本章節主要講解的是TCP和UDP兩種通信方式它們都有著自己的優點和缺點? 這兩種通訊方式不通的地方就是TCP是一對一通信? UDP是一對多的通信方式? 接下來會一一講解

TCP通信

TCP通信方式呢 ?主要的通訊方式是一對一的通訊方式,也有著優點和缺點 ?它的優點對比于UDP來說就是可靠一點 ?因為它的通訊方式是需要先發送消息 看看客戶端是否能夠接收到消息 如果沒有回復消息的話 服務端 ?就不會發出文件 等待客戶端回復消息,這個握手模式的話 ?就會非常可靠 ?以下代碼進行講解:

客戶端代碼:
?

package tcp;import java.io.*;
import java.net.Socket;
import java.util.Scanner;/*** Socket客戶端**/
public class SocketClient {public static void main(String[] args) {Socket s = null;try {// 與ip為127.0.0.1、端口為12345的服務端建立連接s = new Socket("127.0.0.1", 12345);// 創建輸入流接收服務端發送的消息(字節流)InputStream is = s.getInputStream();// 將服務端返回的字節流轉化為字符流InputStreamReader isr = new InputStreamReader(is);// 創建字符流讀取緩沖區,方便每行讀取BufferedReader br = new BufferedReader(isr);// 創建輸出流返回消息OutputStream os = s.getOutputStream();// 創建輸出流緩沖PrintWriter pw = new PrintWriter(os);// 創建發送消息的線程Runnable rOut = () -> {boolean flag = true;while (flag) {try {// 接收控制臺輸入Scanner scan = new Scanner(System.in);String msg = scan.nextLine();// 將輸入寫入緩沖pw.println(msg);// 將緩沖內的數據推送至服務端并清空緩沖區pw.flush();} catch (Exception e) {flag = false;e.printStackTrace();}}};// 創建接收消息的線程Runnable rIn = () -> {boolean flag = true;while (flag) {try {// 逐行讀取服務端返回的消息并打印String str = br.readLine();System.out.println("服務端的消息:" + str);} catch (IOException e) {flag = false;e.printStackTrace();}}};// 啟動兩個線程Thread tOut = new Thread(rOut);Thread tIn = new Thread(rIn);tOut.start();tIn.start();}catch (IOException e) {try {// 釋放資源s.close();} catch (Exception exception) {exception.printStackTrace();}e.printStackTrace();}}
}

服務端代碼:

package tcp;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;/*** Socket服務端**/
public class SocketServer {public static void main(String[] args) {ServerSocket ss = null;Socket s = null;try {// 創建監聽端口為12345的Socket服務端ss = new ServerSocket(12345);System.out.println("服務端Socket服務已建立,等待客戶端連接...");// 通過ss.accept()開始持續監聽12345端口,當有連接時獲取收到的包裝成Socket的客戶端對象s = ss.accept();// 獲取客戶端的IP地址和端口號String ip = s.getInetAddress().getHostAddress();int port = s.getPort();System.out.println("服務端與 " + ip + ":" + port + " 已建立連接");// 創建輸入流接收客戶端發送的消息(字節流)InputStream is = s.getInputStream();// 將客戶端發送的字節流轉化為字符流InputStreamReader isr = new InputStreamReader(is);// 創建字符流讀取緩沖區,方便每行讀取BufferedReader br = new BufferedReader(isr);// 創建輸出流返回消息OutputStream os = s.getOutputStream();// 創建輸出流緩沖PrintWriter pw = new PrintWriter(os);// 創建接受信息的線程Runnable rIn = () -> {boolean flag = true;while (flag) {try {// 逐行讀取客戶端發送的消息并打印String str = br.readLine();System.out.println("客戶端的消息:" + str);} catch (IOException e) {flag = false;e.printStackTrace();}}};// 創建發送消息的線程Runnable rOut = () -> {boolean flag = true;while (flag) {try {// 接收控制臺輸入Scanner scan = new Scanner(System.in);String msg = scan.nextLine();// 將輸入寫入緩沖pw.println(msg);// 將緩沖內的數據推送至客戶端并清空緩沖區pw.flush();} catch (Exception e) {flag = false;e.printStackTrace();}}};// 開啟兩個線程Thread tIn = new Thread(rIn);Thread tOut = new Thread(rOut);tIn.start();tOut.start();} catch (IOException e) {try {// 釋放資源ss.close();s.close();} catch (Exception exception) {exception.printStackTrace();}e.printStackTrace();}}
}

服務端代碼圖已經客戶端的代碼圖:

運行結果圖如下所示:

缺點也從而發現 TCP程序是一對一的通信而如果碰到了需要發通知給好幾個的話 這樣的話需要重復這些操作這樣就會很麻煩? 所以這里就需要使用到UDP通信?一對多來通信 下一個博客將會講解UDP一對多通信

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

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

相關文章

如何在Android平板上遠程連接Ubuntu服務器使用code-server代碼開發

目錄 1.ubuntu本地安裝code-server 2. 安裝cpolar內網穿透 3. 創建隧道映射本地端口 4. 安卓平板測試訪問 5.固定域名公網地址 6.結語 1.ubuntu本地安裝code-server 準備一臺虛擬機,Ubuntu或者centos都可以,這里以VMwhere ubuntu系統為例 下載code server服務…

el-table 表格多選(后端接口搜索分頁)實現已選中的記憶功能。實現表格數據和已選數據(前端分頁)動態同步更新。

實現效果:(可拉代碼下來看:vue-demo: vueDemo) 左側表格為點擊查詢調用接口查詢出來的數據,右側表格為左側表格所有選擇的數據,由前端實現分頁。 兩個el-table勾選數據聯動更新 實現邏輯: el-…

低代碼開發到底是補品還是垃圾食品?

2023,低代碼徹底火了,甚至火到沒有點相關經驗,都不好意思出去面試的程度。 從業者對低代碼的發展充滿了想象,都認為未來低代碼的商業價值不可估量。 據Gartner的最新報告顯示,2023年全球低代碼開發技術市場規模預計將…

內部文件上傳以及渲染-接口API

文件上傳 地址http://172.16.0.118:8090/api/pm/base/affix/upload請求類型POSTContent-Type:text/plain;charsetutf-8參數 prjData {"prjId":"", "jobId":"3031b2c8-c809-4110-8e88-22c80a9c1ec0721aca89-96a1-4346-9b6e-022331d221d1Nec…

【EMNLP 2023】面向Stable Diffusion的自動Prompt工程算法BeautifulPrompt

近日,阿里云人工智能平臺PAI與華南理工大學朱金輝教授團隊合作在自然語言處理頂級會議EMNLP2023上發表了BeautifulPrompt的深度生成模型,可以從簡單的圖片描述中生成高質量的提示詞,從而使文生圖模型能夠生成更美觀的圖像。BeautifulPrompt通…

【MATLAB】MODWT分解+FFT+HHT組合算法

有意向獲取代碼,請轉文末觀看代碼獲取方式~也可轉原文鏈接獲取~ 1 基本定義 MODWT分解FFTHHT組合算法是一種綜合性的信號處理方法,它結合了經驗小波變換(Empirical Wavelet Transform,EWT)、快速傅里葉變換&#xff…

25.Oracle的回收站

oracle基礎系統學習目錄 01.CentOS7靜默安裝oracle11g 02.Oracle的啟動過程 03.從簡單的sql開始 04.Oracle的體系架構 05.Oracle數據庫對象 06.Oracle數據備份與恢復 07.用戶和權限管理 08.Oracle的表 09.Oracle表的分區 10.Oracle的同義詞與序列 11.Oracle的視圖 12.Oracle的…

愛智EdgerOS之深入解析如何應用愛智的視頻流模塊完成拉流

一、ONVIF 規范和常見視頻流傳輸協議 ① ONVIF 規范 隨著視頻監控產業鏈的成熟,市面上陸陸續續出現了各式各樣的網絡攝像設備,這些設備都需要通訊協議才能進行數據傳輸。早期廠商都采用私有協議,但是現在廠商分工明確,有的負責生…

程序員的技術成長攻略

推薦語:偶爾在公眾號看到的一篇文章,寫的非常好,在此分享給各位程序員兄弟,不光是對技術成長有幫助,其他領域也是同樣適用的!建議反復閱讀,形成一套自己的技術成長策略。 原文地址:…

數據結構與算法:python棧和隊列的用法

python的棧和隊列其實都算作一個數組,棧從最后一個元素開始推出,隊列從第一個元素開始推出 # pop(0)刪除時間復雜度O(n) s [] #棧 q [] #隊列 s.append(1)#1入棧 q.append(1)#1入隊 s.pop()#出棧 q.pop(0)#出隊由于從第一個元素刪除需要挪動數組&…

【EI會議征稿】2024年粵港澳大灣區數字經濟與人工智能國際學術會議(DEAI2024)

2024年粵港澳大灣區數字經濟與人工智能國際學術會議(DEAI2024) 2024 Guangdong-Hong Kong-Macao Greater Bay Area International Conference on Digital Economy and Artificial Intelligence(DEAI2024) 2024年粵港澳大灣區數字經濟與人工智能國際學術會議(DEAI2024)由廣東科…

探索鴻蒙 TextInput組件

TextInput 根據組件名字,可以得知他是一個文本輸出框。 聲明代碼👇 TextInput({placeholder?:ResourceStr,text?:ResourceStr}); placeholder: 就是提示文本,跟網頁開發中的placeholder一樣的 text:輸入框當前的文本內容 特殊屬…

ChatGPT的進化史

真正的人工智能可以變現的完全與人類一樣思考時,世界會發生什么變化? ChatGPT就如它的名字一樣,人類創造它最初的目的只是一個聊天機器人。聊天嘛,只要你和他對話時他的回答像人類一樣自然就行了,看起來并沒什么了不起…

Linux服務器磁盤占用過高解決思路

服務器在運行時,經常出現磁盤占用過高,可能有如下原因: 1、是否有產生過大的日志文件,或者大文件中的log過大,導致磁盤占用過高; 2、查看磁盤占用情況,分析哪個目錄中文件占比最大; …

貝蒂的搗蛋小游戲~(C語言)

引言: 前面貝蒂已經給大家介紹了選擇,循環結構~,今天貝蒂就基于這兩種結構,為大家講解一種搗蛋小游戲的設計思路和方法哦。 1.游戲要求 游戲要求: 1. 電腦?動?成1~100的隨機數 2. 玩家猜數字,猜數字的過…

52 代碼審計-PHP項目類RCE及文件包含下載刪除

目錄 漏洞關鍵字:演示案例:xhcms-無框架-文件包含跨站-搜索或應用-includeearmusic-無框架-文件下載-搜索或應用功能-down等zzzcms-無框架-文件刪除RCE-搜索或應用-unlink、eval 漏洞關鍵字: SQL注入: select insert update mysql_query mysql等 文件上傳&#xff…

【FreeRTOS】信號量——簡介、常用API函數、注意事項、項目實現

在FreeRTOS中,信號量是一種非常重要的同步機制,用于實現任務間的互斥訪問和同步操作。通過信號量,不同的任務可以安全地共享資源,避免競爭和沖突,從而確保系統的穩定性和可靠性。本篇博客將介紹FreeRTOS中信號量的基本…

常用Nmap腳本

端口掃描類腳本 Nmap是一款非常流行的端口掃描工具,它可以幫助滲透測試工程師識別目標網絡上開放的端口,并提供有關這些端口的詳細信息。Nmap還提供了一系列基于腳本的功能,這些腳本可以擴展Nmap的功能,使其能夠更深入地探測目標網…

使用Huggingface創建大語言模型RLHF訓練流程的完整教程

ChatGPT已經成為家喻戶曉的名字,而大語言模型在ChatGPT刺激下也得到了快速發展,這使得我們可以基于這些技術來改進我們的業務。 但是大語言模型像所有機器/深度學習模型一樣,從數據中學習。因此也會有garbage in garbage out的規則。也就是說…

AUTOSAR CP Int-Watchdog簡介

Int Watchdog 1 簡介2 EB 中配置 TC39X3 Wdg 在代碼中使用1 簡介 內部看門狗驅動[sws_Wdg_00161]要訪問內部看門狗硬件,對應的 Wdg 模塊實例應該直接訪問看門狗服務的硬件。提示:內部看門狗驅動程序是微控制器抽象層的一部分,它允許直接的硬件訪問。注意:內部看門狗的日常服…