其实这个问百度一搜一大堆 。但是没有 找到我要的答案 ,现在的问题是服务端断开连接后 , 客户端就每间隔10秒去重连一次 ,然后等服务端回复连接时,会出现现下面这种情况,这是为什么 ,怎么解决 ,拜托各大佬给个思路
解决方案 »
- C#把insert和Update的语句转化为json格式的数据
- 如何实现窗体整个拖动
- C#连接ORACLE什么方式效率比较
- C# Sql2005 查询语句问题,虽然简单但不知道错在那
- 关于TCP通讯的问题
- Microsoft Jet 数据库引擎打不开文件'\\xxx.xxx.x.xx\test.mdb'。它已经被别的用户以独占方式打开,或没有查看数据的权限
- 定义问题
- 如何把数据库里面的数据循环添加进treeview
- 请问如何用datatable在datagrid中往数据库里添加一行?
- 两个布尔变亮a和b怎么做与运算?
- 哪位大侠可以共享我一个用.Net(c#)实现数据挖掘-关联分析-Apriori算法的例子程序?
- 排柜复杂计算问题请教
你点开那个问题详细信息里面什么内容吧,或者直接上代码吧
///<summary>
///接收消息
///</summary>
private void ReceiveMessage()
{
//Socket socketClient = socketClientPara as Socket;
while (true)
{
try
{
//接受消息头(消息校验码4字节 + 消息长度4字节 + 身份ID8字节 + 主命令4字节 + 子命令4字节 + 加密方式4字节 = 28字节)
int HeadLength = 28;
//存储消息头的所有字节数
byte[] recvBytesHead = new byte[HeadLength];
//如果当前需要接收的字节数大于0,则循环接收
if (HeadLength > 0)
{
byte[] recvBytes1 = new byte[28];
//将本次传输已经接收到的字节数置0
int iBytesHead = 0;
//如果当前需要接收的字节数大于缓存区大小,则按缓存区大小进行接收,相反则按剩余需要接收的字节数进行接收
if (HeadLength >= recvBytes1.Length)
{
iBytesHead = socketClient.Receive(recvBytes1, recvBytes1.Length, 0);
}
else
{
iBytesHead = socketClient.Receive(recvBytes1, HeadLength, 0);
}
//将接收到的字节数保存
recvBytes1.CopyTo(recvBytesHead, recvBytesHead.Length - HeadLength);
//减去已经接收到的字节数
HeadLength -= iBytesHead; //接收消息体(消息体的长度存储在消息头的4至8索引位置的字节里)
byte[] bytes = new byte[4];
Array.Copy(recvBytesHead, 4, bytes, 0, 4);
int BodyLength = IPAddress.NetworkToHostOrder(BitConverter.ToInt32(bytes, 0));
//存储消息体的所有字节数
byte[] recvBytesBody = new byte[BodyLength];
//如果当前需要接收的字节数大于0,则循环接收
if (BodyLength > 0)
{
byte[] recvBytes2 = new byte[BodyLength < 1024 ? BodyLength : 1024];
//将本次传输已经接收到的字节数置0
int iBytesBody = 0;
//如果当前需要接收的字节数大于缓存区大小,则按缓存区大小进行接收,相反则按剩余需要接收的字节数进行接收
if (BodyLength >= recvBytes2.Length)
{
iBytesBody = socketClient.Receive(recvBytes2, recvBytes2.Length, 0);
}
else
{
iBytesBody = socketClient.Receive(recvBytes2, BodyLength, 0);
}
//将接收到的字节数保存
recvBytes2.CopyTo(recvBytesBody, recvBytesBody.Length - BodyLength);
//减去已经接收到的字节数
BodyLength -= iBytesBody;
}
//一个消息包接收完毕,解析消息包
UnpackData(recvBytesHead, recvBytesBody);
}
}
catch (Exception)
{ txtMsg.AppendText("服务端已经断开连连接");
//重连的方法
ContentServer();
Thread.Sleep(10000);
}
}
}