关于IPX广播方式的疑惑?

舟中夜起 2001-02-26 04:03:00
我在分析一个程序的传输数据时,发现以下情况,sendto一次后竟然可以recvfrom两次(注:这是单台机器,没有连接到其它机器,只是安装了网卡和IPX协议),而在我尝试时,第二次的recvfrom因为缓冲区为空,一直无法返回,这是为何?而他就没有问题?我是用hook winsock API方式截获的数据

0)WSAStartup(WORD wVersiontRequired = 257, LPWSADATA lpWSAData)
(124)socket(int af = 6, int type = 2,int protocol = 1000)
(128)socket(int af = 6, int type = 2,int protocol = 1000)

(0)bind(SOCKET s = 128, const struct sockaddr FAR *addr, int namelen)
addr of ipx, sa_family = 6, sa_netnum = 00000000, sa_nodenum = 000000000000, sa_socket = 57367

(0)bind(SOCKET s = 124, const struct sockaddr FAR *addr, int namelen)
addr of ipx, sa_family = 6, sa_netnum = 00000000, sa_nodenum = 000000000000, sa_socket = 57111

(0)setsockopt(SOCKET s = 124,int level = 65535,int optname = 32,const char * optval,int optlen)//设置为广播方式,optname = SO_BROADCAST
optval = 01 00 00 00

(0)setsockopt(SOCKET s = 128,int level = 65535,int optname = 32,const char * optval,int optlen)//设置为广播方式
optval = 01 00 00 00

(20)sendto(SOCKET s = 124, const char FAR* buf, int len = 20, int flags = 0, const struct sockaddr FAR
*to, int tolen)//发送20个字节
addr of ipx, sa_family = 6, sa_netnum = 00000000, sa_nodenum = FFFFFFFFFFFF, sa_socket = 57111
//缓冲区字节内容
13 FFFFFFD3 14 00 02 00 00 00 50 58 45 53 FFFFFFC1 00 00 00 00 00 00 00

(20)recvfrom(SOCKET s = 124, char FAR* buf, int len = 532, int flags = 0, struct sockaddr FAR* from,
int FAR *fromlen)//接受广播
addr of ipx, sa_family = 6, sa_netnum = 00000000, sa_nodenum = E5CE09F8D000, sa_socket = 57111
//缓冲区内容
13 FFFFFFD3 14 00 02 00 00 00 50 58 45 53 FFFFFFC1 00 00 00 00 00 00 00

(20)recvfrom(SOCKET s = 124, char FAR* buf, int len = 532, int flags = 0, struct sockaddr FAR* from,
int FAR *fromlen)//再次接受广播
addr of ipx, sa_family = 6, sa_netnum = 00000000, sa_nodenum = E5CE09F8D000, sa_socket = 57111
//缓冲区内容
13 FFFFFFD3 14 00 02 00 00 00 50 58 45 53 FFFFFFC1 00 00 00 00 00 00 00

(20)sendto(SOCKET s = 124, const char FAR* buf, int len = 20, int flags = 0, const struct sockaddr FAR
*to, int tolen)//发送广播
addr of ipx, sa_family = 6, sa_netnum = 00000000, sa_nodenum = FFFFFFFFFFFF, sa_socket = 57111
13 FFFFFFD3 14 00 02 00 00 00 50 58 45 53 FFFFFFC1 00 00 00 00 00 00 00
...全文
316 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
舟中夜起 2001-10-17
  • 打赏
  • 举报
回复
对不起,我是Mr Kronus
这个其实不是问题,只是由于记录信息时产生的一种误解。
jinxi_gao 2001-10-16
  • 打赏
  • 举报
回复
我看不太懂你的话,先写文件指的是什么?
为什么偏偏广播包是这样,其他的不是这样呢
jinxi_gao 2001-10-16
  • 打赏
  • 举报
回复
to mrs kronus
那么你是怎么解决的呢?
舟中夜起 2001-10-15
  • 打赏
  • 举报
回复
谢谢jinxi_gao(CUP1000%) 
这其实是我文件记录数据方式产生的问题,由于多线程工作,就有可能虽然是稍后拦截到的数据,但是先写入文件。我用程序模拟后才发现这个问题。
jinxi_gao 2001-10-14
  • 打赏
  • 举报
回复

:)

你可以试试将SENDTO()中的LEN=20改成532
舟中夜起 2001-03-05
  • 打赏
  • 举报
回复
???

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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