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绘图控件上的,实时显示图像。
展开
 我来答
夔穹0HQ
2015-05-21 · TA获得超过523个赞
知道小有建树答主
回答量:218
采纳率:88%
帮助的人:87.6万
展开全部
获取到的数据长度为0,有可能连接已被对方关闭了。
追问
下位机ARM板一秒钟发一个数据,中间不会断开连接。
我用while是为了不停地接收数据。因为上位机接收到数据之后要画图。
追答
根据MSDN上的描述,你是接收不到0长度的数据包的。
我发送一个0长度的数据给对方,只能检测链接是否可用(MSDN的描述),并不能触发对方的接收挂起。接收到0长度的数据包,说明连接有异常了。仔细检查下代码把。
希望哥的拙论没有误导你。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2015-05-21
展开全部
byte[] RxDataBuffer = new byte[1024];

这个是定义的缓冲区
Receive方法会返回实际读取到的数据长度,你返回300说明你数据的总300只有300,你可以跳出这个循环了
追问
用while是为了不停地接收数据。因为上位机接收到数据之后要画图。是TCP的长连接,要一直接收数据的。除非用户退出软件。
追答
Receive 方法是获取缓冲区数据,你估计要好好再去看看socket客户端和服务端的实现了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友ce7f3ccb4
2015-05-20 · TA获得超过1950个赞
知道大有可为答主
回答量:2299
采纳率:0%
帮助的人:1906万
展开全部
你都一次性读取1024个长度了,说明你的数据读取超长了,
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式