基于Winsock 的小型网络管理系统及其实现

        基于WinSock的小型网络管理系统及其实现
                        NiceFeather

摘  要:本文主要讨论基于Internet上的小型网络信息管理系统的基本功能,并提供了其基于WinSock控件的构造方法。
关键词:WinSock,小型网络信息系统,登录机制,Internet数据传送

            MNMS Based on WinSock and it's Implement
                            NiceFeather

Abstract: This paper describes some functions of a miniature network management system base on internet and offers the method of MNMS's implement with winsock .
Keywords: Winsock, MNMS(Miniature Network Management System), Logon Mechanism, Internet Data Transfer

1. 网络管理系统的功能
用户登录认证,电子邮件系统,文件传送,消息通知

2. Winsock控件介绍
Winsock 控件对用户来说是不可见的,它提供了访问 TCP 和 UDP 网络服务的方便途径。Microsoft Access、Visual Basic、Visual C++ 或 Visual FoxPro 的开发人员都可使用它。为编写客户或服务器应用程序,不必了解 TCP 的细节或调用低级的 Winsock APIs。通过设置控件的属性并调用其方法就可轻易连接到一台远程机器上去,并且还可双向交换数据。

如果创建客户应用程序,就必须知道服务器计算机名或者 IP 地址(RemoteHost 属性),还要知道进行“侦听”的端口(RemotePort 属性),然后调用 Connect 方法。如果创建服务器应用程序,就应设置一个收听端口(LocalPort 属性)并调用 Listen 方法。当客户计算机需要连接时就会发生 ConnectionRequest 事件。为了完成连接,可调用 ConnectionRequest 事件内的 Accept 方法。

建立连接后,任何一方计算机都可以收发数据。为了发送数据,可调用 SendData 方法。当接收数据时会发生 DataArrival 事件。调用 DataArrival 事件内的 GetData 方法就可获取数据。

为实现Internet上两个远程计算机之间的数据传送,Winsock编程是一个十分便捷、快速的选择。显然,Winsock通信是基于Client/Server模式的,即服务器的Winsock在某端口进行“侦听”服务,等待客户机的申请;那么如何实现两台计算机之间对等数据交换?实现中,可以把生成两个Winsock对象,其中一个作为服务器对象在端口1“侦听”,另外一个作为客户机对象在端口2连接另一台计算机——即每台计算机可以作为服务器,也可以是客户端。

VB6.0中,Winsock有两种数据传送格式:字符串型和字节流型;平时的信息交互可以使用字符串型,但由于文件的传送要顾及各种格式的文件,因此文件不能以字符串进行传送,此时以字节流型数据传送可以保证数据完整。

方法如下:
⑴如果是传送字符串型,发送:Winsock1.SendData strData;接收:Winsock1.GetData strData(strData是字符串String型变量)。
⑵如果是传送字节流型,发送:Winsock1.SendData strData();接收:Winsock1.GetData strData()(strData()是字节数组Dim strData() As BYTE)。

3 小型网络管理系统的Winsock实现方法

3.1 Internet上的文件传送实现方法

当计算机A向计算机B之间要求文件(包括上传和下载)传送时,首先向计算机B发送文件传送请求——第一“握手”,之后才进行真正的文件数据传送。Winsock的SendData 方法发送的数据默认数据文件数据传送中,
第一次握手:文件传送(上传,下载)请求数据格式:
操作类型 文件名 文件块大小 文件块数目 最后一块大小(字节)
0:上传 当地文件名 1kb(默认) 文件长度/块大小 
1:申请下载 远程计算机中的文件名  
第二次握手:文件传送(上传,下载)请求响应操作及回复信息
上传响应:发送OK,告诉对方可以开始传送数据
下载响应:传送文件块数目+块大小+最后一块字节大小
之后,计算机之间进入真正的文件数据传送中,如图(假定从A→B):
如此反复,直至文件的数据块传送完毕,在传送中间可以根据传送块的剩余数目显示进度条。

3.2 用户登录管理

用户登录机制
为保证安全性,用户登录采用加密传送用户名及密码,用户登录机制如下:
 当客户机向服务器发出登录请求时,服务器生成相应的Winsock对象接收(Accept)客户机Winsock,从而建立服务器与不同的用户之间的消息通道。

