C#分离TCP消息
我正在使用TCP客户机/服务器系统进行练习,我想在两者之间发送特定数据 我已经能够发送字节并让它们显示为字符串。我还可以发送一个特定的字符串(“mb”),并在服务器端弹出一个MessageBox 框的内容是发送的文本(在本例中为“mb”) 这是服务器端:C#分离TCP消息,c#,tcp,server,client,messagebox,C#,Tcp,Server,Client,Messagebox,我正在使用TCP客户机/服务器系统进行练习,我想在两者之间发送特定数据 我已经能够发送字节并让它们显示为字符串。我还可以发送一个特定的字符串(“mb”),并在服务器端弹出一个MessageBox 框的内容是发送的文本(在本例中为“mb”) 这是服务器端: byte[] msg = new byte[4096]; var count = stream.Read(msg, 0, msg.Length); string returnData = Encoding.ASCII.GetString(ms
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的捕获和内容。正如您所注意到的,您正在通过套接字发送二进制数据。在客户机中,您从message
msg=Encoding.ASCII.GetBytes(txtMsg.Text)获取字节在服务器中,您使用stringreturndata=Encoding.ASCII.GetString(msg,0,count)将其转换回字符串代码>
在这种方法中,您可以发送例如逗号分隔的字符串,其中第一个字段是捕获,第二个是内容
然而,由于它是字节流,所以您可以将任何可序列化的内容发送到字节中。您可以通过网络流使用BinaryWriter\BinaryReader发送任何结构。正如您所注意到的,您正在通过套接字发送二进制数据。在客户机中,您从messagemsg=Encoding.ASCII.GetBytes(txtMsg.Text)获取字节在服务器中,您使用stringreturndata=Encoding.ASCII.GetString(msg,0,count)将其转换回字符串代码>
在这种方法中,您可以发送例如逗号分隔的字符串,其中第一个字段是捕获,第二个是内容
然而,由于它是字节流,所以您可以将任何可序列化的内容发送到字节中。您可以通过网络流使用BinaryWriter\BinaryReader发送任何结构。您的当前代码最终会遇到问题。TCP协议并不能保证您将在一次Read()
中收到整个消息。您发送的任何内容都可以自由地拆分为单独的数据包。除此之外,分离信息是一个完全不同的问题。你可以想怎么想就怎么想。可能使用换行符。可能在每个组件前面加上长度前缀。这取决于你。好吧,这就是我说的分离的基本意思。在“消息”之间放置一个特定的符号,以便我的服务器知道它的开始和结束位置。我该怎么做呢?可能重复的代码最终会在当前代码中遇到问题。TCP协议并不能保证您将在一次Read()
中收到整个消息。您发送的任何内容都可以自由地拆分为单独的数据包。除此之外,分离信息是一个完全不同的问题。你可以想怎么想就怎么想。可能使用换行符。可能在每个组件前面加上长度前缀。这取决于你。好吧,这就是我说的分离的基本意思。在“消息”之间放置一个特定的符号,以便我的服务器知道它的开始和结束位置。我该怎么做呢?可能是的,我想用逗号把它们分开,这就是我最初的意思。我该怎么做呢?是的,我想用逗号把它们分开,这就是我最初的意思。我该怎么做?