关于socket.Receive()的问题

maskX 2003-03-01 01:00:44
什么原因能够导致socket.Receive()接受数据不完整?

我单步调试socket.Receive()时
断点设在socket.Receive()前接受的数据是完整的,
断点设在socket.Receive()后接受的数据就不完整了

这是为什么呢?我都晕拉 :(

(不完整数据从回车换行处断开,不知是不是换行符得问题,若是怎么解决阿?)

谢谢关注
...全文
166 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
Lorenes 2003-03-03
  • 打赏
  • 举报
回复

512Bytes x (总大小/512Bytes)

尽量用异步

设计个文件头000000XX,记录总长度
调用个线程,等它等取全了在进行下面的操作.
qianli918 2003-03-03
  • 打赏
  • 举报
回复
我是这样解决的,先发过去我后面后多少字节的数据,然后后面一直等待接受
cwj007 2003-03-03
  • 打赏
  • 举报
回复
关注
wanglb_16 2003-03-03
  • 打赏
  • 举报
回复
使用异步机制不会有问题。
cnxmouse 2003-03-02
  • 打赏
  • 举报
回复
关注
maskX 2003-03-01
  • 打赏
  • 举报
回复
先谢谢各位
我就是连到一个ftp服务器,建立连接后,发送 USER anonymous

然后返回的完全数据应该是
"220 openlab.tarena.ca FTP server (Welcome to use Tarena Technologies Inc. OpenLab services) ready.
331 Guest login ok, send ident as password.
"

不完全数据是
"220 openlab.tarena.ca FTP server (Welcome to use Tarena Technologies Inc. OpenLab services) ready.
"

也没有什么结束标志阿

初学者,很多简单的问题也不会,请多指教
poetc 2003-03-01
  • 打赏
  • 举报
回复
要约定好结束标志。

会用到控制码。
chenbinghui 2003-03-01
  • 打赏
  • 举报
回复
当你需要传递很多数据的时候,发送方一下全部发完是不对的,
你应该建立应答机制,发送方每次发送一定的字节(比如说10k),接受方接收到后进行应答,发送方接收到应答信号之后才进行下一次的发送,
顾君彦 2003-03-01
  • 打赏
  • 举报
回复
Receive一次接收完是不可能的,除非数据很少,数据多在局域网上也是不可能的。
你需要用一个循环来Receive网络上的数据,直到结束数据流的结束符出现为止。
这是网络通信程序设计必须做的。
maskX 2003-03-01
  • 打赏
  • 举报
回复
问题是我不知道接受的数据是否结束阿

我先试试异步接收,各位在多提建议阿
poetc 2003-03-01
  • 打赏
  • 举报
回复
网络会有延迟的,并不光是socket的问题。

我觉得发送数据时最好加上结束标志,没有完整接收数据就继续接收;最好用异步接收。

110,570

社区成员

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

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

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