首页
社区
课程
招聘
[求助]eax buff接受数据的处理
发表于: 2008-3-27 21:51 3561

[求助]eax buff接受数据的处理

2008-3-27 21:51
3561
在recv()函数接受数据时候,放数据到eax,所以问一下,eax是接受到的一部分数据吧?不是全部吧?
recv怎么处理后面大量的数据呢?

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 44229
活跃值: (19955)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
2
首先你得看一下recv函数的原型:
        int recv(
        SOCKET s,                 //套接字描述符
        char FAR *buf,                 //缓冲区
        int len,                         //缓冲区buf的长度
        int flags                         //附加标志,一般为0
        );
2008-3-27 22:04
0
雪    币: 360
活跃值: (77)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
3
push    0               ; flags
push    ebp             ; len
add     eax, edi
push    eax             ; buf
push    dword_4890C4    ; s
call    recv
那么就是说一个长的数据包会被切割成很多份,然后接受,那么的话应该是有个循环机制了,这个循环是在call recv中还是在recv后面的代码中实现呢?还是不停的调用recv呢?
2008-3-28 13:17
0
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
4
recv是将接收到的数据存放到Buff内存中去的(不是在eax中,eax只是一个Buff缓冲区地址指针而已),只要Buff内存缓冲足够大,就可以一次将所以数据接收完毕,并不会切割数据。
2008-3-28 13:27
0
雪    币: 360
活跃值: (77)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
5
我看过一段讲TCP/IP网络协议的书,它讲是数据在发送的时候,会被切割,然后在另一段会被组装,buff如果过大的情况,会被抛弃.等等..信息.然后我想问,在执行recv函数的时候buff中会是对方send()的全部数据麽?eax的大小是一定的啊,不能是放全部的数据吧?
2008-3-28 14:58
0
雪    币: 208
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
6
eax只是存放这个数据在内存的起始地址,我们的程序都是应用层的,你把传输层的操作和应用层的弄混了。
2008-3-28 15:14
0
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
7
分包和组包这些操作都在系统层里操作的,只要Buf缓冲区足够大,recv返回的包已经是完整的了。
2008-3-28 15:39
0
雪    币: 360
活跃值: (77)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
8
呵呵,弄混了数据包的切割是由TCP/IP来处理的,而那个TCP协议是在传输层~
2008-3-28 16:51
0
游客
登录 | 注册 方可回帖
返回
//