分享
 
 
 

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

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

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

NiceFeather

(黎阳航空发动机公司)

摘 要:本文主要讨论基于Internet上的小型网络信息管理系统的基本功能,并提供了其基于WinSock控件的构造方法。

关键词:WinSock,小型网络信息系统,登录机制,Internet数据传送

MNMS Based on WinSock and it's Implement

NiceFeather

(Liyang Air Engine Corporation)

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

4 结束语

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

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
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- 王朝網路 版權所有