如何在C#中使用SendMessage方法发送并接收JSON格式的数据?
时间: 2024-12-10 18:51:31 浏览: 14
在C#中,你可以使用`System.Net.Sockets`命名空间下的`TcpClient`类以及`JsonConvert`库来发送和接收JSON格式的数据。首先,你需要安装Json.NET库(也称为Newtonsoft.Json),可以通过NuGet包管理器添加。
以下是一个简单的示例,展示了如何创建TCP客户端和服务器,进行数据交换:
### 发送JSON数据 (客户端)
```csharp
using System;
using Newtonsoft.Json;
using System.IO.Pipes;
using System.Text;
public class Client
{
private TcpClient client;
private NetworkStream stream;
public void SendMessage(string jsonData)
{
try
{
// 连接服务器
var ip = "127.0.0.1"; // 本地主机地址
var port = 9000; // 服务器端口
client = new TcpClient(ip, port);
stream = client.GetStream();
// 序列化JSON
byte[] jsonBytes = Encoding.UTF8.GetBytes(jsonData);
// 发送数据
stream.Write(jsonBytes, 0, jsonBytes.Length);
Console.WriteLine($"Sent JSON data: {jsonData}");
}
catch (Exception ex)
{
Console.WriteLine($"Error sending message: {ex.Message}");
}
}
public void Close()
{
if (client != null)
{
client.Close();
}
}
}
```
### 接收JSON数据 (服务器)
```csharp
using System;
using Newtonsoft.Json;
using System.IO.Pipes;
using System.Text;
public class Server
{
private TcpListener server;
private StreamReader reader;
public void StartListening()
{
try
{
// 创建监听器
server = new TcpListener(IPAddress.Any, 9000);
server.Start();
// 等待连接
Console.WriteLine("Server started, waiting for connection...");
client = server.AcceptTcpClient();
// 获取网络流
reader = new StreamReader(client.GetStream(), Encoding.UTF8);
string receivedJson = reader.ReadLine();
// 反序列化JSON并处理
dynamic data = JsonConvert.DeserializeObject(receivedJson);
Console.WriteLine($"Received JSON data: {data}");
// 关闭连接
client.Close();
}
catch (Exception ex)
{
Console.WriteLine($"Error receiving message: {ex.Message}");
}
}
public void Stop()
{
if (server != null)
{
server.Stop();
}
}
}
// 使用示例
public static void Main()
{
var server = new Server();
server.StartListening();
}
```
在这个例子中,客户端创建一个JSON字符串,然后序列化成字节发送到服务器;服务器等待连接,在接受到数据后反序列化回JSON对象。
阅读全文