C#中簡(jiǎn)單Socket編程的實(shí)現(xiàn)實(shí)例
引言
Socket編程是網(wǎng)絡(luò)編程的基礎(chǔ),通過(guò)Socket編程,可以實(shí)現(xiàn)計(jì)算機(jī)之間的通信。本文將介紹如何在C#中進(jìn)行簡(jiǎn)單的Socket編程,包括服務(wù)器端和客戶端的實(shí)現(xiàn)。示例將展示TCP連接的基本操作,適用于理解網(wǎng)絡(luò)通信的基本概念和實(shí)現(xiàn)方法。
準(zhǔn)備工作
確保您的開發(fā)環(huán)境中安裝了.NET SDK,可以通過(guò)Visual Studio或其他C#開發(fā)工具進(jìn)行編碼和調(diào)試。
創(chuàng)建Socket服務(wù)器
服務(wù)器需要監(jiān)聽特定端口,接受客戶端連接,并進(jìn)行數(shù)據(jù)收發(fā)。以下是一個(gè)簡(jiǎn)單的C# Socket服務(wù)器示例:
服務(wù)器代碼
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
class Program
{
static void Main(string[] args)
{
// 設(shè)置服務(wù)器IP和端口
IPAddress ipAddress = IPAddress.Parse("127.0.0.1");
int port = 11000;
// 創(chuàng)建一個(gè)TcpListener對(duì)象
TcpListener listener = new TcpListener(ipAddress, port);
// 開始監(jiān)聽客戶端請(qǐng)求
listener.Start();
Console.WriteLine("服務(wù)器已啟動(dòng),等待客戶端連接...");
while (true)
{
// 接受客戶端連接
TcpClient client = listener.AcceptTcpClient();
Console.WriteLine("客戶端已連接!");
// 啟動(dòng)一個(gè)新線程處理客戶端請(qǐng)求
Thread clientThread = new Thread(HandleClient);
clientThread.Start(client);
}
}
static void HandleClient(object obj)
{
TcpClient client = (TcpClient)obj;
// 獲取網(wǎng)絡(luò)流
NetworkStream stream = client.GetStream();
byte[] buffer = new byte[1024];
int bytesRead;
// 讀取客戶端發(fā)送的數(shù)據(jù)
while ((bytesRead = stream.Read(buffer, 0, buffer.Length)) != 0)
{
string data = Encoding.UTF8.GetString(buffer, 0, bytesRead);
Console.WriteLine("收到客戶端消息: " + data);
// 回應(yīng)客戶端消息
byte[] response = Encoding.UTF8.GetBytes("服務(wù)器已收到消息");
stream.Write(response, 0, response.Length);
}
// 關(guān)閉連接
client.Close();
}
}
?創(chuàng)建Socket客戶端
客戶端需要連接服務(wù)器并發(fā)送數(shù)據(jù)。以下是一個(gè)簡(jiǎn)單的C# Socket客戶端示例:
客戶端代碼
using System;
using System.Net.Sockets;
using System.Text;
class Program
{
static void Main(string[] args)
{
// 設(shè)置服務(wù)器IP和端口
string server = "127.0.0.1";
int port = 11000;
// 創(chuàng)建一個(gè)TcpClient對(duì)象
TcpClient client = new TcpClient(server, port);
// 獲取網(wǎng)絡(luò)流
NetworkStream stream = client.GetStream();
// 發(fā)送消息到服務(wù)器
string message = "Hello, Server!";
byte[] data = Encoding.UTF8.GetBytes(message);
stream.Write(data, 0, data.Length);
Console.WriteLine("發(fā)送消息到服務(wù)器: " + message);
// 接收服務(wù)器回應(yīng)消息
byte[] buffer = new byte[1024];
int bytesRead = stream.Read(buffer, 0, buffer.Length);
string response = Encoding.UTF8.GetString(buffer, 0, bytesRead);
Console.WriteLine("收到服務(wù)器回應(yīng): " + response);
// 關(guān)閉連接
client.Close();
}
}
?運(yùn)行示例
- 先運(yùn)行服務(wù)器代碼。服務(wù)器將開始監(jiān)聽指定的IP和端口,等待客戶端連接。
- 然后運(yùn)行客戶端代碼??蛻舳藢⑦B接到服務(wù)器并發(fā)送消息。
- 服務(wù)器接收到消息后,將回應(yīng)客戶端,并在控制臺(tái)上顯示接收到的消息。
- 客戶端接收到服務(wù)器的回應(yīng)消息,并在控制臺(tái)上顯示
到此這篇關(guān)于C#中簡(jiǎn)單Socket編程的實(shí)現(xiàn)實(shí)例的文章就介紹到這了,更多相關(guān)C#簡(jiǎn)單Socket編程內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C#連接操作 MySQL 數(shù)據(jù)庫(kù)實(shí)例(使用官方驅(qū)動(dòng))
這篇文章主要介紹了C#連接操作 MySQL 數(shù)據(jù)庫(kù)實(shí)例(使用官方驅(qū)動(dòng)),本文講解了C#中的Mysql連接方法和SQL操作方法,需要的朋友可以參考下2015-02-02
c# DateTime常用操作實(shí)例(datetime計(jì)算時(shí)間差)
字符串操作DateTime操作,datetime計(jì)算時(shí)間差,取當(dāng)前時(shí)間,更多方法看下面代碼2013-12-12
C# OpenCvSharp實(shí)現(xiàn)去除字母后面的雜線
這篇文章主要為大家詳細(xì)介紹了C#如何使用OpenCvSharp實(shí)現(xiàn)去除字母后面的雜線效果,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-11-11
C#TextBox設(shè)置提示文本方式(SetHintText)
這篇文章主要介紹了C#TextBox設(shè)置提示文本方式(SetHintText),具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2025-04-04
Unity3D游戲-鼠標(biāo)點(diǎn)擊使角色移動(dòng)避開障礙物
在Unity的世界里,當(dāng)你輕點(diǎn)鼠標(biāo),角色仿佛被賦予了新的使命,沿著一條無(wú)形的軌跡,向著地圖上的目標(biāo)點(diǎn)進(jìn)發(fā),每一次移動(dòng),不僅是簡(jiǎn)單的位移,更是對(duì)未知的探索,這種交互,讓玩家與游戲世界緊密相連,仿佛自己就是那個(gè)掌控命運(yùn)的魔法師,用指尖繪制出角色的冒險(xiǎn)之路......2025-08-08
C#中靜態(tài)構(gòu)造函數(shù)的幾點(diǎn)說(shuō)明介紹
本篇文章主要是對(duì)C#中靜態(tài)構(gòu)造函數(shù)的幾點(diǎn)說(shuō)明進(jìn)行了介紹,需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助2014-01-01

