C# 分隔 TCP 消息

标签 c# tcp server client messagebox

出于练习目的,我正在开发 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/

相关文章:

c# - 由该代码生成的 ID 的安全性如何?

c++ - OpenSSL 将消息拆分为两条记录

html - 在网络上流式传输自适应音频(低延迟)

java - 为什么 Netty 客户端连接 future.operationComplete 在调用者线程中被调用?

jquery - 客户端如何在不频繁ajax请求的情况下从服务器获取更新?

c# - 创建的 WPF 应用程序无法启动

c# - 时间如何排序

c# - 如何使用 Facebook C# SDK 登录 Facebook

python - 如何运行一个本地主机,该主机可以一直提供服务,直到关键字将其停止为止(全部来自.py文件)?

node.js - 如何在服务器上使用调度程序自动运行我的 Node js 脚本