windows下作网络编程不是一件很难的事,但在DOS下就不是很容易了,对很多人来说甚至是无从下手,本文详细阐述在DOS下进行网络编程的方法,下一篇文章讲给出一个具体的实例。
要在DOS下进行网络编程,首先要有一个Packet Driver,这是一个与硬件相关的驱动程序,符合FTP Software提出的PC/TCP Packet Driver规范,有兴趣的读者可以在下面地址下载这份规范:
http://blog.hengch.com/specification/packetdriver.pdf
我使用的机器主板上的网络芯片是rt8139,对应的Packet Driver是rtspkt.exe,驱动方法是在autoexec.bat中加入下面这一行:
@rtspkt 0x62
其中,0x62为中断向量,如果在你的机器上这个中断向量已经被占用,你可以改成其他的未被占用的中断向量号,按照PC/TCP规范,应该在0x60----0x80之间。
有了Packet Driver后,我们还需要有一个好用的能够提供TCP/IP Socket编程接口的函数库,在DJGPP下我们建议使用WATT-32库,这个库比DJGPP官方网站上提供的WATTCP库内容更加丰富,而且文档 完整和范例程序丰富,可以在下面网站上下载到:
http://www.bgnett.no/~giva/
WATT-32是以源代码的形式发行的,所以在使用前需要自行进行编译链接,整个过程如下(以下步骤是建立在你已经按照前面的博客文章《在DOS下的DJGPP+RHIDE安装实作》正确安装完毕DJGPP和RHIDE):
至此,安装已经完成,应该可以在c:/net/watt/lib目录下看到文件libwatt.a,这就是我们需要的网络函数库。
此时,可能仍然不能进行网络编程,还需要实际配置一下wattcp.cfg文件,前面提到,该文件放置在c:/net/watt/bin目录下,我们可以在该目录下看到该文件的样板,至少我们要在配置文件中配置IP地址和地址掩码,类似下面的形式:
my_ip=192.168.0.10
mask=255.255.255.0
有时,还需要配置网关和解析服务器,类似下面:
gateway=192.168.0.1
nameserver=202.106.134.133
nameserver可以写一个或者多个,每个解析服务器占一行。
一般情况下,配置这四个参数就足够了,如果希望配置更多的参数可以参考wattcp.cfg中的说明。
学习DOS下的网络编程,有一篇文章很值得一读,《Beej's Guide to Network Programming Using internet Sockets》,写此文时,其最新版本已经是2.4.5,2007年8月5日完成的,我最初看到这篇文章的版本还是1.5.5,是1999年1月13日 写的,看来作者还在不断更新,这篇文章的主页在:http://beej.us/guide/bgnet/
该文的1.5.5版在网上有多个版本的中文译本,以下是其中的一个:
http://www.chinalinuxpub.com/doc/pro/is.html
你也可以在下面地址下载到2007年8月5日写的该文的2.4.5版,PDF格式:
http://blog.hengch.com/article/bgnet_A4_2.pdf
该文中所提到的数据结构及函数均为BSD规范下的网络编程的数据结构和函数,在WATT-32库中均适用。
另外,读者可以在下面地址下载到关于WATT-32库中的所有函数的使用说明:
http://blog.hengch.com/Manual/watt-32.chm
实际上,WATT-32并没有出一本完整好用的手册,而是沿用了WATTCP的手册,但由于WATTCP的手册是收费的,所以在此不便公开,有对此手册感兴趣的读者可以访问下面网站并索取:
http://www.erickengelke.com/wattcp/docs.shtml
在WATT-32的bin目录下还有很多子目录,里面有很多的范例程序,在开始进行网络编程前,可以先看看这些范例程序,下面我们拿其中的一个范例来说明,如何在RHIDE下编译含有WATT-32库的程序。
我们以ftpsrv范例来说明如何在RHIDE下编译,首先进入该范例的目录,并用RHIDE打开范例程序:
c:/>cd/net/watt/bin/ftpsrv
c:/net/watt/bin/ftpsrv>rhide ftpsrv
这样,RHIDE会自动建立一个ftpsrv的project,目前该project中没有任何项目,按下面步骤把程序ftpsrv.c加入到project中:
alt+p-->选择Add Item-->选择ftpsrv.c-->回车-->按Esc键退出
这样我们就在屏幕下方的Project Window中看到了一个项目:ftpsrv.c,此时如果你选择编译链接(按ALT+C再选择Make),会在链接时产生一些错误,这是由于我们没有把WATT-32库链接进去的原因,按下面方法操作:
ALT+O-->选择Libraraies-->填入watt-->按SHIFT+TAB(此时光标应停在watt前的[ ]上-->按空格(看到[X])-->回车
此时再按如下步骤进行编译链接,就可以生成ftpsrv.exe。
ALT+C-->选择Make-->回车
至此,我们学会了在DJGPP下安装、配置WATT-32的过程,同时学会了在DJGPP下使用RHIDE编译使用WATT-32库的程序,我们已经做好了进行网络编程的准备。
下一篇:DOS下进行网络编程(下)
http://www.ecgui.com/html/tech/112.html