ImageVerifierCode 换一换
你正在下载:

vb.docx

[预览]
格式:DOCX , 页数:12 ,大小:42.96KB ,
资源ID:10235942      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/10235942.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(vb.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

vb.docx

1、vbVB Socket编程(Winsock控件创建TCP/IP客户机/服务器程序)好东西,所以收藏 Winsock控件建立在TCP、UDP协议的基础上,完成与远程计算机的通信。即使对TCP/IP不太熟悉的用户,使用该控件也可以在十几分钟内创建一个简单的客户机/服务器程序。下面我们对Winsock控件的事件、方法、属性按其在程序中出现的顺序分别作详细的介绍,以便更好地理解程序源代码。下面是Winsock控件的相关属性,方法和事件。(略去一些暂用不到的)*属性-LocalHostName | 本地机器名LocalIP | 本地机器IP地址LocalPort | 本地机器通信程序的端口(0 端口 6

2、5536)RemoteHost | 远程机器名RemotePort | 远程机器的通信程序端口state | 连接的当前状态(文后有详细说明)Protocal | 使用TCP或UDP协议(这里我们选0-sckTCPProtocal)-*方法-ListenListen方法用于服务器程序,等待客户访问。格式:Winsock对象.listenConnectConnect方法用于向远程主机发出连接请求格式:Winsock对象.connect 远程主机IP,远程端口AcceptAccept方法用于接受一个连接请求格式:Winsock对象.accept Request IDSenddata此方法用于发送数

3、据格式:Winsock对象.senddata 数据Getdata用来取得接收到的数据格式:Winsock对象.getdata 变量 ,数据类型 ,最大长度Close关闭当前连接格式:Winsock对象.close*事件-Close | 远程机器关闭连接时触发Connect | 连接建立好,可以进行通信时触发(客户端)ConnectRequest | 有请求连接到达时产生(服务器端)DataArrival | 有数据到达时触发Error | 发生错误时发生SendProgress | 数据传送进度-服务器程序的实现过程是:(1)服务器程序必须设置好LocalPort属性,作为侦听端口,该值为一个

4、整数(只要是一个其它TCP/IP应用程序没有使用过的值即可)。(2)使用Listen方法进入侦听状态,等待客户机程序的连接请求。(3)客户机程序发出连接请求,使服务器程序产生ConnectionRequest事件,该事件得到一个参数requestID。(4)服务器程序用Accept方法接受客户机程序的requestID请求。这样,服务器程序就可以用SendData方法发送数据了。Accept方法必须用上一步得到的requestID作为其参数。(5)当服务器程序接收到数据时,产生DataArrival事件,参数BytesTotal包含接收到的数据字节数。在该事件中,可以用GetData方法接收数

5、据。(6)如果接受到Close事件,则用Close方法关闭TCP/IP连接。客户机程序的实现过程是:(1) 客户程序设置Remotehost属性,以便指定运行服务器程序的主机名,该字符串可在“控制面板|网络|标识|计算机名”中查到。(2) 设置RemotePort属性,以便指定服务器程序的侦听端口。(3)使用Connect方法,向服务器提出连接请求。(4)服务器接受客户机程序的请求,客户机程序产生Connect事件,就可以用SendData方法发送数据了。(5)当客户机程序接收到数据时,产生DataArrival事件,参数BytesTotal包含接收到的数据字节数。在该事件中,可以用GetDa

6、ta方法接收数据。(6)如果接受到Close事件,则用Close方法关闭连接。Winsock控件还有两个重要的属性,即Protocol和State。Protocol设定使用的协议是TCP还是UDP:取值 sckTCPProtocol表示TCP, 取值sckUDPProtocol则表示UDP。因为Winsock控件的缺省设置是sckTCPProtocol,所以程序中并没有使用 Protocol属性。State属性反映的是当前TCP/IP的连接状态,取值如表1所示。表1 Winsock控件的State属性及其描述常数 值 描述SckClosed 0 缺省值,关闭SckOpen 1 打开SckLis

7、tening 2 侦听SckConnectionPending 3 连接挂起SckResolvingHost 4 识别主机SckHostResolved 5 已识别主机SckConnecting 6 正在连接SckConnected 7 已连接SckClosing 8 同级人员正在关闭连接SckError 9 错误先在一台计算机上运行服务器程序,此时窗口上只有一个“退出”按钮。再在另一台计算机上运行客户机程序,在“连接”按钮右边的文本框中输入服务器的主机名后单击“连接”按钮。如果连接成功,则服务器和客户机程序窗口都会出现两个文本框。这时,两端都可以在上面的文本框中输入文字,这些文字会立即在下面

8、的文本框中出现。服务器程序使用的控件如下:(1)Command1:退出按钮;(2)textsend:发送数据文本框;(3)Winsockserver: 服务器Winsock;(4)textget :接收数据文本框。服务器程序的界面如图所示。服务器程序的源代码如下:Private Sub Command1_Click()EndEnd SubPrivate Sub Form_Load()textsend.Visible = Falsetextget.Visible = FalseWinsockserver.LocalPort = 1001Winsockserver.ListenEnd SubPri

9、vate Sub textsend_Change()Winsockserver.SendData textsend.TextEnd Subsockserver_Close()Winsockserve Private Sub Win r.CloseEndEnd SubPrivate Sub Winsockserver_ConnectionRequest(ByVal requestID As Long)textsend.Visible = Truetextget.Visible = TrueIf Winsockserver.State sckClosed Then Winsockserver.Cl

10、oseWinsockserver.Accept requestIDEnd SubPrivate Sub Winsockserver_DataArrival(ByVal bytesTotal As Long)Dim tmpstr As StringWinsockserver.GetData tmpstrtextget.Text = tmpstrEnd Sub客户机程序使用的控件如下:(1)Command1:退出按钮;(2)Command2:连接按钮;(3)Winsockclient:客户Winsock;(4)Text1:主机名文本框;(5)Textsend:发送数据文本框;(6)Textget:

11、接收数据文本框; 客户机程序的源代码如下:Private Sub Command1_Click()EndEnd SubPrivate Sub Command2_Click()Winsockclient.ConnectEnd SubPrivate Sub Form_Load()textsend.Visible = Falsetextget.Visible = FalseWinsockclient.RemotePort = 1001Winsockclient.RemoteHost = sccdszEnd SubPrivate Sub Text1_Change()Winsockclient.Remo

12、teHost = Text1.TextEnd SubPrivate Sub textsend_Change()Winsockclient.SendData textsend.TextEnd SubPrivate Sub Winsockclient_Close()Winsockclient.CloseEndEnd SubPrivate Sub winsockclient_Connect()textsend.Visible = Truetextget.Visible = TrueCommand2.Visible = FalseEnd SubPrivate Sub winsockclient_Dat

13、aArrival(ByVal bytesTotal As Long)Dim tmpstr As StringWinsockclient.GetData tmpstrtextget.Text = tmpstrEnd Sub我试过了,可以用我很早就想写些技术的东东了,但好久都没有写,因为没有时间,自己又很累,又有点懒,但是,看到我的同事和朋友们的技术提高不是很快,就把我掌握的编程技术总结下来,以便我的朋友们能学到好的东西。我也奉劝看过我的BLOG的朋友们,把自己知道的计算机知识,告诉你认识的人吧,因为,计算机知识更新太快,很容易过时,所以,废弃的也快。好了,进入我的VB Socket 编程。(鼠标

14、又坏了,尽量少些文字介绍主要的做法) 关于客户端和服务器端的通信 先介绍客户端程序的做法: 首先,要建立客户端的工程。要把Winsock控件引用到工程中,做法:菜单工程-部件-Micorosoft winsock controls 6.0在画面上添加1个Winsock控件:命名:winsockClient 属性Protocol 设定 0-sckTCPProtocol 客户端连接: winsockClient .Close IP winsockClient .RemoteHost = 192.168.1.105 Port winsockClient .RemotePort = 20000 Con

15、nect winsockClient .Connect客户端送信: If winsockClient .State = sckConnected Then winsockClient .SendData Data Else error Call ShowMessage End If客户端接收数据: Private Sub winsockClient _DataArrival(ByVal bytesTotal As Long) 接收 winsockClient .GetData Receive If winsockClient .State = sckConnected Then 再送信 win

16、sockClient .SendData bytSend Else Error Call ShowMessage End IfEnd Sub客户端winsockClient的Error 处理:Private Sub winsockClient _Error(ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean)

17、 On Error Resume Next 连接不能的情况下 If winsockClient .State sckConnected Then 。 winsockClient .Close Exit Sub End IfEnd Sub客户端winsockClient的Close处理:Private Sub winsockClient _Close() winsockClient .CloseEnd Sub好了,上面就是客户端的主要程序点,下面介绍服务端的做法。建立服务端的工程,在画面上添加2个Winsock控件:命名:winScokListen属性Protocol 设定 0-sckTCPPr

18、otocol (专门用于监听) 命名:winSocktSend属性Protocol 设定 0-sckTCPProtocol (专门用于通信)这里简单介绍一下,这2个Winsock控件,一个专门用于监听,一个专门用于通信,就是防止服务端不必再启动,客户端就可以很方便的连接和断开。要是用一个的话,做不到这一点(除非很变态的做法)。服务端启动并监听客户端连接: winScokListen.Close winSocktSend.Close winScokListen.Protocol = sckTCPProtocol winScokListen.LocalPort = 20000winScokList

19、en.Listen 服务端监听到客户端的连接并接受 Private Sub winScokListen_ConnectionRequest(ByVal requestID As Long) winSocktSend.Accept requestIDEnd Sub服务端接收和送信Private Sub winSocktSend_DataArrival(ByVal bytesTotal As Long) On Error Resume Next 接收 winSocktSend.GetData Receive If winSocktSend.State = sckConnected Then 送信

20、winSocktSend.SendData Send Else Error Call ShowMessage End IfEnd SubWinscok的关闭:Private Sub winScokListen_Close() winScokListen.CloseEnd SubPrivate Sub winSocktSend_Close() winSocktSend.CloseEnd Sub上面2个工程,主要的功能做法就这样,其他的自己加入。编译后,就可以了。服务器端代码:Imports SystemImports System.NetImports System.Net.SocketsImp

21、orts System.TextImports System.ThreadingImports Microsoft.VisualBasicPublic Class Form1 Dim s As Socket = Nothing Dim t As Thread Public Sub WaitData() s = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp) 使用TCP协议 Dim localEndPoint As New IPEndPoint(IPAddress.Parse(127.0.0.

22、1), 1024) 指定IP和Port s.Bind(localEndPoint) 绑定到该Socket s.Listen(100) 侦听,考试#大提示最多接受100个连接 While (True) Dim bytes(1024) As Byte 用来存储接收到的字节 Dim ss As Socket = s.Accept() 若接收到,则创建一个新的Socket与之连接 ss.Receive(bytes) 接收数据,若用ss.send(Byte(),则发送数据 ListBox1.Items.Insert(0, Encoding.Unicode.GetString(bytes) 将其插入到列表

