gpt4 book ai didi

C# 分隔 TCP 消息

转载 作者:可可西里 更新时间:2023-11-01 02:53:27 28 4
gpt4 key购买 nike

出于练习目的,我正在开发 TCP 客户端/服务器系统,我想在两者之间发送特定数据。

我已经能够发送字节并让它们显示为字符串。此外,我还可以发送一个特定的字符串(“mb”)并在服务器端弹出一个 MessageBox。

Box 的内容是发送的文本(不过在本例中为“mb”)。

这是服务器端:

byte[] msg = new byte[4096];

var count = stream.Read(msg, 0, msg.Length);
string returnData = Encoding.ASCII.GetString(msg, 0, count);

switch(returnData)
{
case "mb":
MessageBox((IntPtr)0, returnData, "HACKERZ", 0);
break;
case "":
client.Client.Disconnect(true);
Console.WriteLine("User disconnected");
break;
default:
Console.WriteLine(returnData);
break;
}

这是客户端:

private void btnSend_Click(object sender, EventArgs e)
{
NetworkStream stream = client.GetStream();

byte[] msg = new byte[4096];
msg = Encoding.ASCII.GetBytes(txtMsg.Text);

stream.Write(msg, 0, msg.Length);
}

因此,如果我在文本字段中写入“mb”,它会显示一个显示“mb”的消息框。

我想知道,如何分离NetworkStream发送的消息,这样我就可以分别设置MessageBox的Capture和Content。

最佳答案

如您所见,您正在通过套接字发送二进制数据。在客户端中,您从消息 msg = Encoding.ASCII.GetBytes(txtMsg.Text); 中获取字节,在服务器中,您使用 string returnData = Encoding.ASCII.GetString 将其转换回字符串(消息, 0, 计数);

在这种方法中,您可以发送例如逗号分隔的字符串,其中第一个字段为 Capture,第二个字段为 Content。

但是,由于它是字节流,您可以将任何可序列化为字节的内容发送。您可以通过网络流使用 BinaryWriter\BinaryReader 来发送任何结构。

关于C# 分隔 TCP 消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46595760/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com