如何利用C# Socket写通讯协议
时间: 2024-10-15 12:14:16 浏览: 28
在C#中,Socket是一个用于网络通信的基础组件,可以用来创建客户端或服务器端的应用程序。要编写一个简单的TCP通信协议,你可以按照以下步骤操作:
1. 引入命名空间:首先,你需要添加`System.Net.Sockets`和`System.IO.Streams`命名空间,这两个包含了Socket相关的类。
```csharp
using System;
using System.Net;
using System.Net.Sockets;
using System.IO;
```
2. 创建Socket对象:确定是要创建ServerSocket(服务端监听连接)还是ClientSocket(发起连接),比如创建ServerSocket:
```csharp
TcpListener listener = new TcpListener(IPAddress.Any, 12345); // 设置IP地址和端口号
listener.Start();
```
3. 接受连接:对于服务端,当有客户端连接时,调用`Accept()`方法建立新的连接并获取一个新的Socket实例。
```csharp
TcpClient client = listener.AcceptTcpClient();
```
4. 数据传输:创建两个Stream对象(如NetworkStream),分别对应于客户端和服务器。然后可以读写数据了:
```csharp
NetworkStream nsClient = client.GetStream();
StreamReader srClient = new StreamReader(nsClient);
StreamWriter swClient = new StreamWriter(nsClient);
string messageFromClient = srClient.ReadLine();
Console.WriteLine("Received: " + messageFromClient);
swClient.WriteLine("Message from server: " + DateTime.Now.ToString());
swClient.Flush(); // 确保消息已发送
```
5. 关闭连接:完成通信后,记得关闭所有流和Socket连接:
```csharp
srClient.Close();
swClient.Close();
client.Close();
listener.Stop();
```
6. 发送数据到客户端:如果要在客户端向服务器发送数据,只需反向处理上述流程即可,将`StreamWriter`和`StreamReader`的对象替换到服务器端。
**相关问题--:**
1. C#中如何处理Socket连接异常?
2. TCP和UDP的区别在哪儿?在何种场景下选择TCP?
3. 使用非阻塞模式编写Socket通信有何优势?
阅读全文