先描述問題的情景:系統的組成是用戶端--代理伺服器--伺服器
問題:用戶端向代理伺服器發送登入請求,代理伺服器向伺服器轉發用戶端的登陸請求。問題出現在代理伺服器接收消息,并且轉發成功後沒有收到伺服器的登陸結果。
并且在輸出登陸請求的時候,字元串是正常的。
後來經過讨論,問題出在代理伺服器的轉發請求上。
下面直接上解決辦法:
//代理伺服器接收資料方法
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);
}
}