`

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

 
阅读更多
<iframe align="center" marginwidth="0" marginheight="0" src="http://www.zealware.com/csdnblog336280.html" frameborder="0" width="336" scrolling="no" height="280"></iframe>

一:系统的提出
在网络技术的发展下,基于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><br>#include <stdlib.h><br>#include <stdio.h><br>#include <string.h><br>#include <mem.h><br>#include <netdb.h><br>#include <sys><br>#include <sys><br>#include <netinet><br>#include <sock_err.h></sock_err.h></netinet></sys></sys></netdb.h></mem.h></string.h></stdio.h></stdlib.h></time.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
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 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) 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) printf( "取本机地址配置文件[netsend.ini]时出错/n");
exit( 1 );
}


/*

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

sd = socket( AF_INET, SOCK_STREAM, 0 );
if ( sd 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 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';<br> strcpy( sendbuf,ls_localhost_name);<br> strcat( sendbuf,"|");</size>

for (i=1; i<argc>strcat( sendbuf, argv[i]);</argc>

//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 printf( "错误: recv() 调用失败 w/errno=%d/n", errno );
close_socket( sd );
exit( 1 );
}
printf( "recv() 返回 %d 字节/n", len );
total += len;
} while ( total

printf( "接收缓冲区:/n" );
for (i=0; i<len i>printf( "%c", recvbuf[i] );<br>if ( i % LINE_LEN == LINE_LEN - 1 ) {<br> printf( "/n" );<br>}<br> }<br> printf( "/n" );<br> printf("消息发送成功/n") ;</len>

/*
** 所有数据传输完成后,关闭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




分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics