中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS开发编程 & 发展交流 (开发室) » [原创]在DOS下进行网络编程(上)
作者:
标题: [原创]在DOS下进行网络编程(上) 上一主题 | 下一主题
whowin
初级用户





积分 134
发帖 37
注册 2006-9-28
状态 离线
『楼 主』:  [原创]在DOS下进行网络编程(上)

文章是从我的网志中贴过来的,其中的图片可能过不来,看完整内容,请访问我的网志:
点击进入《DOS编程技术》

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):

首先从上述网址上下载WATT-32,共有3个zip包,如下:
watt32b*.zip,watt32s*.zip,watt32d*.zip
其中“*”会随版本号不同有所不同。
通过U盘或其他媒介作为载体把3个文件拷贝到要配置的机器上,由于DOS不支持长文件名,需要把这三个文件分别改成:watt32b.zip,watt32s.zip和watt32d.zip
将三个文件解压缩到一个子目录下,例如:c:\net\watt
c:\>md net
c:\>md net\watt
c:\>unzip32 watt32b.zip -d c:\net\watt
c:\>unzip32 watt32s.zip -d c:\net\watt
c:\>unzip32 watt32d.zip -d c:\net\watt
在解压缩过程中,有一些共用文件会产生覆盖,没有关系,覆盖所有的文件。
在环境变量中增加变量:WATT_ROOT
需要修改autoexec.bat,增加下面一行:
set WATT_ROOT=c:\net\watt
然后重新启动计算机。
产生make文件
c:\>cd\net\watt\src
c:\net\watt\src>configur djgpp
这一步完成后会看到提示,要求你执行make -f djgpp.mak,照做就好了。
生成WATT-32库
照上一步的提示
c:\net\watt\src>make -f djgpp.mak
这个步骤时间比较长,需要耐心等待一会。在编译过程中会有一些“警告”出现,不用管它们。
为使用WATT-32库配置环境变量
在编译完成后,我们还要在autoexec.bat里增加四个环境变量,我们在步骤4中增加的WATT_ROOT环境变量仅在编译的过程中有用,实际使用中并不需要这个环境变量,所以可以去掉(当然,不去掉也没有关系)。
在autoexec.bat中增加下面四行:
set WATTCP.CFG=c:\net\watt\bin
set ETC=c:\net\watt\bin
set C_INCLUDE_PATH=c:/net/watt/inc
set LIBRARY_PATH=c:/net/watt/lib
WATTCP.CFG是WATT-32的配置文件wattcp.cfg所在的位置,你也可以把wattcp.cfg放在其他目录下,比如:c:\net\cfg目录下,但要记得把set WATTCP.CFG=c:\net\watt\bin这句改成:
set WATTCP.CFG=c:\net\cfg
    至此,安装已经完成,应该可以在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编程的文章看我的网志

点击进入《DOS编程技术》

[ Last edited by whowin on 2008-5-9 at 11:50 AM ]

2008-5-9 11:35
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
guanmao348
新手上路





积分 12
发帖 6
注册 2010-9-10
状态 离线
『第 2 楼』:  支持!顶!

支持!顶!

2010-9-22 14:13
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
zh7908
新手上路





积分 4
发帖 2
注册 2010-10-21
状态 离线
『第 3 楼』:  

新手顶,但总的思想应该是快速编程,工作量规模化。命令行应该是干这个的。

2010-10-22 18:30
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: