C#的socket.Receive发送方并没有关闭,但是电脑接收300个数据之前正常,300数据之后接收返回长度是0
byte[]RxDataBuffer=newbyte[1024];//intdisplayXInterval=10;while(true){try{receiveLeng...
byte[] RxDataBuffer = new byte[1024]; //int displayXInterval = 10;
while (true)
{
try
{
receiveLength = clientSocket.Receive(RxDataBuffer, 0, RxDataBuffer.Length, SocketFlags.None);//接收数据,返回接收数据的长度
RAWrxmessage1 = System.Text.Encoding.Default.GetString(RxDataBuffer);//字节数组转换为字符串.接收数据框内要更新的信息
我的数据是实时传递给主窗体,然后绑定到chart绘图控件上的,实时显示图像。 展开
while (true)
{
try
{
receiveLength = clientSocket.Receive(RxDataBuffer, 0, RxDataBuffer.Length, SocketFlags.None);//接收数据,返回接收数据的长度
RAWrxmessage1 = System.Text.Encoding.Default.GetString(RxDataBuffer);//字节数组转换为字符串.接收数据框内要更新的信息
我的数据是实时传递给主窗体,然后绑定到chart绘图控件上的,实时显示图像。 展开
3个回答
展开全部
获取到的数据长度为0,有可能连接已被对方关闭了。
追问
下位机ARM板一秒钟发一个数据,中间不会断开连接。
我用while是为了不停地接收数据。因为上位机接收到数据之后要画图。
追答
根据MSDN上的描述,你是接收不到0长度的数据包的。
我发送一个0长度的数据给对方,只能检测链接是否可用(MSDN的描述),并不能触发对方的接收挂起。接收到0长度的数据包,说明连接有异常了。仔细检查下代码把。
希望哥的拙论没有误导你。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2015-05-21
展开全部
byte[] RxDataBuffer = new byte[1024];
这个是定义的缓冲区
Receive方法会返回实际读取到的数据长度,你返回300说明你数据的总300只有300,你可以跳出这个循环了
这个是定义的缓冲区
Receive方法会返回实际读取到的数据长度,你返回300说明你数据的总300只有300,你可以跳出这个循环了
追问
用while是为了不停地接收数据。因为上位机接收到数据之后要画图。是TCP的长连接,要一直接收数据的。除非用户退出软件。
追答
Receive 方法是获取缓冲区数据,你估计要好好再去看看socket客户端和服务端的实现了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你都一次性读取1024个长度了,说明你的数据读取超长了,
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询