C#分离TCP消息

时间:2017-10-05 22:33:26

标签: 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);
}

所以如果我在Textfield中写“mb”,它会显示一个MessageBox,说“mb”。

我想知道,我如何分离NetworkStream发送的消息,因此我可以单独设置MessageBox的Capture和Content。

1 个答案:

答案 0 :(得分:0)

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

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

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