tcp中接收数据的问题 ( 积分: 50 )

  • 主题发起人 主题发起人 man_b52
  • 开始时间 开始时间
M

man_b52

Unregistered / Unconfirmed
GUEST, unregistred user!
书上说;
int PASCAL FAR recv( SOCKET s, char FAR* buf, int len, int flags);
若无错误发生,recv()返回读入的字节数。
我的程序中调用
numberbytes:=recv( Msg.WParam, buff,4096, 0 );
memo1.Lines.Add(inttostr(numberbytes));
看到的接收的是4096个字节。
这是怎么回事?请各位赐教
 
书上说;
int PASCAL FAR recv( SOCKET s, char FAR* buf, int len, int flags);
若无错误发生,recv()返回读入的字节数。
我的程序中调用
numberbytes:=recv( Msg.WParam, buff,4096, 0 );
memo1.Lines.Add(inttostr(numberbytes));
看到的接收的是4096个字节。
这是怎么回事?请各位赐教
 
楼主期望读到更多数据?
缓冲区太小,只能读4096个数据?(因为设定的缓冲就这么大)

For connection-oriented sockets (type SOCK_STREAM for example), calling recv will return as much information as is currently available—up to the size of the buffer specified
看这个
 
不是很清楚你的问题是什么意思
 
不好意思!我没说清楚。
我的意思是书上既然说“若无错误发生,recv()返回读入的字节数。”那么应该收到的是实际字节数,而不是缓冲区的大小4096个字节,而我的程序收到的基本上都是4096个字节,有时会收到略微小一点的字节数,而不是发送端发出实际字节数,这是为什么?
发送端的缓冲区也为4096,不过,send()的返回值是实际发出的字节数。
比如说:
发送字符串“1234567”,send发出的是7个字节。
接收端确接收了4096个字节
如果是传输文件的话,源文件大小为7个字节,接受文件则为4096个字节,这显然有问题。
现在我希望的是如何才能用recv()得到发送端发出的实际字节,不包含别的数据。
 
在第一次接收之前清空一下缓冲区试试:)
 
接收数据和缓冲区中的数据应该没有关系,即使第一次清空,好像意义不大
 
recv是阻塞的。如果没有出错的话,recv( Msg.WParam, buff,4096, 0 )只有在收到4096个字节时才返回,把返回值传给numberbytes
发送字符串“1234567”,send发出的是7个字节。
recv收到这七个字节后还是在一直等待,直到再收到4089个字节才返回,如果没有出现网络异常,程序会一直停在这里。收完了4096个字节接着执行后面的语句。
"如果是传输文件的话,源文件大小为7个字节,接受文件则为4096个字节,这显然有问题。
现在我希望的是如何才能用recv()得到发送端发出的实际字节,不包含别的数据。"
你得先用Send告诉接收方要收的字节是多少。接收方再根据这个recv
 
同意楼上
 
接受答案了.
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
674
import
I
S
回复
0
查看
928
SUNSTONE的Delphi笔记
S
后退
顶部