23、框的第一项之前 若使用Encoding.ASCII.GetString(bytes),则接收到的中文字符不能正常显示 End While End Sub Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click t =

24、New Thread(AddressOf WaitData) 建立新的线程 t.Start() 启动线程 Button1.Enabled = False 按钮不可用,避免另启线程 End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Try s.Close() 关闭Socket t.Abort() 中止线程 Catch Finally Button1.Enabled = True 启用BtnStart End Try

25、End SubEnd Class客户端代码:Imports System.Net.SocketsImports System.NetImports System.TextPublic Class Form1 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)

26、 Handles Button1.Click Try Dim bytes(1024) As Byte Dim s = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp) Dim localEndPoint As New IPEndPoint(IPAddress.Parse(127.0.0.1), 1024) s.Connect(localEndPoint) s.Send(Encoding.Unicode.GetBytes(TextBox1.Text) s.Close() Catch ex As

27、Exception End Try End SubEnd ClassPrivate Sub Cmdsend_Click()If Textsend.Text = Thenpp = MsgBox(发送数据不能为空!, 16)Exit SubEnd IfMSComm1.Output = Trim(Textsend.Text)For i = 1 To 20000000Next iEnd SubPrivate Sub Form_Load()MSComm1.CommPort = 1MSComm1.Settings = 9600,n,8,1MSComm1.InputMode = 0MSComm1.PortOpen = TrueEnd SubPrivate Sub Timer1_Timer()Dim buf$buf = Trim(MSComm1.Input)If Len(buf) 0 ThenTextreceive.Text = Textreceive.Text

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1