Winsock控件使用手册

合集下载

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控件实现局域网通信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控件的使用与介绍

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控件的使用与介绍

VBWinsock控件的使用与介绍
End Sub
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控件发文件

怎样用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]

在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控件

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)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)”,即可等候远程客户端进行调用与连接。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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 保存取回来的数据的地方/变量。

相关文档
最新文档