登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

DOS编程技术

讨论在纯DOS下的编程技术

 
 
 

日志

 
 
关于我

1984年大学毕业,1985年底有机会开始接触PC机,1986年开始在PC机上做开发工作,曾接触过MS-DOS、CP/M、UNIX、VMS、LINUX、iRMX等众多的操作系统并在上面从事技术开发,擅长做底层与硬件相关的软件开发,目前主要在DOS和LINUX平台下工作,主要从事软件,在硬件开发上也有一定造诣,亦有在8051系列、6502系列(凌阳)、z80系列、ARM、X86等各类平台下开发软硬件的经历。更详细情况可以参考http://resume.whowin.net

在DOS下进行网络编程(上)  

2008-04-09 10:06:26|  分类: 网络编程 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

    windows下作网络编程不是一件很难的事,但在DOS下就不是很容易了,对很多人来说甚至是无从下手,本文详细阐述在DOS下进行网络编程的方法,下一篇文章讲给出一个具体的实例。

    要在DOS下进行网络编程,首先要有一个Packet Driver,这是一个与硬件相关的驱动程序,符合FTP Software提出的PC/TCP Packet Driver规范,有兴趣的读者可以在下面地址下载这份规范:

          http://blog.whowin.net/specification/packetdriver.pdf(2017年3月17日注:该链接已经修复)

    我使用的机器主板上的网络芯片是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/

    (2011年4月15日备注:今天发现上面这个网址已经不再是watt-32库的页面了,经过查找,确认新的watt-32库的主页如下:http://home.broadpark.no/~gvanem/

  (2017年3月13日备注:今天发现上面这个链接也不对了,但是还可以跳转到下面这个网址:http://www.watt-32.net/

    WATT-32是以源代码的形式发行的,所以在使用前需要自行进行编译链接,整个过程如下(以下步骤是建立在你已经按照前面的博客文章《在DOS下的DJGPP+RHIDE安装实作》正确安装完毕DJGPP和RHIDE):

  1. 首先从上述网址上下载WATT-32,共有3个zip包,如下:
    watt32b*.zip,watt32s*.zip,watt32d*.zip
    其中“*”会随版本号不同有所不同。
  2. 通过U盘或其他媒介作为载体把3个文件拷贝到要配置的机器上,由于DOS不支持长文件名,需要把这三个文件分别改成:watt32b.zip,watt32s.zip和watt32d.zip
  3. 将三个文件解压缩到一个子目录下,例如: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
    在解压缩过程中,有一些共用文件会产生覆盖,没有关系,覆盖所有的文件。
  4. 在环境变量中增加变量:WATT_ROOT
    需要修改autoexec.bat,增加下面一行:
    set WATT_ROOT=c:\net\watt
    然后重新启动计算机。
  5. 产生make文件
    c:\>cd\net\watt\src
    c:\net\watt\src>configur djgpp
    这一步完成后会看到提示,要求你执行make -f djgpp.mak,照做就好了。
  6. 生成WATT-32库
    照上一步的提示
    c:\net\watt\src>make -f djgpp.mak
    这个步骤时间比较长,需要耐心等待一会。在编译过程中会有一些“警告”出现,不用管它们。
  7. 为使用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/(2017年3月13日注:这个版本已经到了version3.0.21,2016年6月8日完成的,这哥们一辈子孜孜不倦地在维护这份文档,这真是个好同志。)

    该文的1.5.5版在网上有多个版本的中文译本,以下是其中的一个:

        http://www.chinalinuxpub.com/doc/pro/is.html(2017年3月13日注:这个链接已经失效了)

    你也可以在下面地址下载到2016年6月8日写的该文的3.0.21版,PDF格式:

        http://blog.whowin.net/article/bgnet_A4_2.pdf(2017年3月13日修复了这个链接)

    该文中所提到的数据结构及函数均为BSD规范下的网络编程的数据结构和函数,在WATT-32库中均适用。

    另外,读者可以在下面地址下载到关于WATT-32库中的所有函数的使用说明:

        http://blog.whowin.net/Manual/watt-32.chm(2017年3月13日修复了这个链接)

    实际上,WATT-32并没有出一本完整好用的手册,而是沿用了WATTCP的手册,但由于WATTCP的手册是收费的,所以在此不便公开,有对此手册感兴趣的读者可以访问下面网站并索取:

        http://www.erickengelke.com/wattcp/docs.shtml(2017年3月13日注:这个链接已经光荣失效)

    在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库的程序,我们已经做好了进行网络编程的准备。

 

 

 

  评论这张
 
阅读(6879)| 评论(10)

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018