Winsock服务器建立多客户连接的方法
首先在服务器中建立Winsock数组Winsock1(),其中Winsock(0)进行“侦听”,当客户机发出连接请求(clintWinsock.Connect 服务器IP地址,服务器侦听端口)时Winsock(0)产生如下消息:
Private Sub Winsock1_ConnectionRequest(Index As Integer, ByVal requestID As Long)
If Index = 0  Then                  '主Winsock——Winsock(0)发生消息
    i = 1
    While i <= cur And onl(i, 0) = 0     '在以前的Winsock中找到空闲的Winsock
        i = i + 1
    Wend
    If i <= cur Then                  '在当前装载的Socket中发现有用户已经离开
        Winsock1(i).LocalPort = 0      '使用现成的Socket
        Winsock1(i).Accept requestID   '接收
        onl(i, 0) = 0      'Winsock(i)被占用
    Else                             '在当前装载的Socket中没发现有用户离开
   cur = cur + 1                 '当前接收端口增加
        Load Winsock1(cur)            '生成新的' Winsock
        Winsock1(cur).LocalPort = 0
        Winsock1(cur).Accept requestID  '接收
        onl(cur, 0) = 0      'Winsock(cur)被占用
End If
End Sub
之后,服务器利用生成的Winsock(i)与第i个用户通信。

3.3 小型邮件系统
我们建立了用户数据库和邮件数据库,在前面叙述的用户登录的实现下,进行用户的邮件管理;此时涉及到数据管理。数据库结构如下:
⑴用户数据库结构:
userid    用户编号
name     用户名
chinesename  姓名
code    口令
pp    权限
dscrp    描述
⑵邮件数据库结构:
Msgid   消息编号
Receiver   接收者
Sender   发送者
Style    类型
Word    消息文字
Get    接收否
Sj    消息得到时间
bj    消息附属信息

当用户登录后,服务器从邮件数据库中提取Receiver是该用户并且消息为新(Get字段值为“新”)的记录,把之打包,利用用户Winsock对象发送。
服务器同时提供客户的命令要求,然后对之进行相应的操作:
客户命令格式:
邮件命令 Chr(13)
回车符分隔命令数据 0读新邮件
1读旧邮件
2读所有邮件
3删除邮件 删除邮件时,需提供要删除的邮件编号(在用户登录时已经连同邮件一起发送)
服务器响应命令:发送邮件数据,字段之间用回车符隔开,在邮件内容中对其进行信息处理——对回车符进行编码,比如用%0代替,而%用%%代替。或者发送删除成功消息,删除失败消息,读取失败消息——这些特殊消息可以在消息前端用一个字符区分数据或消息及消息类型。

3.4 聊天室
显然利用上面所述的用户登录机制,我们可以在服务器中建立聊天室,进行实时对话。同样我们可以使用特殊的消息管理方法,进行聊天管理;如下:
Select Case 命令的第一个字节
    Case "0"      '进入会议室
        For i = 1 To cur     '通知其他在线用户有用户上线
        If onl(i, 0) = 0 Then Winsock1(i).SendData "0" + get_un(Index) + Chr(13)
        Next
    Case "1"      '离开会议室
         For i = 1 To cur    '通知其他在线用户有用户离线
            If onl(i, 0) = 0 Then Winsock1(i).SendData "1" + str(onl(Index, 1)) + Chr(13)
         Next
    Case "2"       '发言
         If 第二字节 = "0" Then    '向所有用户说话
            For i = 1 To cur         '把话送往所有用户
                    If onl(i, 0) = 0 Then
  Winsock1(i).SendData "2" +第Index个用户的名字 + "说:" +文字
                    endif
            Next
         Else      '向某用户说悄悄话
        '从命令的下面字节(到回车符结束)得到要传送的用户代号x
            Winsock1(x).SendData "2" +第Index个用户的名字+ "对你悄悄说:" + 文字
         End If
    Case "5"       '邀请加入某在线用户进入会议室
       '从命令的下面字节(到回车符结束)得到要传送的用户代号x
         Winsock1(x).SendData "5" + 第Index个用户的名字+ Chr(13)
   '向第x个用户发送进入会议室的命令,并等待响应
End Select

