利用Winsock控件创建的局域网聊天程序
- 格式:docx
- 大小:65.15 KB
- 文档页数:7
课程设计(论文)任务书信息学院专业计算机班级2009-2一、课程设计(论文)题目基于Winsock的简单聊天工具的设计二、课程设计(论文)工作:自2011年6月20日起至2011年6月25日止。
三、课程设计(论文)的内容要求:1)基本要求:1、分析Winsock的编程技术,特别是Winsock使用2、分析聊天程序的功能及其相关网络协议3、给出程序流程图和设计方案4、选择开发环境,编译源程序5、给出软件测试文档2)设计要求1、资料提交形式:课程设计报告一份(按学校相关标准、纸质,且严格按照给定模板来组织撰写,特别是课设时间要对、签名要手写、封面一定要用学校买的)、电子文档一份;2、课程设计报告不少于3000字;3、电子文档中必须至少有5份参考资料,压缩后以班为单位交电子版给老师,时间为第18周的周六。
4、成绩:出勤占10%、课程设计报告占40%、答辩占20%、参考资料占30%。
5、课程设计报告模板写附录。
3)工具要求:1、界面清楚易懂;2、程序层次结构清晰。
4)实验安排:1、地点:创新大楼东4052、时间:周一、三、四上午8:00--11:30学生签名:2011年6月26日课程设计(论文)评阅意见等级项目优秀良好中等及格不及格课程设计态度评价出勤情况评价任务难度评价工作量饱满评价设计中创新性评价论文书写规范化评价综合应用能力评价综合评定等级评阅人谢昕职称教授2011年6月27日目录一、任务分析与方案设计 01.任务分析 02.方案设计 0二、开发环境与工具 01.设计环境 01.1 eclipse开发平台介绍 02.基础知识 (1)2.1java Socket网络编程简介 (1)2.2套接字的介绍 (1)2.3 TCP/IP协议简介 (1)三、关键技术与理论 (2)1.JA V A编程技术 (2)2.Java Socket网络编程接口 (2)四、相关图解及程序 (3)1.体系结构设计 (3)2.具体功能模块的分析 (3)3.程序代码: (4)五、测试及结果分析 (8)六、心得体会 (10)七、参考文献 (11)一、任务分析与方案设计1.任务分析随着计算机科学技术的发展,网络越来越深刻地改变着人们生活方方面面。
基于Microsoft Visual Stadio 2005 C++ 环境下采用Winsock 编程原理实现服务器——客户端通讯的简单程序运行整体效果服务器整体图片客户端整体图片服务器编写1.新建Windows窗体应用程序Server文件——新建——项目,进入新建项目,选CLR、Windows窗体应用程序,在下面名称一项输入Server,保存位置自己定,如下图1所示图1 单击确定后,进入Server界面,如下图2所示图2从图2可以清楚地看到新建Server包含的一些资源,中间是开发的界面,默认为Form1,右边是一些调协的属性!我们想要调试后得到什么样的界面效果,直接到Form1中进行设置即可,右边有个工具箱,自动隐藏,当然也可设置显示,如下图3所示图3可以看到上面有很多功能选项!现在我们开始对Form1进行开发,将顶上“Form1”改为“聊天——服务器”,即单击Form1界面,在右边属性的Text项中的“Form1”更改为“聊天——服务器”即可,如下图4所示图4设置IP和端口显示的窗口,选取TextBox选项,在界面上拉出一条窗口,如下图5所示图5单击刚拉出的窗口,在右边属性项Name中将默认的TextBox1更改为IPBox,如下图6所示图6再从工具箱中选取Label项,在IPBox左边拉出一小窗口,默认文字为Label1,点击它,在右边的属性中找到Text项,将默认的“Label1”更改为“本地服务器IP和端口:”,如下图7所示图7同样,选取TextBox,拉出一个显示窗口,如下图8所示,在属性中设置Name为ShowBox,ScrollBars选为Vertical(竖向输入),Multiline选为True可多项输入!图8再在ShowBox下用TextBox拉出一输入窗口,在属性项将Name设置为InputBox,如下图9所示图9在ShowBox与InputBox之间用Label拉出一窗口,在Text中将“Label”改为“请您输入想说的话:”,如下图10所示图10添加“发送”和“退出”按键,如下图11所示,选取Button项拉出两按键,分别在Name 项将Button1更改为“SendButton”和“QuitButton”,而在Text项中将Button1分别更改为“发送”和“退出”!图11以上基本设置完了界面,调试后会出现此界面,类QQ的形式!现在对代码进行编写,双击左边的Server.cpp文件,进入到里面,在using namespace Server;下加多一行代码,如下using namespace Server;using namespace System::Threading;选取Form1.h文件,右击选取“查看代码”进入下窗口,如下图12所示图12将里面的代码按下面的代码编写#pragma oncenamespace Server {using namespace System;using namespace System::ComponentModel;using namespace System::Collections;using namespace System::Windows::Forms;using namespace System::Data;using namespace System::Drawing;using namespace System::Threading;using namespace System::Text;using namespace System::Net;using namespace System::Net::Sockets;using namespace System::IO;/// <summary>/// Form1 摘要////// 警告: 如果更改此类的名称,则需要更改/// 与此类所依赖的所有.resx 文件关联的托管资源编译器工具的/// “资源文件名”属性。
VB网络通讯程序设计WinSock控件能够通过UDP协议(用户数据报协议)或TCP协议(数据传输协议)连接到远程的机器并进行数据交换。
这两种协议都能用来创建客户端和服务端应用程序。
就像定时器控件一样,WinSock控件运行时没有一个可视的界面。
下面就是分别用TCP和UDP协议来创建的网络聊天软件。
TCP协议网络聊天程序的运行过程及原理第一步:建立连接主要过程是:由客户端程序向服务端程序发出连接请求,服务端程序收到并接受连接请求,至此客户机与服务器创建了数据交流通道。
第二步:开始聊天主要过程是:在客户机的“发送的信息”文本框中输入文字时,服务器端的“收到的信息”文本框中就会实时地显示相同的文字,反之亦然。
服务器的界面设计1.创建一个“标准 EXE”工程,选中“工程”菜单的“部件”,在控件中找到Microsoft Winsock Control并将其选中。
2.将Form1的名称改为Form_Load(),并在其中添加两个命令按钮(Command1的Caption属性为“退出”,Command2的Caption属性为“发送”)。
3.在窗体是添加三个TextBox控件,其名称分别为txtServerIP,txtSend和txtReceive。
4.在窗体上添加一个Winsock控件,将其Protocol(协议)属性设置为0(即sckTCPProtocol)。
服务器端的源代码:Private Sub Form_Load()'设置侦听端口WinsockServer.LocalPort = 10001'读取服务器的IP地址txtServerIP.Text = WinsockServer.LocalIP'开始侦听WinsockServer.ListenEnd SubPrivate Sub Command1_Click()'点击“退出”按钮后关闭应用程序Unload MeEnd SubPrivate Sub Command2_Click()'只要txtSend文本框的内容写好以后就由WinsockServer控件发送WinsockServer.SendData txtSend.TextEnd SubPrivate Sub WinsockServer_ConnectionRequest(ByVal requestID AsLong)'当收到连接请求时,Winsock处于侦听状态'此时应该使用Close方法关闭Winsock,然后使用Accept方法接受连接请求WinsockServer.CloseWinsockServer.Accept requestIDEnd SubPrivate Sub WinsockServer_DataArrival(ByVal BytesTotal As Long) '当客户端有信息发送来时,利用WinsockServer控件的GatData 方法读取数据'并将其显示在txtReceive文本框中Dim MyStr As StringWinsockServer.GetData MyStrtxtReceive.Text = MyStrEnd Sub运行界面如下图:客户端的界面设计1.创建一个新的“标准EXE”工程,并添加Winsock 控件。
在PB中使⽤WINSOCK.OCX做双向通信的简单例⼦⼀、在窗⼝中添加WINSOCK控件:在应⽤中新开⼀个窗⼝,在窗⼝画板中点击controls-->OLE菜单项,弹出Insert object窗⼝,单击Insert control标签,从列表框中双击选定Microsoft Winsock control,将winsock的图标贴在窗⼝上。
在程序中该控件名称定为winsock_a(甲⽅)和winsock_b(⼄⽅)。
⼆、设置信息输⼊输出⽂本框:在窗⼝中增加⼀个按钮cb_1,两个单⾏⽂本框sle_1,sle_2,分别⽤于输⼊要发送的字符串和接受对⽅发送的字符串。
三、设置通讯协议:WINSOCK控件允许⽤户以UDP和TCP两种协议中任选⼀种进⾏通讯。
1.UDP协议设置:UDP协议是⼀种⽆连接的通讯协议,在通讯之前,需要绑定remotehost和remoteport属性,如果需要双向通讯,还要设置localport属性。
在甲⽅(本机地址为:134.1.1.1)窗⼝的Open事件中加⼊如下语句:winsock_a.object.protocol=1//winsock通讯协议设为UDP协议winsock_a.object.remotehost="134.1.1.2"//对⽅的ip地址winsock_a.object.remoteport=6000//对⽅的winsock通讯端⼝号winsock_a.object.localport=6001//本机的winsock通讯端⼝号winsock_a.object.bind//绑定通讯协议在⼄⽅(本机地址为:134.1.1.2)窗⼝的Open事件中加⼊如下语句:winsock_b.object.protocol=1//winsock通讯协议设为UDP协议winsock_b.object.remotehost="134.1.1.1"//对⽅的ip地址winsock_b.object.remoteport=6001//对⽅的winsock通讯端⼝号winsock_b.object.localport=6000//本机的winsock通讯端⼝号winsock_b.object.bin//绑定通讯协议2.TCP协议设置:TCP协议在通讯前需要进⾏连接。
案例开发与分析一一聊天程序的开发一、客户端任务1创建客户端框架程序,设计用户界面,并实现与服务器的连接。
1. 创建一个空白工作区,并命名为 Chat 。
2.在Chat 工作区,用 MFC AppWizard 创建基于对话框的项目 ChatClient ,并在Step2中选中 Windows Socket 选项。
3. 在对话框中添加控件,如下图所示:4.对话框中的控件属性如下表: 表1控件属性控件类型 控件ID Caption其他List Box IDC_LIST_MESSAGE不选Sort List Box IDC_LIST_ONLINE_USERS不选SortEdit Box IDC_EDIT_MESSAGE 选中 Multiline 和 VerticalscrollRadio Butt on IDC_RADIO_GROUP 群聊Radio Butt onIDC_RADIO_PRIV ATE 私聊Butt on IDC_BUTTON_LOGIN 登录Butt onIDC BUTTON LOGOUT退出5. 用ClassWizard 为控件对象定义相应的成员变量,如下表所示:表2控件对应成员变量控件ID 控件类型 成员变量名IDC__EDIT_MESSAGE CStri ng m_strMessage IDC __LIST_MESSAGE CListBox m_listMessage IDC LIST ONLINE USERSCListBoxm listUsers6. 添加对话框,ID 为IDD_DIALOG_LOGIN , Caption 为“登录”。
7.在对话框中添加控件,如下图所示:8.对话框中的控件属性如下:表3登录对话框控件属性控件类型控件ID Caption其他Edit Box IDC_EDIT_IPEdit Box IDC_EDIT_PORTEdit Box IDC_EDIT_USERNAMEEdit Box IDC_EDIT_PASSWORD 选Styles->PasswordButt on IDOK 连接选Styles->Default Butt on Butt on IDCANCEL 取消9. 添加一个新类,类名为CLogin,基类为CDialog,Dialog ID 为IDD_DIALOG_LOGIN10.用ClassWizard为对话框的控件对象定义成员变量,如下表所示:表4登录对话框控件对应成员变量控件ID 控件类型成员变量名IDC_EDIT_IP CStri ng m_strIPIDC_EDIT_PASSWORD CStri ng m_strPasswordIDC_EDIT_PORT UINT m_n PortIDC EDIT USERNAME CStri ng m strUserName11.为CChatClientDIg类添加"登录”按钮的单击事件消息处理函数OnButtonLogin (),并添加如下代码:CLoginDlg dlg;int nRet = -1;nRet = dlg.DoModal();编译项目并运行,单击登录按钮,看看运行情况。
VB6通过winsock控件数组实现客户端和服务器多对一通信在VB6中使用winsock控件需要引用Microsoft Winsock Control 6.0部件使用winsock控件可以实现客户端和服务器间C/S结构的通信,如果把客户端和服务器放置于同一台电脑中,并且将客户端winsock 的RemoteHost设置为本机IP,则可以实现客户端程序和服务端程序间的自由通信。
在应用程序之间采用winsock通信比内存共享等方法更简单快捷,同时也更安全。
在客户端中添加一个窗体,拖拽一个winsock控件到该窗体上。
Private Sub Form_Load()Me.Winsock1.RemoteHost = "192.168.1.5"Me.Winsock1.RemotePort = 10002Me.Winsock1.ConnectEnd SubRemoteHost代表需要连接的远程服务器IP地址,局域网中的通信可以使用路由器分配的IP地址。
RemotePort代表端口号,服务器和客户端通过该端口进行连接。
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long) Dim strGet As String'接收字符串并写入T ext1控件中Winsock1.GetData strGetText1.Text = strGetEnd Sub当客户端的winsock接收到服务器发送来的数据后会触发Winsock1_DataArrival事件,利用GetData方法可以将数据读取出来,一般来说将数据读取到byte()数组中是最好的,因为利用字节数组可以收发图片、音频等文件,本例中为了演示所以直接用一个字符串变量来读取数据了。
Dim strSet As StringWinsock1.SendData strSet客户端向服务器发送数据可以用SendData方法,该方法同样可以发送字节数组,这里为了演示所以发送了个字符串。
用Delphi编写局域网中C/S型聊天程序中原工学院计算机教研室夏敏捷Internet盛行的今天,网上聊天QQ已成为一种时尚。
QQ是深圳腾讯公司的一个网络实时通讯软件,在国内拥有大量的用户群。
但QQ必须连接上互联网登陆到腾讯的服务器才能使用。
所以我们可以自己写一个在局部网里面使用的自己的QQ。
QQ使用的是UDP协议,这是一种无连接协议,即通信双方不用建立连接就可以发送信息,所以效率比较高。
Delphi本身自带的FastNEt公司的NMUDP控件就是一个UDP协议的用户数据报控件。
这里我们编写的局域网上实现聊天的程序采用的是TCP协议,TCP 是一种面向连接协议,具有较高的可靠性。
在Delphi中利用ClientSocket、ServerSocket这两种控件(Internet面板上),可以轻松的编写出C/S聊天程序,以下的程序在Delphi 6+winXP 中通过。
一、原理首先建立客户与主机的连接,把要发送的文字信息写进字符串中,然后ClientSocket组件的Socket..sendtext方法把文本发送出去。
当主机有数据接收时,触发它的ServerSocket 组件onClientRead事件,我们在这里用socket.ReceiveText接收字符信息,然后显示出来。
主机可以通过Socket..sendtext方法再将此用户信息转发给所有用户或单独的用户,在数据到达客户端后触发客户端OnRead事件,接受主机的数据。
为了区分不同的信息(新用户信息、昵称、交谈、用户离开)设计了以下协议格式:1.发送添加的新用户信息的格式:“添加用户”@用户的昵称^它的IP@用户的昵称^它的IP@……@此信息中将所有的用户的昵称和它的IP均包含在其中,新用户是最后一个。
2.发送昵称信息的格式:“昵称”@用户的昵称此信息用于在客户和服务器建立连接后,发送用户的昵称给服务器。
而用户的IP 地址可以通过(socket.RemoteAddress)得出。
课程设计(论文)任务书信息学院专业计算机班级2009-2一、课程设计(论文)题目基于Winsock的简单聊天工具的设计二、课程设计(论文)工作:自2011年6月20日起至2011年6月25日止。
三、课程设计(论文)的内容要求:1)基本要求:1、分析Winsock的编程技术,特别是Winsock使用2、分析聊天程序的功能及其相关网络协议3、给出程序流程图和设计方案4、选择开发环境,编译源程序5、给出软件测试文档2)设计要求1、资料提交形式:课程设计报告一份(按学校相关标准、纸质,且严格按照给定模板来组织撰写,特别是课设时间要对、签名要手写、封面一定要用学校买的)、电子文档一份;2、课程设计报告不少于3000字;3、电子文档中必须至少有5份参考资料,压缩后以班为单位交电子版给老师,时间为第18周的周六。
4、成绩:出勤占10%、课程设计报告占40%、答辩占20%、参考资料占30%。
5、课程设计报告模板写附录。
3)工具要求:1、界面清楚易懂;2、程序层次结构清晰。
4)实验安排:1、地点:创新大楼东4052、时间:周一、三、四上午8:00--11:30学生签名:2011年6月26日课程设计(论文)评阅意见等级项目优秀良好中等及格不及格课程设计态度评价出勤情况评价任务难度评价工作量饱满评价设计中创新性评价论文书写规范化评价综合应用能力评价综合评定等级评阅人谢昕职称教授2011年6月27日目录一、任务分析与方案设计 01.任务分析 02.方案设计 0二、开发环境与工具 01.设计环境 01.1 eclipse开发平台介绍 02.基础知识 (1)2.1java Socket网络编程简介 (1)2.2套接字的介绍 (1)2.3 TCP/IP协议简介 (1)三、关键技术与理论 (2)1.JA V A编程技术 (2)2.Java Socket网络编程接口 (2)四、相关图解及程序 (3)1.体系结构设计 (3)2.具体功能模块的分析 (3)3.程序代码: (4)五、测试及结果分析 (8)六、心得体会 (10)七、参考文献 (11)一、任务分析与方案设计1.任务分析随着计算机科学技术的发展,网络越来越深刻地改变着人们生活方方面面。
四川畜牧兽医学院学报 2002,16(4)Jo urnal of Sichuan Institute of Animal Hus bandry and Veterinary MedicineVB6中用Winsock 控件实现多台计算机之间的通信胡大辉 杜治国 肖兴江(西南农业大学荣昌校区信息学院 重庆荣昌 402460)摘 要 本文主要阐述通过VB6中Winsock 控件的灵活运用,达到计算机之间相互通信的目的。
文章从介绍Winsock 控件入手,利用W insock 控件实现两台计算机之间互相通信,在此基础上达到多台计算机通信的目的,最后概要介绍开发实用通信软件的基本方法。
关键词 VB6 Winsock 计算机通信 程序设计中图分类号 G201 文献标识码 A 文章编号 1009-0533(2002)04-0080-051 前言Visual Basic 6.0,简称VB6,是M icrosoft Visual Studio 可视化工具中的一个开发工具,是一个用于快速开发基于Windo w s 的客户机/服务器应用程序的高效工具。
Visual Basic 现在流行的版本是6.0,比较以往的版本,VB6新增的特性有:数据访问的改进,增加AD O(ActiveX Date Objects)控件;新的网络通信特性;新增一些控件并对原有控件进行改进;用户可以创建自己的数据源;对语言特性进行改进并新增一些函数。
因此,无论用户是Windo ws 编程的新手或是对Windo ws 编程有丰富的经验,利用Visual Ba-sic 提供的良好的开发环境,用户均可快速完成所需任务。
在VB6中,一共有三个Activ eX 控件可以用来开发计算机通信应用程序,它们为用户提供了几乎每一层的网络通信协议。
这三个控件是Winso ck 控件、Intern et Transf er 控件和Web-Bro wser 控件。
2 Winsock 控件的功能及属性2.1 Winsock 控件的功能 Winsock 控件能开发基于传输控制协议(TCP)和用户数据报协议(UD P)的计算机网络通信应用程序,并提供对T CP 和UD P 的低层访问。
vb中winsock简单实例VB中的Winsock简单实例Winsock是一种来自于VB的库,它允许我们通过网络进行数据传输。
使用Winsock可以在计算机之间建立网络连接,发送和接收数据包等。
本文将为您介绍如何在VB中创建和使用Winsock的简单实例。
首先,我们需要了解一些基本的网络概念。
在计算机网络中,有两种常见的通信协议:TCP和UDP。
TCP(传输控制协议)提供可靠的数据传输,而UDP(用户数据报协议)提供不可靠但更快的数据传输。
在本文中,我们将重点介绍使用TCP进行数据传输的Winsock实例。
第一步是在VB中添加Winsock控件。
打开VB开发环境,并在工具箱中找到Winsock控件。
将其拖放到您的表单中。
第二步是为Winsock控件设置属性。
选中Winsock控件,然后在属性窗口中设置以下属性:- LocalPort:这是本地使用的端口号。
您可以选择任意未被其他应用程序使用的端口号。
- Protocol:选择TCP协议。
- RemoteHost:指定远程主机的IP地址。
您可以输入主机名或IP地址。
- RemotePort:指定远程主机的端口号。
这是目的地主机上的应用程序正在监听的端口号。
第三步是编写VB代码来建立连接并发送数据。
在表单中的代码窗口中添加以下VB代码:Private Sub Command1_Click()Winsock1.Connect '建立与远程主机的连接End SubPrivate Sub Command2_Click()Winsock1.SendData "Hello World" '向远程主机发送数据End SubPrivate Sub Winsock1_Connect()MsgBox "连接成功" '连接成功时显示一条消息End SubPrivate Sub Winsock1_DataArrival(ByVal bytesTotal As Long) Dim data As StringWinsock1.GetData data '接收从远程主机传输过来的数据MsgBox "接收到的数据:" & dataEnd Sub在上面的代码中,Command1按钮的Click事件将建立与远程主机的连接。
在WINCC中使用WinSock控件进行TCP/IP通讯的例程目录一、WinSock控件介绍(以VB语言表述) (1)1、WinSock控件的主要属性 (1)2、WinSock控件的主要方法 (2)3、WinSock控件的主要事件 (3)二、WinSock控件在WINCC中的使用 (3)1、WinSock控件注册 (3)2、在WinCC中添加WinSock控件 (4)三、服务器端程序介绍 (4)四、WinCC画面模板与结构变量的配合使用 (6)1、结构变量定义 (6)2、画面模板组态 (7)3、调用画面模板及修改变量前缀 (7)4、将画面模板中的对象连接到变量 (8)五、建立TCP/IP连接 (8)六、接收数据包的处理 (10)附:在VBS中进行数据处理的局限性及变通解决方法 (12)摘要:关键词:VB、VBS、WINCC、WINSOCK、DLL、UNICODE、ANSI、ASCII、画面模板、结构变量、数据转换。
该文档的软件环境:Microsoft Windows XP Professional 版本2002SP3SIMATIC WinCC V6.2 SP2 ASIA‘SIMATIC STEP7 V5.4+SP5+HF3 ChineseTCP&UDP测试工具V1.02目的:使用WINCC用户程序作为客户端程序,与服务器通讯,通讯协议为标准TCP/IP协议,取得服务器发送过来的数据包,按数据包格式文本规定,解析数据包数据,并将相关数据显示在用户程序画面中。
一、WinSock控件介绍(以VB语言表述)1、WinSock控件的主要属性1) Protocol属性通过Protocol属性可以设置WinSock控件连接远程计算机使用的协议。
可选的协议是TCP和UDP对应的VB的常量分别是sckTCPProtocol和sckUDPProtocol,Winsock控件默认协议是TCP。
注意:虽然可以在运行时设置协议,但必须在连接未建立或断开连接后。
用V B-W i n s o c k控件创建T C P-I P客户机服务器程序用VB Winsock控件创建TCP/IP客户机/服务器程序Winsock控件建立在TCP、UDP协议的基础上,完成与远程计算机的通信。
即使对TCP/IP不太熟悉的用户,使用该控件也可以在十几分钟内创建一个简单的客户机/服务器程序。
下面我们对Winsock控件的事件、方法、属性按其在程序中出现的顺序分别作详细的介绍,以便更好地理解程序源代码。
下面是Winsock控件的相关属性,方法和事件。
(略去一些暂用不到的)*属性-------------------------------------------------------------------------LocalHostName | 本地机器名LocalIP | 本地机器IP地址LocalPort | 本地机器通信程序的端口(0<端口<65536)RemoteHost | 远程机器名RemotePort | 远程机器的通信程序端口state | 连接的当前状态(文后有详细说明)Protocal | 使用TCP或UDP协议(这里我们选‘0-sckTCPProtocal’)--------------------------------------------------------------------------*方法--------------------------------------------------------------------------ListenListen方法用于服务器程序,等待客户访问。
格式:Winsock对象.listenConnectConnect方法用于向远程主机发出连接请求格式:Winsock对象.connect [远程主机IP,远程端口]AcceptAccept方法用于接受一个连接请求格式:Winsock对象.accept Request IDSenddata此方法用于发送数据格式:Winsock对象.senddata 数据Getdata用来取得接收到的数据格式:Winsock对象.getdata 变量 [,数据类型 [,最大长度]]Close关闭当前连接格式:Winsock对象.close*事件----------------------------------------------------------------------------Close | 远程机器关闭连接时触发Connect | 连接建立好,可以进行通信时触发(客户端)ConnectRequest | 有请求连接到达时产生(服务器端)DataArrival | 有数据到达时触发Error | 发生错误时发生SendProgress | 数据传送进度-----------------------------------------------------------------------------服务器程序的实现过程是:(1)服务器程序必须设置好LocalPort属性,作为侦听端口,该值为一个整数(只要是一个其它T CP/IP应用程序没有使用过的值即可)。
例题3 用VB Winsock实现网络聊天室
李文锋;龚德良
【期刊名称】《电脑编程技巧与维护》
【年(卷),期】2005(000)B08
【摘要】本文介绍了Socket的基本知识,阐述了聊天室的基本功能,给出了利用VB中的Winsock控件编写服务器端、客户端通信程序的基本思路。
【总页数】3页(P10-12)
【作者】李文锋;龚德良
【作者单位】无
【正文语种】中文
【中图分类】TP393
【相关文献】
1.基于VB的Winsock控件实现网络通信 [J], 王颖丽
2.VB环境下用Winsock实现网络通信 [J], 周正国
3.例题9 在VB下实现用Winsock控件通信 [J], 贾永胜
4.基于VB_Winsock控件实现网络聊天功能 [J], 姜丽杰
5.基于VB的Winsock控件实现C/S网络通信 [J], 龚安
因版权原因,仅展示原文概要,查看原文内容请购买。
2007年第10期福建电脑基于TCP/IP的局域网聊天工具设计林晓(福建省计算中心福建福州350003)【摘要】:程序分服务和客户程序两部分。
客户程序启动后首先与服务器连接,连接成功后,随意输入一个名字即可进入聊天室;服务程序则负责维护与每一个客户的连接和数据交换,并且记录下所有聊天内容及人员名单。
服务器程序实现了IP地址跟踪功能。
管理人员可以很容易地查找出每一个匿名的计算机名,并对之进行警告或其它处理(下面会进一步介绍)。
可保证会话内容的健康。
如果服务器程序关闭,则所有客户程序自动关闭。
【关键字】:TCP/IP,Winsock,服务器,客户端。
Internet上的聊天室一向是一个吸引人的地方,但多用C语言设计,我用VB设计了一个局域网聊天室,取名为"聊聊吧"聊天室,实际使用证明效果良好。
Internet上的通讯协议是TCP/IP,Internet上数据传输协议主要有TCP和UDP,TCP是有连接协议,它要求计算机进行对话时必须先建立连接,保证数据传送安全到达目的地。
UDP是无连接协议,它只是将信息送到网络上,并不检查数据是否到达了目的地。
要进行实时会话,则应该采用TCP协议。
本程序采用的协议就是TCP协议。
1.设计概要1、设计原理本程序基TCP/IP协议,采用服务器与客户端模式,选用VB程序设计语言。
服务器端简化过程为:设置连接所用的端口---->开始监听此端口---->接到请求后建立连接---->可以发送和接收数据---->不用了就关闭。
服务器端详细工程:①设置好LocalPort属性(即你和客户端连接所用得端口);②用Listen方法进入监听状态,等待客户端发连接请求;③当客户端发送了连接请求后,服务器端产生Connection-Request实践,该事件得到一个参数requestID;④服务器端用Accept方法接受客户机的程序的requestID,此后服务器端就可以用SendData方法发送数据了;⑤当服务器接收到客户端发来的数据时,产生DataArrival事件,在这个事件里,就可以用GetData方法接收数据了;⑥如果遇到Close事件,则Close方法会关闭TCP/IP连接,也就是断开连接了。
中Winsock控件的使⽤详解(⼀)_ 中Winsock控件的使⽤详解(⼀)作者:不详出处:IT专家⽹ 2009/8/7 11:39:28 阅读 646 次 如同上⾯的内容所描述的,不论您使⽤UDP协议或是TCP协议,Winsock控件都可以允许与远程的设备连接,并且在相互之间交换数据。
因此,依据上⾯的⾯熟⽽⾔,不论您使⽤的是哪⼀种协议都可以扮演主机端和客户端的⾓⾊。
同时,当您在使⽤Winsock控件的过程中,这个控件不会显⽰在正在执⾏的窗体之中。
换句话说,Winsock控件是在后台运⾏的⼀种控件。
在执⾏过程之中,不会具有任何选⽤、可见的控件。
那么该如何使⽤Winsock控件呢?它可以被应⽤在那些类型的应⽤程序之中呢?以下所列出的内容,是这个控件可以应⽤的⼤致范围: 1)、将客户端所收集的数据,传送给主机端。
2)、点对点的⽂件传送。
3)、聊天室应⽤程序。
4)、电⼦公告栏。
5)、voip(voice over TCP/ip) 因此,当您希望建⽴上述类型的应⽤程序之前,必须要学习如何选⽤适合的协议类型。
⼀、如何选⽤适⽤的协议 当您准备开始使⽤Winsock控件之前,⾸要的⼯作是如何选择适⽤的协议类型。
如同先前所述的,您可以选择TCP 协议或是UDP协议中的⼀种。
但是这两种协议的差异点在哪⾥呢?虽然,它们同样可以使⽤在Internet或是Internet环境之中,但是主要的差异在于连接的状态。
以下是这两种协议的特点说明: 1)、TCP协议是属于⾯向连接的协议。
所谓的⾯向连接协议是指——“在您可以交换数据之前,在两个终端设备之间必须连接成功”。
同时,在⽹络的基础理论之中,都会特别强调TCP具有错误核对的功能。
也就是说,在数据的传送过程中,如果发⽣错误或是数据⽆法传达对⽅时,TCP协议将会重复尝试着重新传送数据。
因此,核对以及重新传送的能⼒,因此起传输效率会⽐Internet协议或是巨域⽹络协议差⼀些(netBIEUI、IPX、AppleTalk)。
基于Winsock的Chat设计
王金保
【期刊名称】《辽宁石油化工大学学报》
【年(卷),期】2004(024)004
【摘要】网上Chat是Internet十分普通的一个应用,利用Socket聊天室的基本原理,根据HTML规范,当接收到浏览器的请求后,模仿WWW服务器的响应,将聊天内容发送回浏览器,就像浏览一个很大的页面始终处于页面的连接状态.叙述了Windows Socket套接口应用,流式套接口、数据报套接口和原始套接口3类套接口的差别,Winsock控件的作用,给出了面向连接套接口应用程序数据流程图.对于分布式环境常用的客户机/服务器模型,客户应用程序向服务器程序请求服务,协议可以是对称的,也可以是不对称的,连接客户机/服务器的服务也可以通过数据报套接口提供.按客户机/服务器模型,应用VB6.0设计了一个Chat软件的窗体和其它模块,并附上服务器端代码例子.
【总页数】3页(P60-62)
【作者】王金保
【作者单位】辽宁石油化工大学,辽宁,抚顺,113001
【正文语种】中文
【中图分类】TP393.4
【相关文献】
1.基于WinSock控件的网络程序设计 [J], 邵志方
2.基于WinSock的局域网聊天室设计与实现 [J], 陈健苇;
3.基于Winsock技术的端口扫描软件设计 [J], 张辉
4.基于WinSock的智能感知实训平台PC客户端软件设计与实现 [J], 李建新;柯钢;杨怀德
5.利用VB的Winsock设计Chat程序 [J], 刘淑芝;王晓乔
因版权原因,仅展示原文概要,查看原文内容请购买。
1.服务器端往服务器窗体(命名为frmServer)添加三个控件,分别为LIST1(存放在线好友名单),text1(留言内容)和text2(聊天记录),程序如下:Option ExplicitConst Busy As Boolean = FalseConst Free As Boolean = TrueDim ConnectState() As BooleanDim SIndexDim Usrs(0 To 32) '在线人名Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)EndEnd SubPrivate Sub Form_Load()If App.PrevInstance = True ThenMsgBox "程序已在运行", vbCriticalEndEnd IfReDim Preserve ConnectState(0)On Error Resume NextConnectState(0) = FreeListener.LocalPort = 1001 '端口号Listener.Listen '开始侦听End SubPrivate Sub Listener_ConnectionRequest(ByValrequestID As Long)Dim SockIndexAs IntegerDim SockNumAs IntegerOn Error Resume NextSockNum = UBound(ConnectState)If SockNum> 32 ThenExit Sub'查找空闲的SckServerSockIndex = FindFreeSocket'如果已有的sock都忙,而且sock数不超过32个,动态添加sockIf SockIndex>SockNum Then Load SckServer(SockIndex)ConnectState(SockIndex) = BusySckServer(SockIndex).Tag = SockIndex'接受请求SckServer(SockIndex).Accept (requestID)End SubPrivate Sub SckServer_DataArrival(Index As Integer, ByValbytesTotal As Long)Dim dx As StringSIndex = IndexSckServer(Index).GetData dx, vbStringIf Len(Text2.Text) >= 512 Then Text2.Text = ""If Right(dx, 2) = "||" ThenList1.AddItem Replace(dx, "|", "")Usrs(SIndex) = Replace(dx, "|", "")Timer1.Enabled = TrueText2.Text = Format(Now(), "YY-MM-DD hh:mm:ss") & " “" &Usrs(Index) & "”上线。
" &vbCrLf& Text2.TextOpen App.Path& "\record.txt" For Append As #1Write #1, Format(Now(), "YY-MM-DD hh:mm:ss") & " “" &Usrs(Index) & "”上线。
"Close #1ElseText1.Text = Left(dx, InStr(dx, "|")) & Format(Now(), "YY-MM-DD hh:mm:ss") &vbCrLf&Usrs(Index) & "☆说:" & Right(dx, Len(dx) - InStr(dx, "|"))Text2.Text = Format(Now(), "YY-MM-DD hh:mm:ss") & " “" &Usrs(Index) & "”对“" & Replace(dx, "|", "”说:" &vbCrLf) &vbCrLf& Text2.TextOpen App.Path& "\record.txt" For Append As #1Write #1, Format(Now(), "YY-MM-DD hh:mm:ss") & " “" &Usrs(Index) & "”对“" & Replace(dx, "|", "”说:" &vbCrLf)Close #1End IfEnd SubPrivate Sub SckServer_Close(Index As Integer)Dim i%On Error Resume NextIf SckServer(Index).State <>sckClosed Then SckServer(Index).CloseConnectState(Index) = FreeText2.Text = Format(Now(), "YY-MM-DD hh:mm:ss") & " “" &Usrs(Index) & "”下线。
" &vbCrLf& Text2.TextOpen App.Path& "\record.txt" For Append As #1Write #1, Format(Now(), "YY-MM-DD hh:mm:ss") & " “" &Usrs(Index) & "”下线。
"Close #1For i = 0 To List1.ListCountIf List1.List(i) = Usrs(Index) ThenList1.RemoveItem (i)Usrs(Index) = ""Timer1.Enabled = TrueExit ForEnd IfNextEnd SubPublic Function FindFreeSocket()Dim SockCount, i As IntegerSockCount = UBound(ConnectState)For i = 0 ToSockCountIf ConnectState(i) = Free ThenFindFreeSocket = iExit FunctionEnd IfNext iReDim Preserve ConnectState(0 To SockCount + 1)FindFreeSocket = UBound(ConnectState)End FunctionPrivate Sub Text1_Change()Dim Ar, iOn Error GoTo L1Ar = Split(Text1.Text, "|")For i = 0 To UBound(Usrs)If Usrs(i) = Ar(0) And Ar(0) <> "" Then Exit ForNextSckServer(i).SendData Text1.TextL1:End SubPrivate Sub Timer1_Timer()Dim i%, j%, Str$For j = 0 To List1.ListCountStr = Str&List1.List(j) & "||"NextOn Error Resume NextFor i = 0 To UBound(ConnectState) SckServer(i).SendDataStrNextL1:Str = ""Timer1.Enabled = FalseEnd Sub2.客户端客户端工程里添加两个窗体(Login和frmClient),分别如图所示,把登陆窗体存放用户名的文本框命名为USRN。
程序代码如下(示范,没什么实际意义):Private Sub Form_Load()If App.PrevInstance = True ThenMsgBox "程序已在运行", vbCriticalEndEnd IfUsrn.Text = UCase(Environ("UserName"))End SubPrivate Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)EndEnd SubPrivate Sub Command1_Click()Me.HidefrmClient.ShowEnd SubPrivate Sub Command2_Click()Usrn.Text = ""Text2.Text = ""End SubPrivate Sub Command3_Click()EndEnd Sub在对话窗体(frmClient)中添加三个对象,List1用于存放在线好友名单,单击选中要交谈的好友,Txtsend输入要发送的信息,txtOutput显示收到的信息。
Connect按钮用于重新连接服务器。
程序如下:ConstComputerName = "你的计算机名字或IP地址"Private Sub Form_Load()'Winsock 控件的名字为SckClient。