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

原创 2002年07月03日 10:15:00

 

一:系统的提出
  在网络技术的发展下,基于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

 

TCP/IP通信 客户端、服务器 实例

本篇文章实现了一个基于TCP 的一个非常简单的客户/服务器通信程序实例。该程序中通讯协议使用的是面向连接的TCP协议SOCK_STREAM, 服务器的ip地址为本地地址即: 127.0.0.1,...
  • qingzai_
  • qingzai_
  • 2016年03月22日 14:00
  • 1374

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

 一:系统的提出   在网络技术的发展下,基于LIN网的应用有成本低,速度快等特点. 由于客户机在商场pos机或者是工业现场通常采用DOS环境(因其实时和易于操作硬件, 以及占用磁盘空间少等特点)...
  • liguiyuan
  • liguiyuan
  • 2008年04月09日 11:50
  • 300

基于TCP协议实现服务器和客户端的通信程序

实习期间,项目要求学习MFC编程和SOCKET编程,先写了一个入门的小程序来熟悉一下。 服务器的界面图: 为了简化,将服务器的IP和Port固定为127.0.0.1和5000 【启动...
  • ljh0302
  • ljh0302
  • 2015年08月20日 16:06
  • 928

纯DOS下的 TCP/IP编程

DOS下的SOCKET编程 这是我摘抄的别人的心得,呵呵。 为了实现DOS机与PC机之间的TCP/IP通信,必须找到相关控制SOCKET的库。本来有个国外网站www.wattcp.com免费提供WAT...
  • wesleyluo
  • wesleyluo
  • 2010年05月18日 16:07
  • 2362

实现采用客户/服务器通信模式,基于TCP网络通信协议的多客户端简单应用之案例分析

import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; /*  * 案例介绍...
  • zhyzh134
  • zhyzh134
  • 2016年03月30日 17:37
  • 659

QT 之 TCP/IP 服务器和客户端(一)

转载至:草莓蛋糕人 TCP协议的程序使用的是客户端/服务器模式,在Qt中提供了QTcpSocket类来编写客户端程序,使用QTcpServer类编写服务器端程序。我们在服务器端进行端口的监听,...
  • zhaoyuaiweide
  • zhaoyuaiweide
  • 2017年08月04日 16:13
  • 729

TCP/IP实验报告(一):基于TCP的客户/服务器通信程序实例

实验目的: 在两台电脑上实现一个简单的TCP客户/服务器通信实例,使客户端能够想服务器连续发送字符信息。 实验说明:建立WIn32控制台应用程序,使用的是面向连接的TCP协议(SOCK_STREAM...
  • zyb238909
  • zyb238909
  • 2014年03月28日 15:29
  • 1073

tcp协议服务器和客户端相互发送数据

package com.neutron.network.tcp.demo; import java.io.IOException; import java.io.InputStream; impor...
  • neutron129
  • neutron129
  • 2016年04月24日 10:10
  • 376

C# IP/TCP 客户端与服务端

1)         流程 2)         服务端程序特点 Ø 一般启动后就一直处于运行状态,以等待客户端进程的请求 Ø 使用的端口往往是熟知端口,便于客户机进程连接请...
  • valeb
  • valeb
  • 2012年04月26日 10:22
  • 2366

客户端TCP时间获取以及实现服务端获取客户端IP地址

UNIX网络编程,客户端TCP时间获取,服务端获取得到客户端的IP地址以及相应的端口号。...
  • Zhai_ZB
  • Zhai_ZB
  • 2016年12月19日 21:29
  • 1824
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:WINDOWS (服务器) 和 DOS(客户端) 网络互连 基于TCP/IP的编程实现
举报原因:
原因补充:

(最多只允许输入30个字)