先描述问题的情景:系统的组成是客户端--代理服务器--服务器
问题:客户端向代理服务器发送登录请求,代理服务器向服务器转发客户端的登陆请求。问题出现在代理服务器接收消息,并且转发成功后没有收到服务器的登陆结果。
并且在输出登陆请求的时候,字符串是正常的。
后来经过讨论,问题出在代理服务器的转发请求上。
下面直接上解决办法:
//代理服务器接收数据方法
private void ServerGetMessage(object socket)
{
Socket s = (Socket)socket;
while (true)
{
Byte[] result = new Byte[1024];//注意这里,申请到的缓冲区长度是1024.所以之后转发的消息长度也是1024,这就意味着在少于1024字节的消息中会出现无意义字符
int msgLength=s.Receive(result);//获取到我们的消息长度
textBox1.AppendText("\r\n" + s.RemoteEndPoint.ToString() + " " + "as server:" + ASCIIEncoding.ASCII.GetString(result));
lSocket[s].Send(ASCIIEncoding.ASCII.GetBytes(ASCIIEncoding.ASCII.GetString(result).Substring(0, msgLength)));
Console.WriteLine(lSocket[s].RemoteEndPoint.ToString());
Console.WriteLine(ASCIIEncoding.ASCII.GetBytes(ASCIIEncoding.ASCII.GetString(result).Substring(0, msgLength)).Length + "aa" + ASCIIEncoding.ASCII.GetString(result).Substring(0, msgLength));//这里只要获取到我们需要的字符串长度就行了
//Data data = new Data();
//data.msg = ASCIIEncoding.ASCII.GetString(result);
//data.s = s;
//JsonDecode jd = new JsonDecode(ASCIIEncoding.ASCII.GetString(result));
//Thread thread = new Thread(ServerMsgMethod);
//thread.Start(data);
}
}