Winsock控件使用手册
winsock使用手册
winsock使用手册WinSock(Windows Socket)是一种在Windows系统上开发网络应用程序所使用的应用程序接口(API)。
通过使用WinSock API,开发人员可以创建与互联网协议(IP)网络上的其他计算机进行通信的应用程序。
以下是使用WinSock API的基本步骤:1. 初始化WinSock:在使用WinSock之前,必须初始化WinSock库。
这可以通过调用WSAStartup函数来完成,该函数会加载WinSock库并将其与应用程序关联起来。
2. 创建套接字:要使用WinSock进行通信,必须创建一个套接字。
这可以通过调用socket函数来完成。
该函数接受三个参数:套接字类型(如TCP 或UDP)、套接字协议(如IP协议)以及套接字地址家族(如IPv4或IPv6)。
3. 绑定套接字:创建套接字后,必须将其绑定到一个本地地址和端口上。
这可以通过调用bind函数来完成。
bind函数接受两个参数:一个指向sockaddr结构的指针,该结构包含本地地址和端口信息;以及一个指向套接字描述符的指针。
4. 监听连接:对于TCP套接字,必须调用listen函数来开始监听传入的连接请求。
listen函数接受两个参数:一个指向套接字描述符的指针和一个指定最大连接数的整数。
5. 接受连接:当一个连接请求到达时,必须调用accept函数来接受该请求并返回一个新的套接字描述符。
accept函数接受两个参数:一个指向套接字描述符的指针和一个指向sockaddr结构的指针,该结构用于存储远程地址信息。
6. 发送和接收数据:一旦建立了连接,就可以使用send和recv函数来发送和接收数据。
send函数接受三个参数:一个指向套接字描述符的指针、一个指向要发送数据的缓冲区的指针以及一个指定要发送的数据量的整数。
recv函数也接受类似的参数,用于接收数据。
7. 关闭套接字:完成数据传输后,必须调用close或closesocket函数来关闭套接字并释放资源。
利用Winsock控件实现局域网通信
利用Winsock控件实现局域网通信Winsock控件是操作系统Windows提供的一种API,用于实现应用程序之间的网络通信。
利用Winsock控件,我们可以轻松地实现局域网通信,实现不同电脑之间的数据交互和消息传递。
在本文中,我们将介绍利用Winsock控件实现局域网通信的方法和步骤。
首先,我们需要在Visual Basic中引用Winsock控件。
在VB界面中,选择“工具箱”栏目,然后右键单击空白处,选择“组件”菜单。
在弹出的“组件”对话框中,找到Winsock控件,并勾选选择框。
其次,在VB界面中添加Winsock控件,然后设置相关参数。
具体步骤如下:1. 选择“工具箱”栏目,找到Winsock控件,将其拖拽到VB界面中。
2. 右键单击Winsock控件,选择“属性”菜单,设置控件的名称、端口号、IP地址等参数。
3. 创建“发送”和“接收”按钮,分别用于发送和接收消息。
4. 在发送按钮的单击事件中,利用Winsock控件的SendData方法,将数据发送到指定的IP地址和端口号。
5. 在接收按钮的单击事件中,利用Winsock控件的GetData方法,接收其他电脑发来的消息。
以上步骤完成后,就可以利用Winsock控件实现局域网通信了。
当一个电脑发送消息时,其他电脑就会收到该消息,并进行相应的处理。
利用这种方法,我们可以实现多台电脑之间的实时数据交换和消息传递,提高工作效率和协同处理能力。
总之,利用Winsock控件实现局域网通信是一种方便、快捷、高效的方法,可以实现不同电脑之间的数据交互和消息传递。
在实际开发中,我们可以根据具体需求和实际情况进行相应的调整和优化,提高系统的性能和稳定性。
VBWinsock控件的使用与介绍
VB Winsock 控件的使用与介绍第一节: Winsock 控件的介绍Winsock 控件的作用简单说就是可以用于两台或多台机器间通信,这里不多说这个控件的作用了,因为在以后的介绍中我们会了解到这个控件的强大功能的,如可以用来做聊天软件等废话不多说,来看看他有些什么重要的属性、方法和事件吧!在 VB6.0 中的工具箱里默认情况下是没有这个控件的,添加方法如下:在工具箱上右击,选择 [部件 ],然后在部件对话框中选择 "MicrosoftWinsock Control6.0",后确定即可。
如果没有这个复选框的话,请点击 [浏览]按钮后在打开的 [添加 ActiveX 控件 ]对话框选择MSWINSCK.ocx 后选择打开,再点确定即可。
Winsock 控件在工具箱中图标为。
Winsck 的主要属性:属性名说明 BytesReceived返回接收的数据,可以用GetData 方法来获取它LocalHostName返回本机名LocalIP返回本机 IPLocalPort返回或设置本机所用的端口,如果为0 则为随机产生Protocol返回通信所用的协议RemoteHostName返回通信对方的计算机名RemoteHostIP返回通信对方的IPState返回 Winscok 的当前状态,取值如下sckClosed (常量为 0):关闭状态sckOpen (常量为 1):打开状态sckListening (常量为2):侦听状态sckConnectionPending (常量为3):连接状态sckResolvingHost (常量为4):解析主机中sckHostResolved (常量为 5):已解析主机sckConnecting (常量为6):正在连接sckConnected (常量为 7):已经连接sckClosing (常量为8):客户端正在关闭sckError (常量为9):连接发生错误。
VBWinsock控件的使用与介绍
Private Sub cmdSend_Click() wskClient.SendData txtMessage.Text ' txtContent.Text = vbCrLf & txtContent.Text & " " & txtMessage.Text ' txtContent.Text=""
HTTP 80 FTP 21
Web
Web
Web 124
Form_Load
124
Private Sub Form_Load() wskServer.LocalPort = 124 wskServer.Listen
End Sub
wskServer ConnectionRequest
Private Sub wskServer_ConnectionRequest(ByVal requestID As Long) If wskServer.State <> sckClosed Then wskServer.Close End If wskServer.Accept requestID
End Sub Winsock Connect
Private Sub wskServer_ConnectionRequest(ByVal requestID As Long) If wskServer.State <> sckClosed Then wskServer.Close ' wskServer.Accept requestID ' 4 ConnectionRequest Accept End If
Private Sub cmdConnect_Click() Dim IP As String IP = InputBox(" IP", " IP", "127.0.0.1") ' IP wskClient.RemoteHost =P wskClient.RemotePort = 1024 '2 RemotePort wskClient.Connect '3 Connect cmdConnect.Enabled = False
怎样用winsock控件发文件
怎样用winsock控件发文件客户端:Private Sub Form_Load()Winsock1.LocalPort = 1001Winsock1.ListenEnd SubDim a() As BytePrivate Sub Command1_Click()Winsock1.ConnectEnd SubPrivate Sub Command2_Click()Winsock1.SendData aEnd SubPrivate Sub Form_Load()Form2.ShowWinsock1.RemoteHost = "C3Y0V3"Winsock1.RemotePort = 1001Open "d:\B.DAT" For Binary As #1I = 0Do While Not EOF(1)I = I + 1ReDim Preserve a(1 To I)Get #1, , a(I)LoopResetDebug.Print IEnd Sub服务器端:如何才能接收全呢???Private Sub Form_Load()Winsock1.LocalPort = 1001Winsock1.ListenEnd SubPrivate Sub Winsock1_ConnectionRequest(ByVal requestID As Long) If Winsock1.State <> sckClosed Then Winsock1.CloseWinsock1.Accept requestIDEnd SubPrivate Sub Winsock1_DataArrival(ByVal bytesTotal As Long) Dim B() As ByteReDim Preserve B(1 To bytesTotal)Open "C:\WINDOWS\DESKTOP\C.DAT" For Binary As #2Winsock1.GetData B, vbByte + vbArrayFor I = 1 To bytesTotal - 1 'Put #2, , B(I)NextResetEnd Sub方法二---------------------------------------------------------------------------------------------------- 已连接的情况下:程序1:(发送端)Dim zhizhen As Long, size As Long, B() As Bytesize = 154800 '定义标准长度Open "d:\1.rar" For Binary As #5 '文件路径随便改好了If LOF(5) <= size Then '如果小于标准长度直接发送整个文件ReDim B(1 To LOF(5)) As ByteGet #5, 1, B()WckXiaZai.SendData B()Elsezhizhen = 0ReDim B(1 To size) As ByteWhile zhizhen + size <= LOF(5)'判断是否小于加上个SIZE的长度DoEventsGet #5, zhizhen + 1, B() '+1为指针加1WckXiaZai.SendData B()zhizhen = zhizhen + sizeWendReDim B(1 To LOF(5) - zhizhen) As Byte '发送文件除SIZE整数倍后剩下的数据Get #5, zhizhen + 1, B()WckXiaZai.SendData B()End If程序2(接收端)放在DataArrival事件里Dim a() As ByteWinsock1.GetData aOpen "要保存的文件路径" For Binary As #51Put #51, LOF(51) + 1, a()Close #51。
在PB中使用WINSOCK控件[2]
在PB中使用WINSOCK控件[2]winsock_a object protocol=//winsock通讯协议设为TCP协议winsock_a object localport=//本机的winsock通讯端口号winsock_a listen()//启动监听在甲方winsock_a控件的Connectionrequest事件中加入如下语句//接受到对方的连接请求后if winsock_a object state< > thenwinsock_a close()end ifwinsock_a accept(requestID)//建立直接连接//requestID是Connectionrequest事件自己的参数在乙方(作为客户端)窗口的Open事件中加入如下语句winsock_b object protocol=//winsock通讯协议设为TCP协议winsock_b object remotehost=//对方的ip地址winsock_b object remoteport=//对方的winsock通讯端口号winsock_b connect() //发出连接请求无论采用哪种协议都要在窗口的Close事件中加入如下语句if winsock_a/*或winsock_b*/ object state< > thenwinsock_a close()end if否则可能第二次使用时发生异常问题三开始通讯在按钮cb_ (caption属性设为发送)的click事件中加入如下语句winsock_a/*或winsock_b*/ object send (sle_ text)在winsock_a/*或winsock_b*/控件的dataarrival事件中加入如下语句//接受到对方数据后string datastrwinsock_a/*或winsock_b*/ object getdata (def datastr )sle_ text=datastr //将数据字符串显示在文本框中以上程序实际上体现了聊天器的底层工作原理稍加修改扩充就可以做成一个很好的聊天软件编辑推荐ASP NET开发培训视频教程Microsoft NET框架程序设计视频教程lishixinzhi/Article/program/PB/201311/24622。
Winsock控件
Winsock控件的基本属性此控件对于用户在运行时不可见,提供了一个简单的途径访问TCP及UDP网络服务而无需了解底层细节,使用时你只需设置属性、在恰当的时候调用它提供的方法即可。
主要属性有: BytesReceived:返回当前缓冲区中的字节数量,我们可以使用 GetData 方法以接收数据。
只读且设计时不可用。
LocalHostName:返回本机名字符串,设计时不可用。
LocalIP:返回以(xxx.xxx.xxx.xxx)格式表达的IP地址串。
设计时不可用,运行时只读。
LocalPort :本机使用接收端口可读写,设计时可用,Long型。
对于客户,如果无需指定端口,则用端口0发送数据。
在此情况下,控件将随机选择一个端口。
在一个连接确定后,为TCP的端口。
对于服务器,指用于监听的端口。
如设置为0,则用随机数。
在调用Listen 方法后,该属性自动包含用到的端口。
端口0总是用于在两计算机间建立动态连接。
客户希望通过端口0获得一个随机端口以”回调”连接服务器。
Protocol :套接字类型,为TCP或UDP二者之一,缺省为TCP类型。
设置为sckTCPProtocol表示TCP协议sckUDPProtocol表示UDP 协议。
在此属性被重置之前需用Close方法关闭之。
RemoteHost:发送或接收数据的主机,你可提供主机名如:,或一IP地址串,例如“100.0.1.1”。
RemoteHostIP:远程主机的IP地址。
对于客户程序,在连接确定后使用Connect 方法,此属性包含远程主机的IP名串。
对于服务器程序,在引入连接需求后(Connection Request 事件),此属性包含IP串。
当使用UDP套接字,在Data Arrival事件发生后,此属性为发送UDP数据的机器IP地址串。
RemotePort:连接套接字端口值。
例如通常HTTP应用使用80端口,FTP则使用21。
State:控件的状态,只读且设计时不可用。
Winsock控件基础(VB6.0)
Winsock控件基础(VB6.0)Winsock控件基础(VB6.0)1.Winsock控件基础Winsock控件在程序设计时,看不到这个控件显现在执行的窗体之中,但是它可以提供有关网络通讯方面的程序设计依据。
此外,在这个控件的使用上,您可以非常容易地要求控件为您调用TCP或是UDP网络服务的功能。
因此,当您在编写有关住从式架构的应用程序时,您可以不需要了解TCP 通讯协议或是低级的Winsock api调用方式。
通常,以笔者的经验,除了必须与标准通讯协议进行互动外,仅仅是进行一般性相互通讯、交换数据时,Winsock控件可以满足您的要求。
因此您可以非常容易地通过属性的设置以及控制方法的调用,与远程的设备进行连接并且相互交换信息。
关于这些应用方面以及调用方式,笔者将在接下的探索中,慢慢地研究Winsock的应用方式。
1-1TCP基础不论是在Internet或是Internet网络之中,以目前流行的趋势,多半都会使用TCP协议来进行远程设备的连接。
TCP 协议的全名为“传输控制协议(transfer control protocol)”,这是一种在Internet上使用的主要协议,例如http,ftp,smtp 等,都是属于这个中面向连接的协议。
因此,当您使用TCP 协议连接两个网络上的设备时,将可以在它们之间交换希望交换的数据。
同时,如果您开发的应用程序属于主从式应用架构(或是n-tear(多层次))应用系统时,将必须要知道应用系统主机的ip地址(利用RemoteHost属于取得)以及连接端口号(利用remoteport属于取得)。
在这些数据完全备齐之后,您才可以进行进一步的调用、连接。
因此,如果正在建立主机端应用程序时,必须指定本机,必须指定本机(执行应用程序所在的计算机)所用的连接端口号(localport属于),接着将Winsock控件设置为“监听(listen)”,即可等候远程客户端进行调用与连接。
WINSOCK控件在PB中的使用
下面以一个简单程序为例,说明WINSOCK控件在PB中的使用:一、在窗口中添加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协议在通讯前需要进行连接。
使用WINSOCK控件的方法
在POWERBUILDER中使用WINSOCK控件的方法随着资源共享和实时通讯的需要,很多计算机应用程序早已甩开单兵作战的模式,转入联合行动。
网络在计算机世界里,越来越发挥着举足轻重的作用。
在WINDOWS应用程序中,处理实时通讯最常用到的还是MICROSOFT公司提供的WINSOCK控件。
许多资料都细述了WINSOCK在VB中的使用方法,就连WINDOWS本身提供的hlp文件也是针对VB而写的。
笔者因为实际应用的需要,琢磨出了WINSOCK 控件在PB中的应用方法。
好东西不敢独自享用,拿出来与大家共享。
下面以一个简单程序为例,说明WINSOCK控件在PB中的使用:一、在窗口中添加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协议在通讯前需要进行连接。
在VB中如何使用 Winsock 控件
在VB中如何使用Winsock 控件摘要:本文介绍如何利用 WinSock 控件可以与远程计算机建立连接,并通过用户数据文报协议 (UDP)或者传输控制协议 (TCP)进行数据交换,并分别给出Winsock控件使用 UDP 协议和TCP协议进行远程计算机连接的应用实例关键词:VB、控件、协议1.引言1.1 Winsock 控件可能的用途创建收集用户信息的客户端应用程序,并将收集的信息发送到某中央服务器。
创建一个服务器应用程序,作为多个用户的数据的汇入点。
创建“聊天”应用程序。
1.2 选择通讯协议的标准在使用 WinSock 控件时,首先需要考虑使用什么协议。
可以使用的协议包括TCP 和 UDP。
两种协议之间的重要区别在于它们的连接状态:(1、) TCP 协议控件是基于连接的协议,可以将它同电话系统相比。
在开始数据传输之前,用户必须先建立连接。
(2、) UDP 协议是一种无连接协议,两台计算机之间的传输类似于传递邮件:消息从一台计算机发送到另一台计算机,但是两者之间没有明确的连接。
另外,单次传输的最大数据量取决于具体的网络。
到底选择哪一种协议通常是由需要创建的应用程序决定的。
下面的几个问题将有助于选择适宜的协议:在收发数据的时候,应用程序是否需要得到客户端或者服务器的确认信息?如果需要,使用 TCP 协议,在收发数据之前先建立明确的连接。
数据量是否特别大(例如图象与声音文件)?在连接建立之后,TCP 协议将维护连接并确保数据的完整性。
不过,这种连接需要更多的计算资源,因而是比较“昂贵”的。
数据发送是间歇的,还是在一个会话内?例如,如果应用程序在某个任务完成的时候需要通知某个计算机,UDP 协议是更适宜的。
UDP 协议适合发送少量的数据。
1.3 协议的设置在设计时,可以按如下方式设置应用程序使用的协议:在“属性”窗口中单击“协议”,然后选择 sckTCPProtocol 或者 sckUDPProtocol。
《WinSock的使用》word版
WinSock控件能够通过UDP协议(用户数据报协议)或TCP协议(数据传输协议)连接到远程的机器并进行数据交换。
这两种协议都能用来创建客户端和服务端应用程序。
就像定时器控件一样,WinSock控件运行时没有一个可视的界面。
可能的用途创建客户端应用程序,它能在信息到达中央服务器之前把用户的信息收集起来。
创建服务端应用程序,它能作为来自多个用户的数据一个集中处理点。
创建“聊天”程序。
协议的选择当我们使用WinSock控件时,首先要确定的是使用TCP还是UDP协议。
它们之间主要的区别在于连接状态:TCP协议控件是一个基于连接的协议,就像电话机一样,用户必须在通话之前建立连接;UDP是一个无连接的协议,两台计算机之间的事务处理就像传纸条一样:一台计算机向另一台计算机发送消息,但是它们之间并没有一个明确的连接路径。
另外,发送的单个信息量的大小取决于网络。
通常,你要创建的应用程序的类别就决定了你要选择的协议。
以下是几个能够帮助你选择合适的协议的问题:当发送或接收数据时,该应用程序需要从服务端或客户端获得认证吗?如果要的话,那么TCP协议就正好需要在发送或接受数据前建立明确的连接。
要发送的数据量大吗?(就像图片、声音文件之类)一旦建立了连接,TCP 协议就会保持连接并保证数据的完整性。
但是,这种连接会占用的更多的处理器资源,成本也会更高一些。
数据是陆续传输的,还是一次全部传完呢?比如,如果你要创建的应用程序在某些任务完成时会告知具体的计算机,那么选择UDP协议会更合适一些。
UDP 协议也更适合于发送小量数据。
协议的配置配置你的应用程序所用到的协议:在设计阶段,单击工具窗口里的协议,选择sckTCPProtocol或sckUDPProtocol。
你也可以在代码里配置协议,就像下面这样:Winsock1.Protocol=sckTCPProtocol确定你的计算机名要连接到远程的计算机,你必须知道它的IP地址或别名。
WinSock控件的使用
WinSock控件的使用二,WinSock控件的使用1.WinSock控件的主要属性a.Protocol属性通过P rotoc ol属性可以设置WinSock控件连接远程计算机使用的协议。
可选的协议是TCP和UDP对应的V B的常量分别是sckTCPProtocol和sckUDPProtoc ol,Wins oc k控件默认协议是TCP。
注意:虽然可以在运行时设置协议,但必须在连接未建立或断开连接后。
b.SocketHandle属性Soc ketHandle返回当前s ocket连接的句柄,这是只读属性。
c.RemoteHostIP属性RemoteH ostIP属性返回远程计算机的I P地址。
在客户端,当使用了控件的C onnect方法后,远程计算机的I P地址就赋给了RemoteH ostIP属性,而在服务器端,当C onnec tReques t事件后,远程计算机(客户端)的I P地址就赋给了这个属性。
如果使用的是U DP协议那么当DataArrival事件后,发送U DP报文的计算机的IP才赋给了这个属性。
d.ByteReceived属性返回当前接收缓冲区中的字节数e.State属性返回WinSoc k控件当前的状态常数值描述s ckC los ed 0缺省值,关闭。
Sc kOpen 1打开。
Sc kListening 2侦听s ckC onnec tionPending 3连接挂起s ckRes olvingH ost 4识别主机。
s ckHos tResolved 5已识别主机s ckC onnec ting 6正在连接。
s ckC onnec ted 7已连接。
s ckC los ing 8同级人员正在关闭连接。
s ckE rror 9错误2.WinSock主要方法a.Bind方法用Bind方法可以把一个端口号固定为本控件使用,使得别的应用程序不能再使用这个端口。
b.Listen方法Lis ten方法只在使用TCP协议时有用。
VB.NET中Winsock控件的使用详解(一)_
中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)。
vb中winsock简单实例
vb中winsock简单实例在VB中,我们可以使用Winsock控件来实现网络通讯。
下面是一个简单的Winsock实例:1. 在VB中,首先要确保启用了Microsoft Winsock Control,可以在VB的工具箱中找到它。
2. 将一个Winsock控件拖放到表单上。
3. 双击Winsock控件,在代码编辑器中会自动生成一个Winsock控件的事件过程。
4. 在Winsock控件的事件过程中编写代码以处理网络通讯。
下面是一个简单的例子,演示了如何使用Winsock控件进行基本的客户端和服务器通讯:```vbPrivate Sub Form_Load()' 设置服务器地址和端口号Winsock1.RemoteHost = "127.0.0.1"Winsock1.RemotePort = 1234End Sub' 连接服务器按钮点击事件Private Sub cmdConnect_Click()Winsock1.Connect ' 连接到服务器End Sub' 断开连接按钮点击事件Private Sub cmdDisconnect_Click()If Winsock1.State <> sckClosed Then Winsock1.Close ' 断开连接End IfEnd Sub' 连接完成事件Private Sub Winsock1_Connect()MsgBox "已连接到服务器!"End Sub' 断开连接事件Private Sub Winsock1_Close()MsgBox "与服务器断开连接!"End Sub' 发送消息按钮点击事件Private Sub cmdSendMessage_Click()If Winsock1.State = sckConnected Then ' 发送消息到服务器Winsock1.SendData txtMessage.Text ElseMsgBox "未连接到服务器!"End IfEnd Sub' 接收消息事件Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)Dim strData As StringWinsock1.GetData strData ' 从服务器接收数据MsgBox "接收到消息:" & strDataEnd Sub```在上面的例子中,载入表单时,代码设置了要连接的服务器地址和端口号。
winsock使用手册
winsock使用手册Winsock是Windows Socket的缩写,它是一种提供网络编程接口的技术,用于在Windows操作系统上进行网络通信。
本手册将介绍Winsock的基本概念、API函数和使用方法,帮助读者快速上手Winsock编程。
一、Winsock简介Winsock是Windows操作系统提供的一种网络编程接口,它允许开发人员创建基于TCP/IP协议的应用程序,并实现网络通信。
Winsock使用C语言提供了一组API函数,方便开发者进行网络编程。
二、Winsock的基本概念1. Socket在Winsock中,Socket是一个抽象概念,代表一个网络通信的端口。
开发者可以通过创建Socket建立与其他计算机的连接,并发送和接收数据。
2. 协议族Winsock支持多种协议族,常用的有AF_INET(用于互联网通信)和AF_INET6(用于IPv6通信)。
3. 协议类型协议类型定义了数据传输的特性,常见的协议类型有SOCK_STREAM(流式套接字,提供可靠的、面向连接的通信)和SOCK_DGRAM(数据报套接字,提供无连接的通信)。
4. IP地址与端口在Winsock中,IP地址用于标识网络上的计算机,端口用于标识一个应用程序,在计算机上可以同时运行多个应用程序,通过端口来区分不同的应用程序。
三、Winsock API函数1. WSAStartupWSAStartup函数用于初始化Winsock库,并指定所需的版本。
2. socketsocket函数用于创建一个套接字,返回一个套接字描述符。
3. bindbind函数用于将一个套接字与特定的IP地址和端口绑定。
4. listenlisten函数用于使一个套接字进入监听状态,等待客户端的连接。
5. acceptaccept函数用于接受客户端的连接请求,并创建一个新的套接字用于与客户端进行通信。
6. connectconnect函数用于与服务器建立连接。
VB Winsock控件(UDP协议)的使用
Private Sub Form_Load() Winsock1.Bind 1000, LocalIP End Sub
第二个工程的代码:
2
Private Sub Form_Load() Winsock1.Bind 1001, LocalIP End Sub Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long) Dim a As String Winsock1.GetData a, vbString Text1.Text = a End Sub
创建一个Command控件
创建一个Text控件
再新建一个工程,创建一个Winsock控件,LocalPort填本地端口,RemotePort填远程端口, Protocol选1 – sckUDPProtocol(本例本地端口为1001,远程端口为1000)
创建一个Text控件
注意:本地端口和远程端口不能重合
Winsock控件是VB6.0的一个新的功能,它可以进行两台机器之间的通讯,它分两种协议, 一种是TCP协议,即Transmission Control Protocol 传输控制协议,另一种则是UDP协议, 即User Datagram Protocol用户数据包协议 ,也就是我要讲的。 打开VB6.0,选择Microsoft Winsock Control 6.0,在左边的选择框中打勾。
控件工具箱中也就多了这个图标(放大的):
1
新建一个工程,创建一个Winsock控件,RemoteHost填要连接到的机器的主机名或IP, LocalPort填本地端口,RemotePort填远程端口,Protocol选1 – sckUDPProtocol(本例本 地端口为1000,远程端口为1001)
Winsock与VFP中的使用
用This.Object 来使用当前控件Winsock与VFP中的使用初识 ActiveX Winsock 控件方法说明Accept(requestID) 该方法用于接收一个特写的连接. 它作为一个参数传递来处理请求. Bind(LocalPort,LocalIP) 为 CDP 连接指定端口和本地 IP.Close() 关闭服务器和客户之间的活动的连接.GetData(Data,Type,maxLen) 用缓冲中的内容填充变量, 使其为空.Listen() 对象等等连接.PeekData(Data,Type,maxLen) 用缓冲中的内容填充变量, 但不清空缓冲.SendData(Data) 发送数据到远程计算机.事件说明Close 当远程计算机关闭当前连接时发生Connect(Error) 与服务器的连接成功后.ConnectionRequest(requestID) 当远程计算机发出一个请示时.DataArrival(BytesTotal) 在从远程计算机上接收到新数据时发生.Error(number, Description, Scode, Source, HelpFile, HelpContext, CancelDisplay) 当发生后台处理错误时.SendComplete 数据发送完毕时发生SendProgress(bytesSent, bytesRemaining) 在发送数据时.属性说明BytesReceived 返回到缓冲中的字节数LocaHostName 返回本地机器的名字LocalIP 本地计算机的 IP 地址LocalPort 数据传送的端口 (客户) 或代表一个连接 (服务器)Name 对象名Object 运行时自动创建, 仅在 VFP 中.Protocol 使用的协议 TCP (0) 或 UDP (1)属性说明RemoteHost 返回远程计算机的端口RemoteHostIP 返回远程计算机 IPRemotePort 返回远程计算机上的连接端口SocketHandle 返回控件当前连接的句柄State 返回控件的状态:0 = 已关闭1 = 打开2 = 等待连接3 = 正在连接4 = 决定主机5 = 主机已决定6 = 正在连接7 = 已连接8 = 连接被远程计算机关闭9 = 错误在 VFP 中使用它在 VFP 中使用 ActiveX Winsock 时你必须牢牢记住:在运行任何 ActiveX 方法前, 必须添加 .F. 到应用程序的 AutoYeld 属性(application.autoyield = .f.);所有与 Windsock 相关的方法, 事件或属性必须加上 object 前缀(thisform.wsock1.OBJECT.connect)VFP 不能处理字符串中的 CHR(0) 字符. 因此, 如果你要处理带有这些内容的数据就需要一字节一字节地读缓冲中接收到的数据. 例如, 就象连接到 Unix 服务器一样.让我们看看示例 1 来开始测试我们的过程:它由两个表单组成: 1 个客户表单和一个服务器表单. 它的功能是从客户传送一个文本信息到服务器. 另外服务器以小写方式返回相同的信息.请注意在两个表单的 INIT 方法中的命令 Application.AutoYield = .f.. 这意味着我们告诉 VFP 不处理方法中的每一个代码行, 让 ActiveX 自己控制它的事件.在表单的 CLOSE 方法中我们包括了 Application.AutoYield = .t. 来允许 VFP 按一般方法控制事件.在 SERVER 表单的 INIT 方法中有两个重要的命令:thisform.sock1.object.LocalPort = 3001使用以上命令, ActiveX Winsock 在端口 3001上接收连接.thisform.sock1.object.Listen()该命令告诉 Winsock to 等待连接. 从此时开始, 上面的命令中定义的端口将打开并等待一个连接.当检测到连接时, 将触发 ConnectionRequest 事件, 发送这个新连接的句柄作为一个参数. 查看示例中的该方法的详细情况:This.object.close()确信没有其它未决的连接并停止等待.This.object.Accept(requestid)运行 Accept 方法, 发送连接句柄作为参数. 仅现在连接是设置了的.现在, 让我们到 CLIENTE 表单, 在发送按钮的 CLICK 方法上:lc_local_IP = thisform.sock1.object.LocalIP我们用服务器的 IP 地址定义一个变量. 在此情况下, 我们从 Winsock 的LocalIP 属性来获得当前计算机的地址.lc_local_Port = 3001我们定义了一个将连接到服务器端口的变量. 请确保该端口对于客户和服务器是相同的.thisform.sock1.object.close()确信没有未决的连接, 并不再等待另一个连接.thisform.sock1.object.Connect(lc_local_IP,lc_local_Port)用 IP 地址和端口为参数运行方法来连接服务器..在这一点上, 我们可以看到一个循环. 它的主要功能是检查 Winsock 的状态和等待连接的确认.定义一个期限是重要的, 否则此处的循环将有可能使系统崩溃.另一个重要的东西是注意循环中的 inkey(0.1), 用于避免不必要的使用 CPU 资源.在连接成功后并确认后, 我们可以看到以下命令:thisform.sock1.object.SendData(trim(thisform.texto.value))运行该方法来传送数据. 在我们的特写场合, 是发送文本框 TEXTO 中的内容. 在下一阶断, 我们再次看到一个与前面非常相似的循环. 它检查 ENVIADO_OK 变量的内容. 当数据完成后, Winsock 的 SendComplete 事件将自动运行, 且它将包含一个 .T. 到变量中.现在我们可以看到另一个等待服务器 (SERVIDOR) 回应的循环.现在让我们回到 SERVIDOR 表单, 在Winsock’ 的 DataArrival 事件中. 该事件在每次从远程计算机上接收到数据时执行. 缓冲的字节数作为参数给出.LPARAMETERS bytestotallc_buffer = space(bytestotal)现在我们用 Winsock 的缓冲大小定义一个变量作为缓存.this.object.GetData(@lc_buffer)我们运行 GetData 方法, 给它一个要接收缓冲中的数据的变量名引用 (@). 该方法也会清除 Winsock 的缓冲.thisform.retorno.value = lc_buffer在这一点上, 我们展示已被 GetData 方法填充了的变量的内容.this.object.SendData(lower(lc_buffer))作为一个对客户 (CLIENTE) 的回应我们以小写方式发送缓冲中的内容.回到 CLIENTE 表单, 在 Winsock 的 DataArrival 方法中, 我们可以看到它获得了 Winsock 的缓冲中的内容并将它放入到文本框 RETORNO 中, 处理结束.thisform.sock1.object.close() 关闭连接this.object.Close() 关闭当前连接已经.this.object.Listen() 等待下一个连接.。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Winsock控件使用手册TCP基本知识TCP(Transfer Control Protocol)允许你创建并维护一个与远程计算机的连接,使用该连接,两台计算机之间就可以交换数据了。
如果你在创建一个客户应用程序,你必须知道服务器计算机的名字用RemoteHost属性,监听的端口号RemotePort属性,调用Connect方法。
创建服务器应用程序,设置要监听的端口号,调用Listen方法。
当客户建立连接请求时,产生ConnectionRequest事件。
要完成该连接,在ConnectionRequest 事件中调用Accept方法。
一旦建立了连接,两台计算机之间就可以发送和接受数据了。
发送数据,调用SendData方法。
接受数据,产生DataArrival事件。
在DataArrival事件中调用GetData方法来检取数据。
UDP基本知识UDP(User Datagram Protocol)是无连接的协议。
与TCP操作不同,计算机并不建立一个连接。
并且,UDP应用程序可以是客户也可以是服务器。
传输数据,设置客户计算机的LocalPort属性,指发送方只需要将RemoteHost属性设置为客户计算机及指接收方的IP地址,将RemotePort属性设置为客户计算机上的LocalPort,调用SendData发送数据。
客户计算机在DataArrival中使用GetData检取数据。
Winsock控件的属性BytesReceived属性,LocalHostName属性,LocalIP属性,LocalPort属性,RemoteHost属性(ActiveX控件),SocketHandle属性,State属性(Winsock控件),Protocol属性(Winsock控件),Name属性,Parent属性,RemoteHost属性(ActiveX控件),RemotePort属性(ActiveX控件),Index属性(ActiveX控件),Tag属性(ActiveX控件),Object属性(ActiveX控件)。
Winsock控件的方法Accept方法,Bind方法,Close方法(Winsock控件),Listen方法,PeerData方法,SendData方法,GetData方法(WinSock控件),GetData方法(ActiveX控件)。
Winsock控件的事件Close事件,ConnectionRequest事件,DataArrival事件,SendComplete事件,SendProgress事件T注:该事件表示开始发送了,发送中,好像一般用不到,所以没有说明Error事件,Connect事件(Winsock控件),Connect事件。
以下的内容以字母为序排列Accept方法:只对于TCP服务器应用程序适用。
该方法用于在处理ConnectionRequest事件时接受连入请求。
语法object.Accept requestedobject是Winsock控件的对象表达式。
数据类型Long 返回值Void说明:在ConnectionRequest事件中使用Accept方法。
ConnectionRequest事件相应的参数RequestID也应传递给Accept方法。
下面是一个例子:Private Sub Winsock1_ConnectionRequest _(ByVal requestID As Long)' Close the connection if it is currently open' by testing the State property.If Winsock1.State <> sckClosed ThenWinsock1.Close' Pass the value of the requestID parameter to the' Accept method.Winsock1.Accept requestedEnd Sub下面示例的例子列出了使用TCP连接Winsock控件必须的代码,使用RequestID标识请求,该参数传递给接受请求的Accept方法。
Private Sub WinsockTCP_ConnectionRequest _(requestID As Long)If Winsock1.State <> sckClosed ThenWinsock1.CloseWinsock.Accept requestedendifEnd SubBind方法指定TCP连接中使用的LocalPort和LocalIP。
语法object.Bind LocalPort, LocalIPBind方法的语法有如下几个部分:部分描述object 一个Winsock控件的对象表达式localPort 建立连接所使用的端口号localIP 建立连接所使用的本地IP地址说明在调用Listen方法之前你必须调用Bind方法T注:未必:)在UDP通讯的服务器端,倒是要先调用BIND方法!BytesReceived属性返回接受数据的数量(当前接受缓冲区中的数据)。
使用GetData方法检取数据。
语法object.BytesReceived返回值LongClose事件当远程计算机关闭连接,只有TCP是"连接"的,UDP是无"连接"的,应用程序应使用Close方法正确地关闭一个TCP连接。
语法object_Close()Close方法关闭客户或服务器应用程序的TCP连接或监听插槽。
语法object.CloseConnect 事件当一个Connect 操作完成时发生。
语法object.Connect()使用Connect 事件确认已经成功建立了Connect方法返回与远程计算机的连接语法object.Connect remoteHost, remotePortConnect方法的语法有如下几个部分:部分描述object 一个Winsock控件的对象表达式remoteHos 要连接的远程计算机的名字remotePort 要连接的远程计算机的端口号返回值没有当试图建立一个TCP连接时,你必须调用Connect方法。
ConnectionRequest事件当远程计算机请求一个连接时产生该事件。
只对于TCP服务器应用程序适用。
当有一个连入请求时就触发该事件。
该事件触发之后,RemoteHostIP和RemotePort属性中保存了客户机的信息。
应用于Winsock控件。
语法object_ConnectionRequest ( requestID As Long)ConnectionRequest事件的语法有如下几个部分:部分描述object 一个Winsock控件的对象表达式requested 连入请求标识符。
该参数应传递给第二个控件实例的Accept方法,说明服务器可以确定是否接受一个连入请求。
适用Accept方法(在新的控件实例中)接受连入请求。
DataArrival事件当新数据到达时产生该事件。
语法object_DataArrival (bytesTotal As Long)DataArrival事件的语法有如下几个部分:部分描述object 一个Winsock控件的对象表达式bytesTotal 长整数:可以检取数据的总数如果你不在一次GetData调用中检取所有的数据则不产生该事件。
只有当新数据到来时才触发该事件。
可以使用BytesReceived属性检查可检取数据的数量。
下面示例的例子在Winsock控件的DataArrival事件中使用了GetData方法。
当产生该事件时,代码调用GetData方法检取数据并将其保存在一个字符串中。
然后将数据写入一个TextBox 控件。
Private Sub Winsock1_DataArrival _(ByVal bytesTotal As Long)Dim strData As StringWinsock1.GetData strData, vbStringText1.Text = Text1.Text & strDataEnd SubError事件后台进程发生错误时产生该事件(如连接失败,后台发送或检取数据失败等)。
语法object_Error(number As Integer, Description As String, Scode As Long,Source As String, HelpFile as String, HelpContext As Long, CancelDisplay AsBoolean).Error事件的语法有如下几个部分:部分描述object 一个Winsock控件的对象表达式number 一个整数,指定错误码请参阅"设置"中的常量description 包含错误消息的字符串scode长SCODEsource 描述错误源的字符串HelpFile 包含帮助文件名的字符串HelpContextHelp 文件环境CancelDisplay 指明是否取消该显示动作缺省是False,显示缺省的错误消息。
如果你不想使用缺省的错误消息,可以将其设置为True设置number值的设置如下:常量值描述SckOutOfMemory 7 内存不足SckInvalidPropertyValue 380 属性值无效SckGetNotSupported 394 不能读取属性值SckSetNotSupported 383 属性是只读的SckBadState 40006 连接事务或请求的协议或连接状态不正确SckInvalidArg 40014 传递给函数的参数格式不正确或范围不对SckSuccess 40017 成功SckUnsupported 40018 不支持的变量类型SckInvalidOp 40020 对于当前的状态,该操作不正确SckOutOfRange 40021 参数超出了范围SckWrongProtocol 40026 连接事务或请求的协议不正确SckOpCanceled 1004 操作被取消SckInvalidArgument 10014 请求的地址是广播地址,但没有设置标记SckWouldBlock 10035 插槽是非阻塞的,指定的操作将被阻塞SckInProgress 10036 过程中有阻塞的Winsock操作SckAlreadyComplete 10037 操作完成。
过程中没有阻塞的Winsock操作SckNonRecoverableError 11003 不可恢复性错误SckNoData1 1004 名字有效,所请求的类型没有数据记录GetData方法检取当前的数据块,将其保存在一个Variant类型的变量中返回值Void语法object.GetData data [,type] [,maxLen]GetData方法的语法有如下几个部分:部分描述object 一个Winsock控件的对象表达式data 保存取回来的数据的地方/变量。