TCP通訊與基于C#TCP通訊,跨窗收發消息Demo

? ? ?TCP(傳輸控制協議)是一種面向連接的、可靠的、基于字節流的傳輸層通信協議。它廣泛應用于互聯網中的數據通信,如網頁瀏覽、文件傳輸、電子郵件等。以下是TCP通信的基本概念和工作原理:

1.?TCP的特點

面向連接:通信前需建立連接,通信結束后釋放連接。

可靠性:通過確認、重傳、校驗等機制確保數據準確無誤地傳輸。

有序性:數據按發送順序到達接收方。

流量控制:通過滑動窗口機制防止接收方被發送方的數據淹沒。

擁塞控制:通過擁塞窗口和算法避免網絡擁塞。

2.?TCP通信的基本流程

  1. )建立連接(三次握手):

    • SYN:客戶端發送SYN報文(SYN=1,seq=x)請求連接。

    • SYN-ACK:服務器回復SYN-ACK報文(SYN=1,ACK=1,seq=y,ack=x+1)。

    • ACK:客戶端發送ACK報文(ACK=1,seq=x+1,ack=y+1)確認連接。

  2. )數據傳輸:

    • 連接建立后,雙方通過發送和接收數據包進行通信。

    • 每個數據包都有序列號和確認號,確保數據有序且可靠。

  3. )斷開連接(四次揮手):

    • FIN:一方發送FIN報文(FIN=1,seq=u)請求關閉連接。

    • ACK:另一方回復ACK報文(ACK=1,seq=v,ack=u+1)確認關閉請求。

    • FIN:另一方發送FIN報文(FIN=1,seq=w,ack=u+1)請求關閉連接。

    • ACK:一方回復ACK報文(ACK=1,seq=u+1,ack=w+1)確認關閉請求。

3.?TCP報文結構

TCP報文包括以下字段:

源端口和目的端口:標識通信的應用程序。

序列號(Sequence Number):標識數據字節流的順序。

確認號(Acknowledgment Number):期望收到的下一個字節的序列號。

數據偏移:TCP頭部的長度。

控制位:如SYN、ACK、FIN等,用于控制連接狀態。

窗口大小:用于流量控制。

校驗和:用于錯誤檢測。

緊急指針:標識緊急數據的位置。

4.?TCP的應用場景

HTTP/HTTPS:網頁瀏覽。

FTP:文件傳輸。

SMTP/POP3/IMAP:電子郵件。

SSH:遠程登錄。

數據庫連接:如MySQL、PostgreSQL等。

5.?TCP與UDP的區別

TCP:可靠、面向連接、有序,適合對可靠性要求高的場景。

UDP:不可靠、無連接、無序,適合對實時性要求高的場景,如視頻流、在線游戲。

6.?TCP的優缺點

優點:可靠性高,數據有序,適合長連接和大量數據傳輸。

缺點:建立和斷開連接開銷大,實時性較差。

主窗口UI

TCP窗口

調試助手

TCP與網絡助手之間的通訊

網絡助手發送消息在主窗口與TCP窗口同時顯示

主窗口與網絡助手之間的通訊

TCP窗口

1,創建字段及委托

public Socket socket = null;
public delegate void SetText(string text);//本窗口跨線程委托
public Tcp_ServerRevStr tcp_ServerRevStr;//其他窗口跨線程委托

2,創建及連接

socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//實例化Socket
IPAddress iPAddress = IPAddress.Parse("127.0.0.1");//定義要連接的IP
int port = 502;//默認Port 端口  接口
IPEndPoint iPEnd = new IPEndPoint(iPAddress, port);
try
{socket.Connect(iPEnd);//鏈接Socket
}
catch (Exception ex)
{MessageBox.Show("鏈接失敗"+ex.Message);
}
Thread th = new Thread(ReceiveDate);//另開線程接受消息
th.IsBackground = true;//后臺線程
th.Start();//開啟

3,顯示消息

//防止跨線程給界面賦值出錯
if (this.RcvText.InvokeRequired)//先判斷是否需要委托
{SetText st = new SetText(ShowText);this.Invoke(st, new object[] { text });
}
else
{this.RcvText.Text = text;
}

4,接收消息

