写一个c#socket通讯用同步接收解决粘包示例
时间: 2023-11-14 19:05:31 浏览: 77
以下是一个简单的 C# Socket 通讯同步接收解决粘包的示例代码:
```csharp
using System;
using System.Net.Sockets;
using System.Text;
class Program
{
static void Main(string[] args)
{
// 创建 Socket 对象
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
// 连接服务器
socket.Connect("127.0.0.1", 8888);
// 发送数据
string message = "Hello, Server!";
byte[] data = Encoding.UTF8.GetBytes(message);
socket.Send(data);
// 接收数据
byte[] buffer = new byte[1024];
int length = socket.Receive(buffer);
// 解决粘包
string receivedMessage = Encoding.UTF8.GetString(buffer, 0, length);
while (socket.Available > 0)
{
length = socket.Receive(buffer);
receivedMessage += Encoding.UTF8.GetString(buffer, 0, length);
}
// 输出接收到的数据
Console.WriteLine("Received Message: " + receivedMessage);
// 关闭 Socket 连接
socket.Shutdown(SocketShutdown.Both);
socket.Close();
}
}
```
在这个示例代码中,我们首先创建了一个 Socket 对象并连接到服务器。然后,我们发送了一条消息给服务器并等待接收响应。当我们接收到响应时,我们使用一个 while 循环来读取所有可用的数据,以解决粘包问题。最后,我们输出接收到的数据并关闭 Socket 连接。
需要注意的是,这个示例代码是基于同步 Socket 通讯的,如果你使用的是异步 Socket 通讯,则需要使用 BeginReceive 和 EndReceive 方法来实现数据接收,并在回调函数中解决粘包问题。
阅读全文