您的位置:首页 > 编程语言

Socket编程 关于缓冲区长度问题

2014-04-28 20:26 344 查看
先描述问题的情景:系统的组成是客户端--代理服务器--服务器

问题:客户端向代理服务器发送登录请求,代理服务器向服务器转发客户端的登陆请求。问题出现在代理服务器接收消息,并且转发成功后没有收到服务器的登陆结果。

并且在输出登陆请求的时候,字符串是正常的。

后来经过讨论,问题出在代理服务器的转发请求上。

下面直接上解决办法:

//代理服务器接收数据方法

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);

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: