C#中TCP通信的實(shí)現(xiàn)示例
1.TCP通信的示例代碼
TCP通信過(guò)程中將通信的雙方分為服務(wù)端和客戶(hù)端,TCP通信的客戶(hù)端和服務(wù)端的主要區(qū)別在于它們的角色和行為:
服務(wù)端:
- 負(fù)責(zé)監(jiān)聽(tīng)特定的端口和IP地址。
- 等待客戶(hù)端的連接請(qǐng)求。
- 接受連接后,可以與客戶(hù)端進(jìn)行數(shù)據(jù)交換。
客戶(hù)端:
- 發(fā)起連接請(qǐng)求。
- 連接到服務(wù)端后,進(jìn)行數(shù)據(jù)交換。
服務(wù)端代碼示例:
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
class TcpServer
{
static void Main()
{
// 創(chuàng)建TCP監(jiān)聽(tīng)器
TcpListener server = new TcpListener(IPAddress.Any, 12345);
// 啟動(dòng)監(jiān)聽(tīng)
server.Start();
Console.WriteLine("服務(wù)器正在監(jiān)聽(tīng)端口 12345...");
// 接受客戶(hù)端連接
TcpClient client = server.AcceptTcpClient();
Console.WriteLine("客戶(hù)端連接成功!");
// 獲取網(wǎng)絡(luò)流
NetworkStream stream = client.GetStream();
// 讀取客戶(hù)端發(fā)送的數(shù)據(jù)
byte[] buffer = new byte[256];
int bytesRead;
while ((bytesRead = stream.Read(buffer, 0, buffer.Length)) != 0)
{
string message = Encoding.UTF8.GetString(buffer, 0, bytesRead);
Console.WriteLine("收到消息: " + message);
// 向客戶(hù)端發(fā)送回復(fù)消息
byte[] response = Encoding.UTF8.GetBytes("服務(wù)器已收到消息");
stream.Write(response, 0, response.Length);
}
// 關(guān)閉連接
client.Close();
server.Stop();
}
}
客戶(hù)端代碼示例:
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
class TcpClientExample
{
static void Main()
{
// 創(chuàng)建TCP客戶(hù)端
TcpClient client = new TcpClient();
// 連接到服務(wù)端(localhost:12345)
client.Connect("127.0.0.1", 12345);
Console.WriteLine("已連接到服務(wù)器");
// 獲取網(wǎng)絡(luò)流
NetworkStream stream = client.GetStream();
// 發(fā)送消息到服務(wù)端
string message = "你好,服務(wù)器!";
byte[] buffer = Encoding.UTF8.GetBytes(message);
stream.Write(buffer, 0, buffer.Length);
Console.WriteLine("已發(fā)送消息: " + message);
// 接收服務(wù)端的回復(fù)
buffer = new byte[256];
int bytesRead = stream.Read(buffer, 0, buffer.Length);
string response = Encoding.UTF8.GetString(buffer, 0, bytesRead);
Console.WriteLine("收到回復(fù): " + response);
// 關(guān)閉連接
client.Close();
}
}實(shí)驗(yàn)結(jié)果:

2.上位機(jī)與儀器建立連接時(shí)的角色選擇
在上位機(jī)(Host Computer)和下位機(jī)(通常是嵌入式設(shè)備或硬件設(shè)備)通信的場(chǎng)景中,通常上位機(jī)程序是指與硬件進(jìn)行通信的客戶(hù)端程序。根據(jù)這個(gè)角色,通常上位機(jī)程序會(huì)被構(gòu)建為客戶(hù)端。
為什么上位機(jī)程序通常作為客戶(hù)端構(gòu)建:
1.主動(dòng)發(fā)起連接: 上位機(jī)程序通常會(huì)主動(dòng)發(fā)起與下位機(jī)設(shè)備的連接,發(fā)送請(qǐng)求,讀取設(shè)備狀態(tài)或控制設(shè)備工作。相比之下,下位機(jī)設(shè)備通常只是等待來(lái)自上位機(jī)的連接請(qǐng)求,因此它們的角色通常是服務(wù)器。
2.監(jiān)控與控制: 上位機(jī)一般負(fù)責(zé)監(jiān)控多個(gè)下位機(jī)設(shè)備,獲取數(shù)據(jù),發(fā)出控制指令,或者對(duì)設(shè)備進(jìn)行配置和調(diào)整。它們通常是用戶(hù)操作的地方。
3.功能需求: 上位機(jī)程序通常需要提供豐富的用戶(hù)界面(UI)、數(shù)據(jù)處理能力、報(bào)告生成和數(shù)據(jù)存儲(chǔ)等功能。這些功能要求它作為客戶(hù)端與服務(wù)器(即下位機(jī))進(jìn)行通信,進(jìn)行數(shù)據(jù)收發(fā)。
到此這篇關(guān)于C#中TCP通信的實(shí)現(xiàn)示例的文章就介紹到這了,更多相關(guān)C# TCP通信內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C#之Expression表達(dá)式樹(shù)實(shí)例
這篇文章主要介紹了C#之Expression表達(dá)式樹(shù),包括了表達(dá)式樹(shù)的原理與用法技巧,需要的朋友可以參考下2014-10-10
Unity3D實(shí)現(xiàn)分頁(yè)系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了Unity3D實(shí)現(xiàn)分頁(yè)系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-04-04
c# 實(shí)現(xiàn)網(wǎng)頁(yè)加載后將頁(yè)面截取為長(zhǎng)圖片
這篇文章主要介紹了c# 實(shí)現(xiàn)網(wǎng)頁(yè)加載后將頁(yè)面截取為長(zhǎng)圖片的方法,幫助大家更好的理解和學(xué)習(xí)c#,感興趣的朋友可以了解下2021-01-01
基于WPF實(shí)現(xiàn)PDF的顯示與轉(zhuǎn)換
這篇文章為大家詳細(xì)主要介紹了如何基于WPF實(shí)現(xiàn)PDF的顯示并轉(zhuǎn)換成圖片,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-12-12
C/C++ 傳遞動(dòng)態(tài)內(nèi)存的深入理解
本篇文章是對(duì)C/C++中的傳遞動(dòng)態(tài)內(nèi)存進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05
C#結(jié)合SMTP實(shí)現(xiàn)郵件報(bào)警通知的實(shí)現(xiàn)示例
這篇文章主要介紹了C#結(jié)合SMTP實(shí)現(xiàn)郵件報(bào)警通知的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07

