我正在研究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。
答案 0 :(得分:0)
正如您所注意到的,您正在通过套接字发送二进制数据。在客户端中,您从消息msg = Encoding.ASCII.GetBytes(txtMsg.Text);
获取字节,在服务器中,您将其转换为带有string returnData = Encoding.ASCII.GetString(msg, 0, count);
的字符串
在这种方法中,您可以发送例如逗号分隔的字符串,其中第一个字段是Capture,第二个内容。
但是,由于它是字节流,您可以将任何可序列化的内容发送到字节。您可以使用BinaryWriter \ BinaryReader over Network流来发送任何结构。