纯DOS下的 TCP/IP编程

来源:互联网 发布:淘宝清仓在哪里 编辑:程序博客网 时间:2024/04/30 02:40

DOS下的SOCKET编程

 

这是我摘抄的别人的心得,呵呵。

 

为了实现DOS机与PC机之间的TCP/IP通信,必须找到相关控制SOCKET的库。

本来有个国外网站www.wattcp.com免费提供WATTCP库了实现DOS中的TCP/IP协议栈,但是它却不提供说明文档,所以这块鸡肋先放哪吧。

 

话说那个写心得的又到一个叫ERTOS的库,是从WATCP库拓展来的(不仅实现了TCP/IP协议栈,还实现了DOS 下的多线程)。后来经过千辛万苦就得到了此层库及头文件。

 

然后用 windows98 + BC4.5 for DOS 编写了 在DOS622下运行的网络程序。

 

完成了程序后,还需要第二步;

 

第二步:安装网卡驱动

     以上使用的库以DOS Ethernet Packet Driver作为底层驱动。Packet Driver是一个硬件相关的设备驱动程序,不同网卡的Packet Driver是不同的,一般可在网卡安装盘DOS目录或PCPKT目录下找到,也可到www.simtel.net下载。找出目录下的.com文件,可能有 好几个,可以逐个试。以他的任务为例,他使用过NE2000兼容网卡和D-LINK网卡,都在它们的驱动包里找到了Packet Driver.放入DOS中手工运行.com文件:NE2000 0X62或者DLKFET 0X62(62 和60都是网卡的中断号,二者皆可)。成功后出现网卡信息,显示正确的网卡mac地址,否则,提示错误信息或者显示网卡的广播地址。告诉你Packet Driver和网卡不匹配。安装成功后,系统即可运行TCP/IP程序,可将该命令加载到autoexec.bat文件中。Packet Driver 需要每次启动后都重新加载。

     另外,建议在Config.sys中加入对扩展内存的支持,并将DOS驻留到高端。下面是一个完整的Config.sys文件的例子。

Config.sys

DEVICE=HIMEM.SYS

DOS=HIGH,UMB

FILES=40

代码编写:

准备工作都做完了,接下来即可编写代码了。

以下为客户端代码例子:

#include <stdio.h>

#include <string.h>

#include <rtos.h>

#include <net.h>

#include <mem.h>

#include <stdlib.h>

#include <ctype.h>

 

void main(void)

{

static tcp_Socket s;

char remotbuf[100] = "lanry";

char serverIp[20] = "192.168.0.100"; //服务器IP地址

char AddrBuf[50];

char szRead[512];

DWORD host;

int status;

int rlen = 5;

 

sock_init(); /*初始化协议栈*/

printf("WATTCP.CFG address is: [%s]/n", inet_ntoa(AddrBuf, gethostid()));

printf("Connecting to %s:%d/n", serverIp, 9104);

host = inet_addr(serverIp); /*服务器端IP*/

if(!tcp_open(&s, 0, host, 9104, NULL)) /*连接服务器*/

{

printf("Unable to open TCPC session/n");

goto sock_err;

}

printf("Wating to be established/n/r");

sock_wait_established(&s, sock_delay, NULL, &status);

printf("Connection is Successful!/n");

 

/*以下代码用户可以根据需要修改*/

 

while(1)

{

rt_sleep(10);

tcp_tick(NULL); //给协议栈执行机会

sock_write(&s, (byte *)remotbuf, rlen); //向服务端发送信息

//接收服务端发送来的信息

if(sock_dataready(&s))

{

memset(szRead, 0, 512);

//无阻塞接收数据,另外一个阻塞接收数据函数为sock_read

sock_fastread(&s, (byte*)szRead, sizeof(szRead));

}

}

 

sock_err:

puts("Unable to connect to the server!/n");

sock_close(&s);

 

}

 

编译运行看看,98下是否出现“NO PACKET DRVIER FOUND”?

没问题,因为PACKET DRIVER是针对纯DOS下的驱动,所以98下无法进行socket初始化。

 

设置IP

DOS系统下IP的概念不只是相对机器而言,也相对程序而言。同一台机器中不同的TCP程序也可有不同的IP。机器的IP地址只有在程序运行时才能确定。使用WATTCP库的TCP程序,其IP设置在程序同目录下的wattcp.cfg文件中。Socket初始化时系统在当前路径和设置路径中查找配置文件,把配置文件放在当前路径下以便系统能找到配置文件。最小的配置文件包含以下内容:本地IP 地址、子网掩码、网关。例如:

my_ip=192.168.0.8                                   #IP地址

netmask=255.255.255.0               #子网掩码

nameserver=192.168.0.1            #名称服务器

gateway=192.168.0.1                          #网关

domainslist="uwaterloo.ca"                    #域列表

配置文件可以包含任何服务器或客户机需要的参数。如ftp服务的密码等。若只是进行C/S模式通信,则按如上配置文件已经够用。

五、测试

既然是C/S模式编程,有客户端也应该有服务端,读者可自己写个简易服务端以供测试。PCPC之间可使用对等线或普通网线互连,服务端设置好IP,客户端重启进入DOS系统,加载PACKET DRIVER。确保wattcp.cfg设置正确。可以运行程序了。呵呵,是不是看到服务端在accept函数上的断点跳过去了?如果答案是肯定的,我的这篇文章目的也达到了!

 

 

 

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 精子头部畸形率高怎么办 椎底动脉供血不足怎么办 颈椎动脉供血不足怎么办 颈椎病引起头晕脑供血不足怎么办 淘宝店被释放了怎么办 被枣蝎子蛰了怎么办 六角螺丝拧花了怎么办 苹果螺丝滑丝了怎么办 六角螺帽拧花了怎么办 六角螺母拧花了怎么办 内六角螺丝滑丝怎么办 十字螺丝拧花了怎么办 梅花螺丝滑丝了怎么办 螺丝孔道滑丝了,怎么办 锅把铆钉松啦怎么办 膨胀螺丝孔大了怎么办 戒指不圆了怎么办妙招 眼镜框的腿断了怎么办 弹簧腿眼镜坏了怎么办 vps搭建ss被墙怎么办 注塑机螺杆黏料怎么办 分解师耐久度0了怎么办 有鼻涕擤不出来怎么办 擤鼻涕耳朵堵了怎么办 脸用什么都过敏怎么办 1岁宝宝流清鼻涕怎么办 2岁宝宝流清鼻涕怎么办 3岁儿童流清鼻涕怎么办 鼻子老是流清水鼻涕怎么办 5岁儿童感冒鼻塞怎么办 3岁宝宝感冒鼻塞怎么办 宝宝9个月流鼻涕怎么办 鼻涕又黄又粘稠怎么办 鼻子一直流黄水怎么办 宝宝眼屎多又黄怎么办 宝宝痰多鼻涕多怎么办 小孩痰多鼻涕多怎么办 用qq登不了微博怎么办 中国银行u盾丢了怎么办 我的世界遇见him怎么办 考军校年龄超了怎么办