Socket接收数据经常出错!

橘子ZT 2006-01-04 01:48:56
byte[] countBytes = new byte[1024];
int by = sock.Receive(countBytes, 0, 1024, SocketFlags.None);
经常接受数据出错!
错误代码:10053。一个已建立的连接被你的主机的软件终止,可能是因为一次数据传输超时或是协议错误。
有时发送数据也是一样的错误!
...全文
307 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
橘子ZT 2006-01-06
  • 打赏
  • 举报
回复
唉!
真的没人嗦!
CSDN也不过如此啦!
橘子ZT 2006-01-05
  • 打赏
  • 举报
回复
晕哟
还是不行的嘛
一样的错误
楼上的代码不对哈:sock.Send(bytes,0,bytes.Length);
橘子ZT 2006-01-05
  • 打赏
  • 举报
回复
晕哟
没人帮我解决了嗦
急呀!
dazhu2 2006-01-04
  • 打赏
  • 举报
回复
sock.Send(bytes,bytes.Length,0);//连接请求
---------应该是
sock.Send(bytes,0,bytes.Length);
dazhu2 2006-01-04
  • 打赏
  • 举报
回复
sock.SetSocketOption(
SocketOptionLevel.Socket,
SocketOptionName.ReceiveTimeout,
SMCommon.revSockTimeOut
sock.SetSocketOption(
SocketOptionLevel.Socket,
SocketOptionName.SendTimeout,
sendSockTimeOut
);
--------------这两句去掉看看
橘子ZT 2006-01-04
  • 打赏
  • 举报
回复
会不会连接的电脑有病毒也会有原因
橘子ZT 2006-01-04
  • 打赏
  • 举报
回复
换了机器和重启服务器都不行哈
还在服务器之间测试了的一样的错误
是在搞不懂是怎么回事了
橘子ZT 2006-01-04
  • 打赏
  • 举报
回复
socket连接:
sock = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
sock.SetSocketOption(
SocketOptionLevel.Socket,
SocketOptionName.ReceiveTimeout,
SMCommon.revSockTimeOut
sock.SetSocketOption(
SocketOptionLevel.Socket,
SocketOptionName.SendTimeout,
sendSockTimeOut
);
IPEndPoint HostEP = new IPEndPoint(ipAddress,SMCommon.ServerPort);
sock.Connect(HostEP);
sock.Send(bytes,bytes.Length,0);//连接请求

接受线程:
private static void ThreadRev1(object SockObj)
{
errCount = 0;
int bytesLength = 0;
try
{
while(SMCommon.SendStartMode)
{
// 如果连续收到10个错误数据包,中断连接
if (errCount > 4)
{
EndSock(sock);
}
if (sock==null || !sock.Connected)
{
EndSock(sock);
break;
}
try
{
ArrayList ReadList = new ArrayList();
ReadList.Add(sock);
Socket.Select(ReadList,null,null,1000);
if ( ReadList.Count > 0)
{
byte[] countBytes = new byte[sock.Available];
int by = sock.Receive(countBytes, 0, sock.Available, SocketFlags.None);
// lock(SMCommon.SMReceiveQueue)
{
errCount = 0;
SMCommon.SMReceiveQueue.Enqueue(countBytes);
}
}
}
catch(SocketException ex)
{
// 写错误日志
lock(GPSWinApp.GPSServerApp.Form1.MsgQueue)
{
GPSWinApp.GPSServerApp.Form1.MsgQueue.Enqueue("2短消息连接异常断开。" + ex.ToString());
}
if (ex.ErrorCode == 10054 || ex.ErrorCode == 10004)
break;
}
catch(Exception e)
{
errCount++;
lock(GPSWinApp.GPSServerApp.Form1.MsgQueue)
{
GPSWinApp.GPSServerApp.Form1.MsgQueue.Enqueue("3信息接收线程出错:收到无效数据包。" + e.ToString());
}
// 清空缓存
byte[] recvBytes=new byte[sock.Available];
bytesLength = sock.Receive(recvBytes,sock.Available,0);
}
Thread.Sleep(30);
}
}
finally
{
EndSock(sock);
}
lock(GPSWinApp.GPSServerApp.Form1.MsgQueue)
{
GPSWinApp.GPSServerApp.Form1.MsgQueue.Enqueue("消息接收线程退出。");
}
}



dazhu2 2006-01-04
  • 打赏
  • 举报
回复
你换台机器试过没有,或者把你的代码贴出来看看,
你贴出来的语句是没有问题的
xielongfei 2006-01-04
  • 打赏
  • 举报
回复
应该是你调试时你的程序还在用端口时,你把程序关了,而你的端口没有被windows关闭,还在占用状态,重新启动计算机就没问题了,或在关闭调试状态时把socket都关闭,应该没问题了 !

橘子ZT 2006-01-04
  • 打赏
  • 举报
回复
急呀!到底是什么原因喃?
橘子ZT 2006-01-04
  • 打赏
  • 举报
回复
我加了检测的哈。下面的是在循环里的
if (sock==null&&!sock.Connected)
{
EndSock(sock);
break;
}
try
{
ArrayList ReadList = new ArrayList();
ReadList.Add(sock);
Socket.Select(ReadList,null,null,1000);
if ( ReadList.Count > 0)
{
byte[] countBytes = new byte[1024];
int by = sock.Receive(countBytes, 0, 1024, SocketFlags.None);
lock(SMCommon.SMReceiveQueue)
{
errCount = 0;
SMCommon.SMReceiveQueue.Enqueue(countBytes);
}
}
}
jiezhi 2006-01-04
  • 打赏
  • 举报
回复
连接被断开了。
检查一下发送端是否断开了socket连接
橘子ZT 2006-01-04
  • 打赏
  • 举报
回复

都是100M的网卡
yohn_jack 2006-01-04
  • 打赏
  • 举报
回复
网络问题吧,如果是10M网卡和100M网卡交互就会出现这个问题

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