结束语
我们使用VB6.0实现了上述功能,并使用在我们独立开发的工作流软件上,实现了Internet上的小型企业的信息管理。

  • 0
    点赞
  • 1
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

◆ 01.htm 1、怎么用mscomm控件检测modem是否与计算机联接正确?2、如何用mscomm挂断modem与别电话机间连接?(已接通) ◆ 02.htm CWinInetConnection---一个封装了WinInet API函数类 ◆ 03.htm MODEM通讯意外处理 ◆ 04.htm MsComm 文字传输 ◆ 05.htm PING一个IP地址(向它发送一个数据包并等待回应) ◆ 06.htm SMTP协议简介 (Simple Mail Transfer Protocol) ◆ 07.htm VB5.0 中远程数据库访问 ◆ 08.htm VB下如何编写CRC校验程序 ◆ 09.htm VB中Winsock控制UDP协议使用 ◆ 10.htm Visual Basic 6中发送邮件新方法 ◆ 11.htm Visual Basic通信程序设计 ◆ 12.htm Whois 示例程序 ◆ 13.htm Winsock Terminal示例程序 ◆ 14.htm WinSock断开导致客户端问题 ◆ 15.htm 把Outlook信箱中附件另存为 ◆ 16.htm 保证连网计算机时间同步 ◆ 17.htm 编写网络寻呼机 ◆ 18.htm 编制自已电话录音小程序 ◆ 19.htm 程序中如何启动默认拨号连接 ◆ 20.htm 程序中如何启动默认拨号连接? ◆ 21.htm 打开器并进入指定网址 ◆ 22.htm 打开一个直接到自己主页器 ◆ 23.htm 得到用户IP地址 ◆ 24.htm 电话拨号 ◆ 25.htm 电子邮件标准格式 (RFC 822) ◆ 26.htm 断开拨号网络连接 ◆ 27.htm 断开与 Internet 连接 ◆ 28.htm 发送电子邮件附件 ◆ 29.htm 发送电子邮件附件1 ◆ 30.htm 发送电子邮件附件2 ◆ 31.htm 发送电子邮件附件3 ◆ 32.htm 发送电子邮件附件4 ◆ 33.htm 获得用户网络登录名 ◆ 34.htm 基 于Win95 VB5 串 口 通 信 程 序 ◆ 35.htm 基于Win95VB5串口通信程序 ◆ 36.htm 几个设置IEAPI ◆ 37.htm 检测运程数据传送断线 ◆ 38.htm 简单聊天程序 ◆ 39.htm 简单电子邮件发送程序 ◆ 40.htm 建立拨号联接 ◆ 41.htm 将所有窗口最小化 ◆ 42.htm 利用IE控件访问Internet ◆ 43.htm 利用IE控件设计简易器 ◆ 44.htm 利用Mscomm32控件判断MODEM是否打开,或者正在工作,并且判断拨号时是否遇忙音 ◆ 45.htm 利用TAPI进行电话拨号 ◆ 46.htm 利用VB访问Internet ◆ 47.htm 利用VB设计聊天室 ◆ 48.htm 利用Visual Basic实现无线通讯 ◆ 49.htm 利用Winsock控件实现局域网通信 ◆ 50.htm 强制一个本地或远程NT系统关闭 ◆ 51.htm 取得网卡序列号 ◆ 52.htm 如何从 Internet 上取回某一个网页內容? ◆ 53.htm 如何检测是否已连接到Internet? ◆ 54.htm 如何利用Winsock控件编写自己Internet程序 ◆ 55.htm 如何每天抓取 Internet 上某一个网页中图片来更换桌面壁纸? ◆ 56.htm 如何启动拨号网路中连线? ◆ 57.htm 如何使用MSCOMM32.OCX发送大于80H字符,可否给个示例程序 ◆ 58.htm 如何通过VB获取网卡地址 ◆ 59.htm 如何用VB打开默认器或默认发信程序? ◆ 60.htm 如何用Visual Basic编写小型网络系统 ◆ 61.htm 如何在程序中启动 NT 【拨号连接】对话框
相关推荐
<p>      掌握基于腾讯人工智能(AI)车牌识别技术,使用车牌识别技术实现一个完整停车场管理系统,项目包括网页调用摄像头拍照,车牌拍照识别,上传车牌图片识别,用户管理,车辆管理(临时车与包月车),车辆出场,入场管理,停车费收费管理,按照临时车或包月车自动计算停车费,系统参数设置,修改用户密码及安全退出等功能,该系统采用Jsp技术,使用SSM框架,Mysql数据库,ajax技术及人工智能等相关技术实现。</p> <h2><span style="color: #e03e2d;">重要通知:本课程根据腾讯AI车牌识别新接口,更新了新接口源代码,发布程序,购买了课程同学可以下载新程序,包括(运行程序及源代码),更新时间:2021-2-17</span><br /><br /><span style="color: #e53333;">项目开发技术:java,jsp,mysql,MyBatis,SpringMVC,jquery,ajax,json</span><br /><span style="color: #e53333;">项目运行环境:jdk1.7及以上版本,tomcat6.0及以上版本,mysql5.5及以上版本</span><br /><span style="color: #e53333;">项目开发工具: 本项目开发工具是Eclipse,也支持myEclipse,Intellij Idea等其他版本开发工具</span><br /><br /></h2> <p style="color: #333333;"><span style="font-size: 20px;"><span style="color: #ff0000;"><strong>相关课程学习顺序</strong></span></span></p> <p style="color: #333333;">本校课程是培养JAVA软件工程师及JSP WEB网络应用程序开发,android工程师全套课程,课程学习顺序如下:<br /><span style="color: #ff0000;"><strong>JAVA初级工程师:</strong></span><br />    1、计算机基础<br />    2、HTML语言基础<br />    3、C语言从入门到精通+贪吃蛇游戏<br />    4、贪吃蛇游戏<br />    5、SQL SERVER数据库基础<br />    6、JAVA从入门到精通+推箱子游戏+QQ即时通讯软件<br />    7、推箱子游戏;<br />    8、仿QQ即时通讯软件;<br /><span style="color: #ff0000;"><strong>JAVA中级工程师:</strong></span><br />    9、SQLSERVER数据库高级<br />    10、SQLSERVER从入门到精通(基础+高级)<br />              11、JavaScript从入门到精通,<br />    12、JSP从入门到精通+点餐系统,<br />    13、JSP从入门到精通+在线视频学习教育平台,<br />    14、JSP从入门到精通+大型电商平台;<br />    15、XML从入门到精通,<br />    16、数据结构(JAVA版),<br /><span style="color: #ff0000;"><strong>JAVA高级工程师:</strong></span><br />    17、Oracle数据库从入门到精通,<br />    18、ajax+jquery从入门到精通,<br />    19、EasyUI从入门到精通,<br /><span style="color: #ff0000;"><strong>SSH框架:</strong></span><br />    20、Struts2从入门到精通课程,<br />    21、Hibernate从入门到精通课程,<br />    22、Spring从入门到精通课程;<br />    23、Echarts从入门到精通,<br />    24、Excel基于POI导入导出<br /><span style="color: #ff0000;"><strong>工作流框架:</strong></span><br />    25、Activiti流程框架从入门到精通<br />    26、JBPM流程框架从入门到精通<br /><span style="color: #ff0000;"><strong>SSM框架:</strong></span><br />    27、MyBatis从入门到精通<br />    28、Spring MVC从入门到精通<br /><span style="color: #ff0000;"><strong>面试题:</strong></span><br />    29、职业生涯规划及面试题集锦<br /><span style="color: #ff0000;"><strong>商业项目:</strong></span><br />    30、微信公众号在线支付系统<br />    31、微信生活缴费在线支付系统<br />    32、支付宝生活缴费在线支付系统<br />    33、在线考试系统<br />    34、手机订餐管理系统,<br />    35、CRM客户关系管理系统<br />    36、大型房地产CRM销售管理系统<br />    37、CMPP2,CMPP3移动网关系统<br /><span style="color: #ff0000;"><strong>人工智能:</strong></span><br />    38、人脸识别在线考试系统<br />    39、人脸识别系统项目实战<br />    40、车牌识别系统项目实战<br />    41、身份证识别系统项目实战<br />    42、营业执照识别系统项目实战</p> <p style="color: #333333;">          43、名片识别管理系统</p>
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值