发信人: 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]
|
|