【发布时间】:2015-09-26 10:49:28
【问题描述】:
我在客户端-服务器中接收消息时遇到问题。我已经为测试设置了一个默认字符串。它可以很好地接收消息,但是在发送第二个循环时会将字符串粘在一起。我该怎么办?
这里是代码 发送数据(客户端)
NetworkStream networkStream = tcpclnt.GetStream();
String data = "";
for (int i = 0; i < 4; i++)
{
data = " output here";
if (networkStream.CanWrite)
{
var bytes = Encoding.ASCII.GetBytes(data);
networkStream.Write(bytes, 0, bytes.Length);
networkStream.Flush();
}
}
当它接收到数据时(服务器)
private void recieveData()
{
NetworkStream nStream = tcpClient.GetStream();
while (!stopReceiving)
{
if (nStream.CanRead)
{
byte[] buffer = new byte[1024];
var bytesRead = nStream.Read(buffer, 0, buffer.Length);
if (bytesRead > 0) recvDt = Encoding.ASCII.GetString(buffer, 0, bytesRead);
bool f = false;
f = recvDt.Contains("+@@+");
if (f)
{
string d = "+@@+";
recvDt = recvDt.TrimStart(d.ToCharArray());
clientDis();
stopReceiving = true;
}
else
{
this.Invoke(new rcvData(addHere));
}
}
Thread.Sleep(1000);
}
}
public void addHere()
{
if (recvDt != null && recvDt != "")
{
output.Text += "Received Data: " + recvDt;
recvDt = null;
}
}
输出如下所示
【问题讨论】:
-
我没有查看您的所有代码,但
recvDt.Contains("+@@+")会在某个时候中断。一个Send()不等于一个Receive(),数据可以部分发送和接收,导致你在一个Receive()收到“+@”,在下一个收到“@+”。您需要一个适当的应用程序/框架协议。 -
我尝试删除该部分并留下“this.Invoke(new rcvData(addHere));” ..它仍然有相同的结果
标签: c# winforms client-server networkstream