精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>编程开发>>C/C++>>资料汇编----------藏经阁>>使用winsock2发送IPX/SPX数据包简明参考

主题:使用winsock2发送IPX/SPX数据包简明参考
发信人: nnduke()
整理人: skyice(1999-12-26 01:15:44), 站内信件
哈哈,看到前辈们灌的水那么多,小弟也来献丑...斑竹,让网易大妈给多
点经验值......。谨以此文怀念girlrong...... 旁音:"好象在咒girlrong
已经死了似的。兄弟们,上!给我往死里打!" @%!?(*&#^#&@*! 啊------ 

使用winsock2发送IPX/SPX数据包简明参考

小弟近来为dos下的ipx/spx程序如何改成windows运作很是头痛,强攻了
一个星期,感觉好象不是我在控制机器而是微软......。以下是一点经验:

第一步 使用WSAStartup()初始化动态链接库winsock32.dll 要版本2.0
       以上的。1.1的据资料说不支持多协议。 

第二步 使用socket=socket(AF_IPX, SOCK_DGRAM, NSPROTO_IPX)打开一个
套接字。这里的套接字和DOS下的ipx/spx的套接字不同,我个人
认为它是一个套接字的索引,tcp/ip也是用这个函数来打开套接字
的,区别在于参数不同。第一个使用AF_IPX标明是ipx的地址格式。
第二ipx是无连接的,所以使用数 据报SOCK_DGRAM,第三个参数
就是使用的协议了。winsock2.h里共列有23种地址类型。 

第三步 选择套接字要进行的操作 
BOOL fBroadcast=TRUE;
setsockopt (sock, SOL_SOCKET,SO_BROADCAST, 
(CHAR *) &fBroadcast,sizeof ( BOOL));
如果你要发送或接收一个广播报文就必须设置SO_BROADCAST位。
哪怕象DOS下把发送地址写成0xFFFFFFFFFFFF也不行。

第四步 填写SOCKADDR_IPX结构的内容,准备绑定到申请的socket上
SOCKADDR_IPX listenaddr;
memset(&listenaddr, 0, sizeof(addr));    // Clear address
    pSockAddr = (PSOCKADDR_IPX)&listenaddr;  // Set pointer
        pSockAddr->sa_family = AF_IPX;     // IPX Family
        // Make sure socket number is in network order
        pSockAddr->sa_socket=ListenSocket;/*  USHORT ListenSocket */
最后的ListenSocket才是DOS下IPX/SPX的套接字。

第五步 绑定申请的socket在本机地址上,这是必须的步骤。
bind(sock,(PSOCKADDR) pSockAddr,sizeof(SOCKADDR_IPX))

第六步 设置有IPX/SPX报文到来是网络驱动协议发给你的消息。
#define MW_DATAREADY WM_USER+101   /*  这句放到头文件里  */
WSAAsyncSelect(sock,m_hWnd,MW_DATAREADY,FD_READ | FD_CLOSE)
使用ON_MESSAGE(MW_DATAREADY,myRecive)   /*   VC++ :(    */
myRecive是你得到该消息后执行的处理例程

* 现在出来找工作,家家都在要求上注明要会用vc++的,我原来可是用BCB的....
..

第七步 接收报文 recv(sock, pBuffer, BufferLen, 0)注意如果报文长度超出

BufferLen就会出错。

第八步 设置发送地址并发送报文 sendto(sock,pBuffer,BufferLen,0,
(SOCKADDR *) &TargetIpxAddr,sizeof (SOCKADDR_IPX))


到这里基本可以用了,我做的程序已经测试通过了,DOS <-> WIN95、WIN95 <->W
IN95 
但是这还不够,你想实用就会发现还有许多要做的...真怀念DOS下的IPX--全权控

PC的时代。

实际上还可以通过调用wsipx.vxd来做,只是接口...,NOVELL的SDK也不错,可是我
看不懂,
似乎少头文件nwipxspx.h和少动态和静态链接库nwipx.dll,不知我的NDK是第几版
的 :(。
最后的终极绝招是写VXD直接操作网卡,这个需要你有坚强的毅力(说真的,这点最
重要)
要学懂DDK最好有VxdTool,还要懂网卡寄存器,不懂?那还要反编译网卡的驱动,
嘿!
晕倒了吧 ? 要想不通过DDK、win95,你要知道怎样枚举PCI、ISA 总线,绕过bi
os ? 还
要懂 pnp bios 设计规范。什么,你...你还要底层一点的? 你自己做一台计算机
吧......


参考资料:
VC帮助        Platfrom SDK->Network IPC Services->Windows Winsocks 2

MSDN VC SAMPLES               WINSOCK\*.* 
Introduction to Networking    winsock.pdf

nnduke 1999.12.24

--
喜欢星星的我,一样喜欢星星背后那永恒的黑暗。

※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 202.103.236.248]

[关闭][返回]