标题: 求助 关于dos网络编程(winsail)
[打印本页]
作者: tianmian
时间: 2008-1-13 11:32
标题: 求助 关于dos网络编程(winsail)
用的是bc3.1+winsail2.0;按照packet driver里面的说明文档把网卡驱动和相关的系统配置文件弄好了,在建立的工程中的config.sys也将网卡驱动开关加进去了。
但在调用socket()的时候总是返回1,查看得出错代号为2;
请问怎么解决?
作者: tianmian
时间: 2008-1-13 11:36
我自己感觉很有可能是网卡驱动之类的没起来
作者: firstsail
时间: 2008-1-14 14:22
标题: 要注册TCP/IP协议栈
如果要使用WinSail的TCP/IP协议栈,要有以下三个条件同时成立
(1)安装Packet网卡驱动程序,如果成功,会出现网卡的物理地址(即NIC地址)xx:xx:xx:xx:xx
(2)WinSail的配置文件Config.Sys中的NetCard段的NetCard键值配置为TRUE
[NetCard]
NetCard = TRUE
(3)在main函数中,调用InitSystem函数之前,须向WinSail V2.0注册TCP/IP协议栈
::AfxRegisterNetcardEntry(::GlobalInitSocket, ::GlobalCloseSocket, ::EthernetEntry);
---------------------------------------------------------------------------------------------------
您可以用WinSail的演示程序Sail3000查看网络是否已经可靠运行,首先将Sail3000工程文件中的Config.Sys文件“NetCard”段的“NetCard”键值置为“TRUE”,运行Sail2000.exe文件,在桌面上有一图标“网络设置”,如果NIC地址不是“00:00:00:00:00”,那么您的Packet网卡驱动程序就已经加载成功了。
您程序的IP地址是由“Netcard”段的“My_IP”键值指定,在演示程序中,我将它配置成了169.254.82.133了。
[
Last edited by firstsail on 2008-1-14 at 02:52 PM ]
作者: tianmian
时间: 2008-1-15 19:37
网卡驱动已经起来了,我进行了一些socket编程,用的是udp通信协议,创建socket-绑定-发送数据;然而发送数据的时候老返回错误?
请问firstsail能给一段用winsail编程的例子程序吗
作者: firstsail
时间: 2008-1-15 20:51
(1)下载“
http://www.firstsail.com.cn/software.html”的WinSail V2.0
(2)解压后,运行“WinToDos”目录中的“Udp_Demo.exe”,作为UDP协议的上位机,正确填写准备与之通讯的下位机IP地址及其端口号,程序中默认下位机的IP地址是“169.254.82.133”和端口号是“6200”,最后“点击启动UDP协议按钮”启动UDP
(3)解压后将Sail3000目录拷到纯DOS环境中。
(4)进入纯DOS环境运行WinSail V2.0的演示程序Sail2000.exe,进入桌面上的图标“QQ聊天窒”,别忘了将Sail3000中的Config.Sys文件的“Netcard”段的“Netcard”键值配置为“True”.
您可以发送一些文字,看一看上位机Udp_Demo是否收到内容。
(5)下位机的UDP协议应用例子,可看Sail3000目录中的Remote_N.Cpp文件和qq.cpp两个文件
Remote_N.cpp文件实现“文件传输”、“下位机界面上传”、“鼠标键盘按钮接收”等功能。
qq.cpp文件实现“QQ聊天窒”的聊天程序
在调试WinSail的“TCP/IP”协议时,请在纯DOS环境下进行!
[
Last edited by firstsail on 2008-1-15 at 08:58 PM ]
作者: firstsail
时间: 2008-1-15 21:15
标题: 请重新下载WinSail
不好意思,请重新到"http://www.firstsail.com.cn/software.html"下载更新后的“Sail3000”目录和“UdpDemo.Exe”程序
作者: tianmian
时间: 2008-1-15 21:17
非常感谢你的指导,我现在去试试看
作者: firstsail
时间: 2008-1-15 21:31
如果还有故障,可能:
(1)您的“路由器”或“集线器”过滤了您的IP包。建议直接采用“机联机”形式调试,注意“机联机”的网络线与连接“集线器”或“路由器”的网络线是不同的。
(2)或者将下位机的IP地址改为与上位机一样的“网络”地址。
[
Last edited by firstsail on 2008-1-15 at 09:33 PM ]
作者: tianmian
时间: 2008-1-15 23:00
按照你说的做了提示“程序没有加载winsail tcp/udp协议栈”
作者: tianmian
时间: 2008-1-15 23:16
这个应该是在winsail系统起来之前已经注册好的,程序为什么这样提示呢
我qq是70344130,不如加我为好友吧,我向你多多学习
作者: firstsail
时间: 2008-1-16 13:27
那是您的“Packet驱动程序”没有加载成功。
请提供以下几个信息上来
(1)网卡的型号
(2)C盘根目录下Config.Sys内容
(3)C盘根目录下AutoExec.bat内容
(4)是直接使用Packet驱动程序,还是NDIS2程序转Packet驱动程序。
1:如果是直接使用Packet驱动程序,此时的驱动程序是“Com”后缀文件或“Exe”后缀文件。注意加软中断向量参数0x60,如
LH Rtspkt.com 0x60
2:如果是使用NDIS2驱动程序转Packet驱动程序,此时的驱动程序是“Dos”后缀文件。到“网站”下载“PacketDriver驱动程序”,解压后参考“说明.txt”文件
[
Last edited by firstsail on 2008-1-16 at 01:36 PM ]
作者: tianmian
时间: 2008-1-16 16:49
但是我看过了 NIC 确实不为“00:00:00:00:00”,网卡驱动是按你提供的网站上的说明加载的
config.sys 如下:device=c:\windows\himem.sys/testmem:off
device=c:\windows\emm386.exe noems novcpi
devicehigh=c:\intel\protman.dos /i:c:\intel\RTL81xx
devicehigh=c:\intel\dis_pkt.dos
devicehigh=c:\intel\RTL81xx\Rtsnd.dos
dos=high,umb
stacks=12,256
files=30
注:intel是我网卡驱动所在的文件夹
autoexec.bat :
path c:\windows;c:\windows\command
lh smartdrv
c:\intel\netbind.com
还有一个现象,我想在程序中(winsail启动之后)用printf,或者CHPrintf打印一些中间标志信息,但我发现在程序运行的时候这些根本没输出,但看程序执行流程,这些语句是肯定被执行过的
作者: tianmian
时间: 2008-1-16 16:52
对了,在autoexec.bat中系统好像自动在c:\intel\netbind.com加上了
rem - By Windows 98 Network - c:\intel\netbind.com
作者: firstsail
时间: 2008-1-16 18:12
有没有加载成功“Packet Driver”最简单的方法就是用debug程序查看60H中断向量的内容有没有"PKT DRVR"的字符串
(1)第一步,在DOS命令行下执行“Debug”
(2)第二步,键入“d180”后回车,
(3)第三步,注意D180指示的连续四个字节jj kk mm nn,如果是00 00 00 00,则没有加载成功,否则第四步
(4)第四步,键入d nnmm:kkjj回车(注:nn mm kk jj是第三步时的结果)
(5)第五步,查看在屏幕右边有没有"PKT DRVR"的字符串,如果有则加载成功了,否则没有加载成功
[
Last edited by firstsail on 2008-1-16 at 07:16 PM ]
作者: firstsail
时间: 2008-1-16 18:16
Quote: |
Originally posted by tianmian at 2008-1-16 16:52:
对了,在autoexec.bat中系统好像自动在c:\intel\netbind.com加上了
rem - By Windows 98 Network - c:\intel\netbind.com |
|
(1)改回“c:\intel\netbind.com”
(2)Win98启动时迅速按住“F8”功能键,会弹出“Win98”菜单,共有6个菜单项,选择第“5”项进入“纯DOS”,即DOS7.0,或者将C盘根目录下的MsDos.Sys文件的“BootMenu”设置为“1”后重启动Win98,等到自动弹出菜单后执行第“5”项进入DOS7.0。修改msdos.sys文件前要先去掉文件的“只读”属性
[Options]
BootMulti=0
BootMenu=1
BootWin=0
BootGui=0
(3)请将Protocol.ini文件贴进来看一下
[
Last edited by firstsail on 2008-1-16 at 07:03 PM ]
作者: tianmian
时间: 2008-1-16 18:52
改回“c:\intel\netbind.com”了,运行debug测试,d180之后,没出现xxxx:0183H,右边也没"PKT DRVR"字符;
Protocol.ini为
[protman]
drivername=PROTMAN$
[pktdrv]
drivername=PKTDRV$
bindings=nic
intvec=0x60
chainvec=0x66
[nic]
DriverName=RTSND$
;MaxMultiCasts=10
;TxBuffers=4
;RxBuffers=4
;Medium=_100Full
测试环境存dos
对于打印输出的问题,有执行 “InitSystem()”函数
作者: tianmian
时间: 2008-1-16 19:05
这么说我的网卡驱动是肯定没起来了
作者: tianmian
时间: 2008-1-16 19:06
再请教一个问题,dos下网络IP地址怎么设置
作者: firstsail
时间: 2008-1-16 19:09
标题: 搞错地方了!
有没有加载成功“Packet Driver”最简单的方法就是用debug程序查看60H中断向量的内容有没有"PKT DRVR"的字符串
(1)第一步,在DOS命令行下执行“Debug”
(2)第二步,键入“d180”后回车,
(3)第三步,注意xxxx:0180指示的连续四个字节jj kk mm nn,如果是00 00 00 00,则没有加载成功,否则第四步
(4)第四步,键入d nnmm:kkjj回车(注:nn mm kk jj是第三步时的结果)
(5)第五步,查看在屏幕右边有没有"PKT DRVR"的字符串,如果有则加载成功了,否则没有加载成功
Quote: |
Originally posted by tianmian at 2008-1-16 19:06:
再请教一个问题,dos下网络IP地址怎么设置 |
|
在WinSail的私有Config.Sys文件的“Netcard”段的“My_IP”键值指定
[Netcard]
My_IP = 169.254.82.133
[
Last edited by firstsail on 2008-1-16 at 07:15 PM ]
作者: tianmian
时间: 2008-1-16 19:14
d180在右边确实没出现PKT DRVR字样,但在启动的时候有提示Ethernet address 00e04cf...等等字样。
作者: firstsail
时间: 2008-1-16 19:18
标题: 不是“u nnmm:kkjj”,而时“d nnmm:kkjj”了!
有没有加载成功“Packet Driver”最简单的方法就是用debug程序查看60H中断向量的内容有没有"PKT DRVR"的字符串
(1)第一步,在DOS命令行下执行“Debug”
(2)第二步,键入“d180”后回车,
(3)第三步,注意xxxx:0180指示的连续四个字节jj kk mm nn,如果是00 00 00 00,则没有加载成功,否则第四步
(4)第四步,键入d nnmm:kkjj回车(注:nn mm kk jj是第三步时的结果)
(5)第五步,查看在屏幕右边有没有"PKT DRVR"的字符串,如果有则加载成功了,否则没有加载成功
Quote:
Originally posted by tianmian at 2008-1-16 19:06:
再请教一个问题,dos下网络IP地址怎么设置
在WinSail的私有Config.Sys文件的“Netcard”段的“My_IP”键值指定
[Netcard]
My_IP = 169.254.82.133
作者: tianmian
时间: 2008-1-16 19:18
这么看来是没有网卡驱动没加载成功,因为jj,kk,mm,nn的位置全为0
作者: firstsail
时间: 2008-1-16 19:21
Quote: |
Originally posted by tianmian at 2008-1-16 19:14:
d180在右边确实没出现PKT DRVR字样,但在启动的时候有提示Ethernet address 00e04cf...等等字样。 |
|
(1)显示了NIC地址,只能说明加载了NDIS驱动
(2)只有执行了NetBind.Com程序后才能将NDIS真正转成Packet驱动,注意Protman.Exe与NetBind.Com文件须同一目录
NDIS驱动是软微公司提出的网络协议接口标准
Packet驱动是由xxxx公司提出的网络协议接口标准
IPX驱动是由Novel公司提出的网络协议接口标准
[
Last edited by firstsail on 2008-1-18 at 09:58 AM ]
作者: tianmian
时间: 2008-1-16 19:25
那问题应该是出在netbind上,该怎么解决呢
作者: firstsail
时间: 2008-1-16 19:26
标题: 直接使用Packet驱动
您如果是8139网卡的话,则可直接在DOS命令行下执行“RtsPkt.Com 0x60”,从而加载Packet驱动程序,在Sail3000\Internet\Other目录中可以找到该文件,如果加载成功,会显示NIC地址xx:xx:xx:xx:xx,然后才用Sail3000的“QQ聊天窒”试一试
[
Last edited by firstsail on 2008-1-16 at 07:30 PM ]
作者: tianmian
时间: 2008-1-16 19:31
那这样一个东西可以加载到autoexec.bat中去吗?我用的是realteck的8139网卡,按照你在parcket driver说明文件里面去加载怎么就出错呢?
作者: firstsail
时间: 2008-1-16 19:40
Quote: |
Originally posted by tianmian at 2008-1-16 19:31:
那这样一个东西可以加载到autoexec.bat中去吗?我用的是realteck的8139网卡,按照你在parcket driver说明文件里面去加载怎么就出错呢? |
|
如果你直接执行“Rtspkt.Com”的话,则C盘根目录下的Config.Sys和“autoexec.bat”这样修改
Config.Sys文件如下
device=c:\windows\himem.sys/testmem:off
device=c:\windows\emm386.exe noems novcpi
rem devicehigh=c:\intel\protman.dos /i:c:\intel\RTL81xx
rem devicehigh=c:\intel\dis_pkt.dos
rem devicehigh=c:\intel\RTL81xx\Rtsnd.dos
dos=high,umb
stacks=12,256
files=30
autoexec.bat文件如下 :
path c:\windows;c:\windows\command
lh smartdrv
rem c:\intel\netbind.com
lh c:\sail3000\internet\other\rtspkt 0x60
上面的rtspkt.com文件所在目录请根据实际情况修改
[
Last edited by firstsail on 2008-1-16 at 07:41 PM ]
作者: tianmian
时间: 2008-1-16 19:54
我吧config.sys中关于网卡配置的全去掉了,运行sail3000成功了;
有一个问题是不是加载了winsail之后就不能用printf函数了?我感觉winsail不太稳定,程序运行的时候一会行,一会不行
作者: firstsail
时间: 2008-1-16 20:01
Quote: |
Originally posted by tianmian at 2008-1-16 19:54:
我吧config.sys中关于网卡配置的全去掉了,运行sail3000成功了;
有一个问题是不是加载了winsail之后就不能用printf函数了?我感觉winsail不太稳定,程序运行的时候一会行,一会不行 |
|
使用网络功能,系统内存最起码要在“8M”以上
在16色下能用printf函数,但在256色不能使用printf函数,可使用图形方式的显示函数ChPrintf()代替。
WinSail所有的中文显示,都是通过调用ChPrintf()函数实现的
(1)在屏幕的x = 100, y = 50处用“笔画为白色,底色为红色,显示“我正在学习WinSail”,文字放大数为1倍,则
::ChPrintf(100, 50, WHITE, RED, 1, 1, "我正在学习WinSail");
(2)在屏幕的x = 100, y = 50处用“笔画为白色,底色透明,显示“我正在学习WinSail”,文字放大数为1倍,则
::ChPrintf(100, 50, WHITE, RED, 1, 0, "我下在学习WinSail");
(3)在屏幕的x = 100, y = 50处用“笔画为白色,底色为红色,显示“我正在学习WinSail”,文字放大数为2倍,则
::ChPrintf(100, 50, WHITE, RED, 2, 1, "我正在学习WinSail");
[
Last edited by firstsail on 2008-1-16 at 08:08 PM ]
作者: firstsail
时间: 2008-1-16 20:05
标题: 不要执行UCDOS
(1)执行WinSail前,不能执行UCDOS、Pdos95等等
(2)为了节省内存,在Autoexec.bat中不要执行smartdrv.exe程序
(3)不能在Bc31综合环境中执行WinSail
(4)启动DOS后,在DOS命令中键入“mem/c/p”查看常规内存的大小
最好有“550K”以上
[
Last edited by firstsail on 2008-1-16 at 08:14 PM ]
作者: tianmian
时间: 2008-1-16 20:08
那要格式化输出用什么函数你看我这样一段程序:(在sail3000工程中对sail2000.cpp的改动)
if( !::InitSystem(argc,argv))
{
::CloseSystem();
::printf("\nSystem Source Not Enough!");
return(0);
}
ChPrintf(40,0, WHITE, DARKGRAY, 1, 1,
"*********温馨提示********* "
"用户名--- super 密 码--- ( 空 )");
printf("OK!\n");//存dos下应该能用吧
::CloseSystem();
printf("before return\n");
return(1);
其他的只有一些必要的框架,然而这个函数运行后只屏幕输出before return ????
作者: firstsail
时间: 2008-1-16 20:16
运行Sail3000后,您可以在“上位机”Ping一下“下位机”的IP地址,看一看有没有反应。
ping 169.254.82.133
作者: firstsail
时间: 2008-1-16 20:22
Quote: |
那要格式化输出用什么函数你看我这样一段程序:(在sail3000工程中对sail2000.cpp的改动)
if( !::InitSystem(argc,argv))
{
::CloseSystem();
::printf("\nSystem Source Not Enough!");
return(0);
}
ChPrintf(40,0, WHITE, DARKGRAY, 1, 1,
"*********温馨提示********* "
"用户名--- super 密 码--- ( 空 )");
printf("OK!\n");//存dos下应该能用吧
::CloseSystem();
printf("before return\n");
return(1);
其他的只有一些必要的框架,然而这个函数运行后只屏幕输出before return ???? |
|
这是因为程序执行太快了,您可以加入“getch()”,或者AfxMessageBox()函数,停顿一个
if( !::InitSystem(argc,argv))
{
::CloseSystem();
::printf("\nSystem Source Not Enough!");
return(0);
}
ChPrintf(40,0, WHITE, DARKGRAY, 1, 1,
"*********温馨提示********* "
"用户名--- super 密 码--- ( 空 )");
printf("OK!\n");//存dos下应该能用吧
AfxMessageBox("调试", "中华人民共和国万岁", MB_OK); // 加入这一行
::CloseSystem();
printf("before return\n");
return(1);
========================================
在网站下载的Sail3000,已经配置成256色,如果要用printf函数,请使用16色,
可修改config.sys的display段
[Display]
device = 0
mode = 0
作者: firstsail
时间: 2008-1-16 20:23
我要下班吃饭了,明天9:00上班,GoodByte!
作者: tianmian
时间: 2008-1-16 20:32
再见,非常感谢你的帮助