纯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模式编程,有客户端也应该有服务端,读者可自己写个简易服务端以供测试。PC和PC之间可使用对等线或普通网线互连,服务端设置好IP,客户端重启进入DOS系统,加载PACKET DRIVER。确保wattcp.cfg设置正确。可以运行程序了。呵呵,是不是看到服务端在accept函数上的断点跳过去了?如果答案是肯定的,我的这篇文章目的也达到了!
- 纯DOS下的 TCP/IP编程
- 实现dos real model下的TCP/IP编程(上) 关键字dos, socket, tcp ip, wattcp
- 实现dos real model下的TCP/IP编程(下)
- 实现dos real model下的TCP/IP编程(上)
- C语言实现DOS下的TCP/IP通信
- DOS 的TCP/IP 开发包!
- linux下tcp/ip编程
- WINDOWS (服务器) 和 DOS(客户端) 网络互连 基于TCP/IP的编程实现
- WINDOWS (服务器) 和 DOS(客户端) 网络互连 基于TCP/IP的编程实现
- WINDOWS (服务器) 和 DOS(客户端) 网络互连 基于TCP/IP的编程实现
- WINDOWS (服务器) 和 DOS(客户端) 网络互连 基于TCP/IP的编程实现
- WINDOWS (服务器) 和 DOS(客户端) 网络互连 基于TCP/IP的编程实现
- 用wattcp库实现实模式dos下的TCP/IP通讯(总算完整了)
- 用wattcp库实现实模式dos下的TCP/IP通讯
- Linux下的TCP/IP编程----socket的可选项
- TCP/IP下的组播编程基础
- TCP/IP下的组播编程基础
- linux下tcp-ip栈和Netfilter的分析编程
- 淘宝登录源代码分析
- Dijkstra算法一点点感悟
- 买基金节约申购费
- ASP.Net 2.0窗体身份验证机制
- seo优化
- 纯DOS下的 TCP/IP编程
- 10个国外Ajax及Javascript实例资源网站
- 将 ASP.NET 2.0 应用程序服务配置为使用 SQL Server 2000 或 SQL Server 2005
- 实现任何页面静态化源码
- Java and XML_读书笔记_2010-05-17
- smbget smbput
- 2010年5月18日(变量和表达式)
- 开张除草
- Swing的设计是MVC的典范