PC104下DOS系统的TCPIP协议族安装使用及网卡驱动的安装方法

时间:2022-05-09 00:26:03

最近要做一个项目,需要在pc104上实现tcpip通信协议,该pc104运行的是dos系统,系统配置如下:

dos622

ne2000兼容网卡

Borland C 3.1

经过搜索资料,决定采用wattcp协议族进行tcpip通信,找到两篇参考文献,如下:

http://blog.csdn.net/dos5gw/article/details/5267737

http://blog.csdn.net/dos5gw/article/details/5429582

这两篇参考文献讲述了利用wattcp的整个过程,但是在我的应用过程中,遇到了一些棘手的问题,现在将操作过程中我的心得体会记录一下:

1:网卡驱动的安装

对于我使用的ne2000网卡,所对应的网卡驱动就一个文件,文件名为ne2000.com,其他类型的网卡驱动可以在如下网站找到(这里的网卡驱动指的是packet driver):

http://www.crynwr.com/drivers/

下载了对应的驱动后可直接放在dos中运行,对于ne2000,运行需要指定参数,这是我花了四天作为代价才发现的问题关键,因为我在一切都准备就绪以后,将dos作为服务器端或者客户端都无法建立连接。可以在autoexec.bat文件中指定如下参数,让ne2000启动时自动运行:

ne2000 -n 0x62 15 0x300

我对上述参数进行如下解释:

-n :这个参数是关键,目的是将ethernet_802.3的数据包转换成8137的数据包,没有该参数就无法建立连接进行数据的收发。ne2000还有一些其他可用的参数,比如-u表示卸载驱动等,具体参数的作用可以在dos下运行ne2000,首次运行时会有参数提示。

0x62 :该参数为软件中断号,可以为0x60 到0x70之间的任何值。

15 :该参数为网卡在物理电路板上对应于8259中断控制器的中断号,查询pc104的手册,可以查到我的网卡对应的是15号,即第二片8259的最后一个中断。

0x300: 该参数为网卡对应的物理地址,该地址在成功运行ne2000以后会自动获得,或者直接查看pc104的手册得到。

经过上面的配置以后,将会出现成功的提示,获得正确的mac地址,如果得到的mac地址为FF.FF...说明配置不正确。

至此,网卡驱动安装完毕

2:驱动安装完毕后,就可以按照上面提到的两篇文章进行操作了,对于我来说下面就没有什么问题了,但是,值得注意的是,利用wattcp库是,如果采用的是那两篇文章中提到的工程模板的话,没问题,如果是自己创建工程的话,有一点需要特别注意:就是包含wattcp的程序不能进行调试,即debugger必须为none,否则会出现编译错误:bad object file record in module wattcphg.lib.

如果需要对程序进行调试,就必须自己生成lib文件,具体过程我没有试过,但是下载下来的wattcp库的说明文档以及makefile里有参数,主要是对CFLAG参数的配置,请自己研究。

新增一个问题的及解决方案:

在调试的过程中,发现dos作为服务器可以被windows下的客户端连接,但是它作为客户端时却无法连接windows下的服务器,最后找到问题所在,由于函数

tcp_open(&s, 0, host, 9104, NULL)

的第三个参数为host的ip地址对应的值,这个值是由函数

 host = inet_addr(serverIp);

得到的,但是,在定义host变量时,我将其定义为了int类型,从而导致无法连接服务器,这是由于inet_addr()函数的返回值为unsigned long 类型的,定义为int就丢失一些信息,导致tcp_open()函数找不到对应的ip地址以进行连接,从而导致连接失败,因此,只需要将host定义为 unsigned long 类型就可以解决问题。

另外,在调试过程中还发现一个问题,就是当dos与windows都连接在路由器上时,发送和接受都没有问题,但是当连接在交换机或者集线器上时,存在严重的包的滞后,至今并未解决。同时,还发现了传输过程中出现的丢包问题。有待进一步解决。