请教,为什么socket一段时间不发数据,再发数据就接受不了?

nnoovvee 2013-01-18 05:07:51

public class server
{
TcpListener listener=null;
bool isWork=true;
private void connectSocket()//线程方法
{
string serverPort = ConfigurationManager.AppSettings["ServerPort"];
this.listener = new TcpListener(IPAddress.Any, int.Parse(serverPort));
listener.Start();
TcpClient client = null;
NetworkStream stream = null;
try
{
client = listener.AcceptTcpClient();
}
catch
{
return;
}
stream = client.GetStream();
Listen:
while (isWork)
{
try
{
if (!client.Connected)
ReceiveDataFromHard();
byte[] data = new byte[1044];
if (stream.CanRead)
Thread.Sleep(20);
int i = stream.Read(data, 0, data.Length);//两批读取数据有间隔时,第二批数据读不到,阻塞。
if (data.checkData())//数据有效
{
//。。。。。
}
else //无效数据
{
//。。。。。
}
Thread.Sleep(500);
}
}
catch(IOException ioexception)
{
isWork = true;
stream.Close();
client.Close();
listener.Stop();
ReceiveDataFromHard();
}
}
stream.Close();
client.Close();
listener.Stop();
}
}



---------------
这段代码是一个服务端,放在一个线程里。有一个硬件客户端来连接服务程序。运行服务程序、打开客户端硬件设备,运行正常。可是当客户端往服务端发送一阵子数据(有多条,都是正常的),过一两分钟再往服务端发送数据,就在“int i = stream.Read(data, 0, data.Length)”这里不往下走了。
用嗅探器查看,客户端往服务端发送的两批数据都正常,但就是第二批数据服务端接收不到。
客户端是硬件成品,应该没有问题。
...全文
177 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
wangdeyou86 2013-01-18
  • 打赏
  • 举报
回复
可能缓冲区里当前帧没有1044字节数据,把长度换掉试试。

110,534

社区成员

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

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

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