while (true)
{byte[] resBuffer = new byte[1024 * 2];//生命最大字符內存int length = -1;//字節長度try{length = socket.Receive(resBuffer);}catch (SocketException ex){break;}catch (Exception ex){MessageBox.Show("與服務器斷開:" + ex.Message);}if (length > 0)//接收消息{try{string msg = Encoding.Default.GetString(resBuffer);ShowText(msg);tcp_ServerRevStr(msg);//其他窗口跨線程委托調用}catch (Exception ex){MessageBox.Show(ex.Message);}}}

5,發送消息

public void sendMessage(string text)
{try{byte[] buffer = Encoding.Default.GetBytes(text);socket.Send(buffer);//發送數據}catch (Exception ex){MessageBox.Show(ex.Message);}
}

FormMain窗口

1,委托

 public delegate void Tcp_ServerRevStr(string msg1);//服務端委托

2,實例化窗口

 FormTcpService formTcp = new FormTcpService();//實例化TCP窗口

3,加載窗口

  private void button1_Click(object sender, EventArgs e){formTcp.Show();formTcp.tcp_ServerRevStr   += tcpClientReceviceStr;}

4,接受并顯示消息

private void tcpClientReceviceStr(string msg)
{//跨線程接受消息Action action;action = delegate(){textBox1.Text = msg;};this.Invoke(action);
}

5,發送消息

private void btn_senMessage_Click(object sender, EventArgs e)
{formTcp.sendMessage(this.textBox2.Text);
}

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

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

相關文章

【有源碼】仿DeepSeek問答網站+SpringBoot+VUE3+對接DeepSeek API

今天帶來一款優秀的項目:仿DeepSeek問答網站。 功能和官網差不多,也有歷史上下文,流失對話等。 本文介紹了系統功能與部署安裝步驟,如果您有任何問題,也請聯系學姐,偶現在是經驗豐富的程序員! …

Ubuntu20.04雙系統安裝及軟件安裝(七):Anaconda3

Ubuntu20.04雙系統安裝及軟件安裝(七):Anaconda3 打開Anaconda官網,在右側處填寫郵箱(要真實有效!),然后Submit。會出現如圖示的Success界面。 進入填寫的郵箱,有一封Ana…

洛谷 P2142 高精度減法(詳解)c++

題目鏈接:P2142 高精度減法 - 洛谷 1.題目 2.算法原理 解法:模擬列豎式計算的過程 先用字符串讀入,然后拆分每一位,逆序放進數組中利用數組,模擬列豎式減法的過程 在這兩步之前要多加一步,在模擬解法的過程&#…

在 MyBatis 中,若數據庫字段名與 SQL 保留字沖突解決辦法

在 MyBatis 中,若數據庫字段名與 SQL 保留字沖突,可通過以下方法解決: 目錄 一、使用轉義符號包裹字段名二、通過別名映射三、借助 MyBatis-Plus 注解四、全局配置策略(輔助方案)最佳實踐與注意事項 一、使用轉義符號…

ThreadLocal解析

1. ThreadLocal的定義與核心作用 ThreadLocal是Java中用于實現線程局部變量的工具類。它為每個線程提供獨立的變量副本,使得每個線程訪問的是自己的數據,從而避免多線程環境下的資源共享問題,實現線程隔離。 例如,解決SimpleDate…

Kafka零拷貝

Kafka為什么適用零拷貝,其他存儲結構不適用? Kafka 采用的是日志存儲模型,數據通常是順序寫入、順序讀取,并且它的消費模式是 “讀完即走”(一次性讀取并發送給消費者),這與零拷貝的特性完美匹…

微服務組件詳解——sentinel

1.啟動sentinel: 下載jar sentinel-dashboard-1.8.0.jar 使用以下命令直接運行 jar 包(JDK 版本必須≥ 1.8): java -Dserver.port9999 -jar D:\sentinel-dashboard-1.8.0.jar 控制臺訪問地址:http://localhost:9999…

AI數據分析:deepseek生成SQL

在當今數據驅動的時代,數據分析已成為企業和個人決策的重要工具。隨著人工智能技術的快速發展,AI 驅動的數據分析工具正在改變我們處理和分析數據的方式。本文將著重介紹如何使用 DeepSeek 進行自動補全SQL 查詢語句。 我們都知道,SQL 查詢語…

動態規劃01背包問題系列一>目標和

目錄 題目分析及優化:狀態表示:狀態轉移方程:初始化:填表順序:返回值:代碼呈現:優化:代碼呈現: 題目分析及優化: 狀態表示: 狀態轉移方程&#xf…

Linux 基礎---sudo權限 修改文件所屬人、用戶所屬組

sudo 概念:讓普通用戶使用管理員權限執行一些操作(root) 在命令前加上sudo 即可 修改文件所屬人、所屬組

HMC7043和HMC7044芯片配置使用

一,HMC7043芯片 MC7043獨特的特性是對14個通道分別進行獨立靈活的相位管理。所有14個通道均支持頻率和相位調整。這些輸出還可針對50 Ω或100 Ω內部和外部端接選項進行編程。HMC7043器件具有RF SYNC功能,支持確定性同步多個HMC7043器件,即確保所有時鐘輸出從同一時鐘沿開始…

【動手實驗】TCP半連接隊列、全連接隊列實戰分析

本文是對 從一次線上問題說起,詳解 TCP 半連接隊列、全連接隊列 這篇文章的實驗復現和總結,借此加深對 TCP 半連接隊列、全連接隊列的理解。 實驗環境 兩臺騰訊云服務器 node2(172.19.0.12) 和 node3(172.19.0.15&am…

Springboot整合WebSocket+Redis以及微信小程序如何調用

一、 Springboot整合WebSocket 1. 引入socket依賴 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId> </dependency>引入依賴后需要刷新maven,Websocket的版本默認跟隨S…

影刀RPA開發拓展--SQL常用語句全攻略

前言 SQL&#xff08;結構化查詢語言&#xff09;是數據庫管理和操作的核心工具&#xff0c;無論是初學者還是經驗豐富的數據庫管理員&#xff0c;掌握常用的 SQL 語句對于高效管理和查詢數據都至關重要。本文將系統性地介紹最常用的 SQL 語句&#xff0c;并為每個語句提供詳細…

大模型訓練微調技術介紹

大模型訓練微調技術是人工智能領域中的一項重要技術&#xff0c;旨在通過少量特定領域的數據對預訓練模型進行進一步訓練&#xff0c;使其更好地適應具體任務或應用場景。以下是關于大模型訓練微調技術的詳細介紹&#xff1a; 1. 微調技術的定義與意義 微調&#xff08;Fine-…

生態安全相關

概念&#xff1a;生態安全指一個國家具有支撐國家生存發展的較為完整、不受威脅的生態系統&#xff0c;以及應對內外重大生態問題的能力。 &#xff08;1&#xff09;國外生態安全的研究進展 國際上對生態安全的研究是從“環境”與“安全”之間的關系展開的。開始的階段&#x…

2024年第十五屆藍橋杯大賽軟件賽省賽Python大學A組真題解析《更新中》

文章目錄 試題A: 拼正方形(本題總分:5 分)解析答案試題B: 召喚數學精靈(本題總分:5 分)解析答案試題C: 數字詩意解析答案試題D:回文數組試題A: 拼正方形(本題總分:5 分) 【問題描述】 小藍正在玩拼圖游戲,他有7385137888721 個2 2 的方塊和10470245 個1 1 的方塊,他需…

《張一鳴,創業心路與算法思維》

張一鳴&#xff0c;多年如一日的閱讀習慣。 愛讀人物傳記&#xff0c;稱教科書式人類知識最濃縮的書&#xff0c;也愛看心理學&#xff0c;創業以及商業管理類的書。 馮侖&#xff0c;王石&#xff0c;聯想&#xff0c;杰克韋爾奇&#xff0c;思科。 《喬布斯傳》《埃隆馬斯…

策略模式處理

首先&#xff0c;定義接口或抽象父類。例如&#xff0c;定義一個Strategy接口&#xff0c;里面有execute方法。然后不同的策略類實現這個接口&#xff0c;比如ConcreteStrategyA、ConcreteStrategyB等&#xff0c;每個類用Component注解&#xff0c;可能指定Bean的名字&#xf…

go程序中使用pprof增加程序監控功能

1.什么是 pprof&#xff1f; pprof 是 Go 內置的性能分析工具&#xff0c;用于生成程序運行時的性能分析數據。它可以幫助開發者分析&#xff1a; CPU 使用情況 內存分配情況 Goroutine 狀況 系統調用分析等 2. 如何使用 pprof&#xff1f; 要使用 pprof&#xff0c;首先需要在…