分享
 
 
 

WINDOWS (服务器) 和 DOS(客户端) 网络互连 基于TCP/IP的编程实现

王朝vc·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

一:系统的提出

在网络技术的发展下,基于LIN网的应用有成本低,速度快等特点. 由于客户机在商场pos机或者是工业现场通常采用DOS环境(因其实时和易于操作硬件, 以及占用磁盘空间少等特点),而在服务器端因界面设计和友好的用户接口常采用WIN9x开发

二:WIN9X端的实现

采用流行的WIN9X的网络设置与wsock32.ocx控件配合编程,可以使用 vb编写服务器界面实现 ,本系统采用tcp协议。

具体实现比较简单,网上有大量的例子。

四:DOS端网络设置

dos客户端需要安装ms-client for msdos(winnt4光盘上有,dos时代用的联网程序)

在AUTOEXEC.BAT中加载MS CLIENT FOR DOS的SOCKETS.EXE 套接字驱动程序

AUTOEXEC.BAT文件

c:\NET\netbind.com

C:\NET\umb.com

C:\NET\tcptsr.exe

C:\NET\sockets.exe

C:\NET\tinyrfc.exe

C:\NET\nmtsr.exe

C:\NET\emsbfr.exe

C:\NET\net start

修改net目录下的tcputils.ini文件,在[tcpglobal]段中加上hostname=localhost(你的机器名)

五:DOS端软件设计 采用tcp协议

例程如下:

//开发环境:DOS622 BC++3.1

/********************************************

文 件 名:client.c

开发成员:吴建平

功 能:DOS客户端发送消息

最后修改:2001-08-20

*********************************************/

//服务器名称从ini文件中取得

//用户输入消息后发送

#include <time.h>

#include <stdlib.h>

#include <stdio.h>

#include <string.h>

#include <mem.h>

#include <netdb.h>

#include <sys/types.h>

#include <sys/socket.h>

#include <netinet/in.h>

#include <sock_err.h>

#define BUFFER_SIZE 1000

#define LINE_LEN 70

#define INI_FILE "netsend.ini"

char sendbuf[BUFFER_SIZE];

char recvbuf[BUFFER_SIZE];

struct sockaddr_in server_addr, client_addr;

int f_getinikey(char * fname,char *section,char *key,char *value);

int sleep(int seconds )

{

long start_seconds, current_seconds, end_seconds;

time( &start_seconds );

end_seconds = start_seconds + (long) seconds;

do {

time( &current_seconds );

} while ( current_seconds < end_seconds );

return( 0 );

}

/*

** 这个程序是一个sockets 客户端,它将尝试连接到一个远程服务器节点,发送数据,然后接收

*/

main( argc, argv )

int argc;

char *argv[];

{

int rc, i, len, total, size, sd, seconds;

char ls_server_ip[20];

char ls_localhost_name[20];

if ( argc < 2 ){

printf( "用法: %s <消息> \n", argv[0] );

exit( 1 );

}

/**********************************************************************

*从配置文件中读机器ip地址

**********************************************************************/

memset(ls_server_ip,0x00,sizeof(ls_server_ip));

if(f_getinikey(INI_FILE,"Server","IP",ls_server_ip) <= 0){

printf( "取服务器地址配置文件[netsend.ini]时出错\n");

exit( 1 );

}

memset(ls_localhost_name,0x00,sizeof(ls_localhost_name));

if(f_getinikey(INI_FILE,"LocalHost","HostName",ls_localhost_name) <= 0){

printf( "取本机地址配置文件[netsend.ini]时出错\n");

exit( 1 );

}

/*

** 建立一个局部通讯端点

*/

sd = socket( AF_INET, SOCK_STREAM, 0 );

if ( sd < 0 ) {

printf( "错误: socket() 调用失败 w/rc=%d, errno=%d\n", sd, errno );

exit( 1 );

}

printf( "socket() 返回 %d\n", sd );

/*

** 用必要的信息填充socket地址结构

** 远程服务器节点(引入连接的远程节点IP地址 和 端口)尝试连接服务器

** 调用 until循环 直到 远程服务器连接成功或超时

*/

server_addr.sin_family = AF_INET;

server_addr.sin_port =htons(6000);

server_addr.sin_addr.s_addr = inet_addr( ls_server_ip );

rc = connect( sd, (struct sockaddr *) &server_addr, sizeof(server_addr) );

if ( rc < 0 ) {

printf( "错误: connect() 调用失败 w/errno=%d\n", errno );

close_socket( sd );

exit( 1 );

}

printf( "确定连接 0x%lx\n", server_addr.sin_addr );

//seconds = atoi( argv[4] );

seconds = 1 ;

printf( "等待 %d 秒 在发送数据前...\n", seconds );

sleep( seconds );

/*

** Send the number of bytes specified on the command line to the server.

*/

//for (i=0; i<size; i++)

// sendbuf[i] = ( i % 26 ) + 'a';

strcpy( sendbuf,ls_localhost_name);

strcat( sendbuf,"|");

for (i=1; i<argc;i++)

strcat( sendbuf, argv[i]);

//strcpy(sendbuf , "hello,server!");

size = strlen(sendbuf) ;

len = send( sd, sendbuf, size, 0 );

total = 0;

printf( "正在尝试接收数据\n" );

do {

len = recv( sd, &recvbuf[total], size-total, 0 );

if ( len < 0 ) {

printf( "错误: recv() 调用失败 w/errno=%d\n", errno );

close_socket( sd );

exit( 1 );

}

printf( "recv() 返回 %d 字节\n", len );

total += len;

} while ( total < 2 );

printf( "接收缓冲区:\n" );

for (i=0; i<len; i++) {

printf( "%c", recvbuf[i] );

if ( i % LINE_LEN == LINE_LEN - 1 ) {

printf( "\n" );

}

}

printf( "\n" );

printf("消息发送成功\n") ;

/*

** 所有数据传输完成后,关闭socket后退出.

*/

close_socket( sd );

exit( 0 );

return;

}

在项目文件中需包含dos_socket.lib,在mircrosoft tcp/ip sdk for dos 1.0中有

微软的开发包(微软提供)比较适合 TCP/IP的套接字开发

Microsoft TCP/IP Sockets Development Kit 1.0 for dos & windows 开发包

http://www.csdn.net/develop/article/files/mstcpsdk.rar

(感谢郭红俊帮助上传)

coolstar 修改于2002-07-02

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有