文档库 最新最全的文档下载
当前位置:文档库 › Winsock控件使用手册

Winsock控件使用手册

Winsock控件使用手册
Winsock控件使用手册

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 requested

object是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 Then

Winsock1.Close

' Pass the value of the requestID parameter to the' Accept method.

Winsock1.Accept requested

End Sub

下面示例的例子列出了使用TCP连接Winsock控件必须的代码,使用RequestID标识请求,该参数传递给接受请求的Accept方法。

Private Sub WinsockTCP_ConnectionRequest _(requestID As Long)

If Winsock1.State <> sckClosed Then

Winsock1.Close

Winsock.Accept requested

endif

End Sub

Bind方法

指定TCP连接中使用的LocalPort和LocalIP。

语法

object.Bind LocalPort, LocalIP

Bind方法的语法有如下几个部分:

部分描述

object 一个Winsock控件的对象表达式

localPort 建立连接所使用的端口号

localIP 建立连接所使用的本地IP地址

说明

在调用Listen方法之前你必须调用Bind方法T注:未必:)在UDP通讯的服务器端,倒是要先调用BIND方法!

BytesReceived属性

返回接受数据的数量(当前接受缓冲区中的数据)。使用GetData方法检取数据。

语法object.BytesReceived

返回值Long

Close事件

当远程计算机关闭连接,只有TCP是"连接"的,UDP是无"连接"的,应用程序应使用Close方法正确地关闭一个TCP连接。

语法object_Close()

Close方法

关闭客户或服务器应用程序的TCP连接或监听插槽。

语法object.Close

Connect 事件当一个Connect 操作完成时发生。

语法object.Connect()

使用Connect 事件确认已经成功建立了

Connect方法

返回与远程计算机的连接

语法object.Connect remoteHost, remotePort

Connect方法的语法有如下几个部分:

部分描述

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 String

Winsock1.GetData strData, vbString

Text1.Text = Text1.Text & strData

End Sub

Error事件

后台进程发生错误时产生该事件(如连接失败,后台发送或检取数据失败等)。

语法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 保存取回来的数据的地方/变量。

如果没有足够的空间保存数据,则data设置为Empty

type,可选参数。要检取的数据类型,如"设置"中所示

maxLen,可选参数。在检取字节矩阵或字符串时指定检取长度。如果没有指定该参数,则检取字节矩阵或字符串中的所有数据。

设置

type值的设置如下:

描述常量

Byte vbByte

Integer vbInteger

Long vbLong

Single vbSingle

Double vbDouble

Currency vbCurrency

Date vbDate

Boolean vbBoolean

SCODE vbError

String vbString

Byte矩阵vbArray + vbByte

说明

通常在DataArrival事件中使用GetData方法,其包含了一个totalBytes参数。如果你指定的maxLen比totalBytes参数小,则将得到一个10040警告,表明其余数据将丢失T注:非万不得已,不要用该参数,应该一次性地将数据全部取回,再慢慢处理

Listen方法:创建一个插槽,并设置为监听模式。该方法只适用于TCP连接。

语法object.Listen

object是一个Winsock控件的对象表达式。

参数没有

返回值Void

说明

当有连入请求时产生ConnectionRequest事件。

在处理ConnectionRequest事件时,应用程序应使用Accept(在新的控件实例)方法接受连接。

LocalHostName属性返回本地计算机的名字。只读,在设计时不可用。

语法object.LocalHost Name

返回值String

LocalIP属性返回本地计算机的IP地址。只读属性,在设计时不可用。

语法object.LocalIP

数据类型String

LocalPort属性返回或设置本地使用的端口。可读写,在设计时可用。

指定发送数据的端口。如果应用程序不需要特定的端口,指定为0。在这种情况下,控件将随机选择一个端口。连接建立后,

该本地端口就用于TCP连接。对于服务器,这是监听的本地端口。如果指定为0,则随机选用一个端口。在调用了Listen方法之后,

属性包含了实际选中的端口。

语法object.LocalPort=long

数据类型Long T注:讲座中好像搞错了,实际上长短均可:)

通常使用端口0在两台计算机之间动态建立连接。例如,希望服务器回调的客户可以使用端口0随机选中一个端口号,该端口号将传递给远程的服务器。

PeekData方法

与GetData方法类似,只是其不从输入队列中删除数据。

语法object.PeekData data [,type] [,maxLen]

PeekData方法的语法有如下几个部分:

部分描述

object 一个Winsock控件的对象表达式

data 保存取回的数据的地方/变量

如果没有足够的空间保存数据,则data设置为Empty。

type可选参数。要检取的数据类型,如"设置"中所示。缺省是vbArray+ vbByte

maxLen可选参数。在检取字节矩阵或字符串时指定检取长度。如果没有指定该参数,则检取字节矩阵或字符串中的所有数据。

如果数据类型不是字节矩阵或字符串,则忽略该参数

设置

type值的设置如下:

描述常量

Byte vbByte

Integer vbInteger

Long vbLong

Single vbSingle

Double vbDouble

Currency vbCurrency

Date vbDate

Boolean vbBoolean

SCODE vbError

String vbString

Byte矩阵vbArray + vbByte

返回值Void

说明

如果类型指定为vbString,则数据返回给用户之前转换为UUICODE。

请参阅GetData方法(Winsock控件)。

Protocol属性

返回或设置Winsock控件使用的协议,TCP或UDP。

语法object.Protocol [=protocol]

object是Winsock控件的对象表达式。

设置protocol值的设置如下:

常量值描述

sckTCPProtocol 0 缺省。使用TCP协议

sckUDPProtocol 1 使用UDP协议

返回值Void

在重新设置该属性之前必须关闭控件(使用Close方法)。

RemoteHostIP属性

返回远程计算机的IP地址。对于客户应用程序,使用Connect方法建立连接之后,该属性包含了远程计算机IP字符串。对于服务器应用程序,进来一个连接请求时,该属性包含了初始化请求的远程计算机的IP字符串。在使用UDP协议时,在DataArrival事件产生后,该属性包含了发送UDP数据的远程计算机的IP地址。

语法object.RemoteHostIP

object是Winsock控件的对象表达式。

数据类型String

SendComplete事件

当发送操作完成时产生该事件。

语法object_SendComplete

object是一个Winsock控件的对象表达式。

参数没有

SendData方法

给远程计算机发送数据。

返回值Void

应用于Winsock控件。

语法object.SendData data

SendData方法的语法有如下几个部分:

部分描述

object 一个Winsock控件的对象表达式

data 要发送的数据T注:只能发送字符串/字节组,对

于二进制数据,应使用字节矩阵

说明

当传递UNICODE字符串时,在发送之前转换为ANSI字符串。

SendProgress事件

在发送数据时产生该事件。

语法object_SendProgress (bytesSent As Long, bytesRemaining As Long)

SendProgress事件的语法有如下几个部分:

部分描述

object 一个Winsock控件的对象表达式

bytesSent 从上次触发该事件到现在已发送数据的字节数

bytesRemaining 在发送缓冲区中等待发送数据的字节数

请参阅DataArrival事件,SendComplete事件。

SocketHandle属性

返回一个值,该值与Winsock控件用来与Winsock层通信所用的插槽句柄相对应。该属性是

只读的,在设计时不可用。

语法object.SocketHandle

object是一个Winsock控件的对象表达式。

数据类型Long

说明

该参数将传递给Winsock API。

State属性

返回控件的状态,以枚举类型表示。该属性是只读的,在设计时不可用。

语法object.State

object是一个Winsock控件的对象表达式。

数据类型Integer

设置

State属性的设置如下:

常量值描述

SckClosed 0 缺省。关闭

SckOpen 1 打开

SckListening 2 监听

SckConnectionPending 3 连接未决

SckResolvingHost 4 解析主机

SckHostResolved 5 主机被解析

SckConnecting 6 连接

SckConnected 7 已连接

SckClosing 8 对方在关闭连接

SckError 9 错误

不要过于信任STATE属性,在可以用事件来判断的时候,应该以所触发的事件为准来判断当前的状态。

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)”,即可等候远程客户端进行调用与连接。因此,当主机端接收到客户端调用并且要求连接的信息时,将会触发“要求连接()”的事件,接着进行标准“允许”或是“拒绝”的程序。 一旦主机端与客户端连接完成之后,您将可以开始使用“传送数据(senddata)”方法,将数据传送给对方,并且利用“传送完成(sendcomplete)”事件,来检测数据是否传送完毕。同时,在数据传达对方的计算机时,将会触发对方计算的“接收数据(dataarrival)”事件。此时,您可以使用“取得数据(getdata)”方法,来去出这些接收到的数据。 上述的程序将周而复始地发生,直到发生“中断连接(closed)”事件或是不正常断线为止。这种连接与数据传输的方式,则是属于Winsock控件TCP协议的运行特色。图1-1所示为

Winsock控件使用手册

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方法,

基于VB6.0的winsock控件的远程数据传输的方法

【摘要】在Visual Basic 6.0 环境下,利用Winsock控件实现与远程数据采集端连接和数据传输。与传统数据传输方法进行比较,该方法简单且易于实现,并充分利用了网络资源。介绍了Winsock控件,结合示例程序,说明了该方法实现流程。最后通过实验,证实该方法进行远程数据传输的可靠性。 【关键词】数据传输;协议;VB6.0;Winsock控件 在远程数据采集和传输系统中,传统的方法有 2 种:一是采用RS-485进行远程控制;二是通过调制解调器进入电话线来实现远程控制,然而这2 种方法都有自己的缺点。这样一来就限制了它们的应用范围。 本文介绍了在VB6.0中利用Winsock控件来实现服务器端与远程客户端建立连接并进行数据传输的方法。 一、基于Winsock控件的远程数据传输 (一) Winsock控件简介 Microsoft提供的Winsock控件,是ActiveX控件的一种。在VB 中可以将其添加到工具箱中以便使用。在程序运行时,Winsock控件是不可见的,但通过对其属性、方法、事件的设置及应用可轻松地实现计算机间的远程连接,该控件为用户提供了访问TCP和UDP网络及其方便的途径,不需要了解低级Winsock API调用实现的细节。VB 的Winsock控件内部几乎封装了所有的Internet协议,以类的形式提

供了属性、方法、事件,使得程序得到了极大的简化。 Winsock控件的常用属性如表1。 (二)传输协议 在使用Winsock控件时,首先要考虑使用什么通信协议。可供选择的协议有传输控制协议(TCP)和用户数据报协议(UDP),都是位于传输层的协议、使用端口号来识别应用程序,区别在于连接的状态。TCP协议是一个基于连接的协议,在收发数据前必须建立连接,并且该连接可靠性强,使数据无差错地传输,适合有确认信息的、重要的、数据量大(如声音和图像)的文件。UDP协议是不与对方建立连接而是直接就把数据报发送过去。传输速度较快也较便宜,适用于少量数据传送、可靠性要求不高的文件传输。本文中均选用TCP协议。 (三)远程数据传输系统软件设计 1、远程传输系统软件流程 软件在Visual Basic环境下开发,利用Winsock控件完成客户端与服务器端的相互通讯。 创建客户端程序时,必须知道服务器端的IP地址(RemoteHost 属性)和服务器“侦听”的端口(RemotePort 属性)然后调用Connect 方法请求与服务器连接。 创建服务器端程序时,必须设置一个收听端口(LocalPort属性)并调用Listen方法侦听端口,本论文中使用的IP地址为202.205.84.222,使用的端口号为2020。当客户端请求连接时就会发生ConnectionRequest事件。为了完成连接,可调用ConnectionRequest

VB中Winsock控件的使用

VB中Winsock控件的使用 -------------------------------------------------------------------------------- 前一段时间,一个名叫Y AI的‘病毒’在我国闹的沸沸扬扬,许多不明真相的人对他感到神秘莫测,可是究其实质无非也就是一个远程控制软件罢了,只不过他的服务器端程序隐藏的十分好而已。其实在VB5中有一个基于TCP\IP协议的Winsock控件,利用他改改属性,写几段代码,我们同样可以来一回Y AI.由于篇幅所限,在这里我们只来看看对远程计算机的重启,关闭功能室如何实现的。打开VB5后,在工具箱中并不能看到Winsock控件,通过鼠标右键单击工具箱点“部件”,再将“Microsoft Winsock Control 5.0”选中确定后,就可以将Winsock控件添加到工具箱中了。 远程控制功能是基于客户机/服务器这一模型来实现的,所以程序的编制也应分两部分进行:一部分是服务器端--也就是被控制的一方,另一部分是客户端--控制方。服务器程序要守侯在一个固定或不固定的网址(IP)上等待客户程序的请求;客户程序则向服务器程序所在的网址请求连接,连接成功后通过交换信息即可得到相应的服务。因此设置Winsock属性时,服务器端应设置LocalPort和应用Listen方法进行监听,客户程序则要设置RemoteHost 和RemotePort及应用Connect方法请求连接,并用Senddata方法互换信息。下面是Winsock 控件的相关属性,方法和事件。(略去一些暂用不到的) *属性 ------------------------------------------------------------------------- LocalHostName | 本地机器名 LocalIP | 本地机器IP地址 LocalPort | 本地机器通信程序的端口(0<端口<65536) RemoteHost | 远程机器名 RemotePort | 远程机器的通信程序端口 state | 连接的当前状态(文后有详细说明) Protocal | 使用TCP或UDP协议(这里我们选‘0-sckTCPProtocal’) -------------------------------------------------------------------------- *方法 -------------------------------------------------------------------------- Listen Listen方法用于服务器程序,等待客户访问。 格式:Winsock对象.listen Connect Connect方法用于向远程主机发出连接请求 格式:Winsock对象.connect [远程主机IP,远程端口] Accept Accept方法用于接受一个连接请求 格式:Winsock对象.accept Request ID Senddata 此方法用于发送数据

VB中使用WINSOCK控件编写网络程序

VB中使用WinSock控件编写网络程序 WinSock控件能够通过UDP协议(用户数据报协议)或TCP协议(数据传输协议)连接到远程的机器并进行数据交换。这两种协议都能用来创建客户端和服务端应用程序。就像定时器控件一样,WinSock控件运行时没有一个可视的界面。 可能的用途 创建客户端应用程序,它能在信息到达中央服务器之前把用户的信息收集起来。 创建服务端应用程序,它能作为来自多个用户的数据一个集中处理点。 创建“聊天”程序。 协议的选择 当我们使用WinSock控件时,首先要确定的是使用TCP还是UDP协议。它们之间主要的区别在于连接状态: TCP协议控件是一个基于连接的协议,就像电话机一样,用户必须在通话之前建立连接; UDP是一个无连接的协议,两台计算机之间的事务处理就像传纸条一样:一台计算机向另一台计算机发送消息,但是它们之间并没有一个明确的连接路径。另外,发送的单个信息量的大小取决于网络。 通常,你要创建的应用程序的类别就决定了你要选择的协议。以下是几个能够帮助你选择合适的协议的问题: 当发送或接收数据时,该应用程序需要从服务端或客户端获得认证吗?如果要的话,那么TCP协议就正好需要在发送或接受数据前建立明确的连接。 要发送的数据量大吗?(就像图片、声音文件之类)一旦建立了连接,TCP协议就会保持连接并保证数据的完整性。但是,这种连接会占用的更多的处理器资源,成本也会更高一些。 数据是陆续传输的,还是一次全部传完呢?比如,如果你要创建的应用程序在某些任务完成时会告知具体的计算机,那么选择UDP协议会更合适一些。UDP协议也更适合于发送小量数据。 协议的配置 配置你的应用程序所用到的协议:在设计阶段,单击工具窗口里的协议,选择sckTCPProtocol或sckUDPProtocol。你也可以在代码里配置协议,就像下面这样: Winsock1.Protocol=sckTCPProtocol 确定你的计算机名

在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

使用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协议在通讯前需要进行连接。 在甲方(作为服务器端)窗口的Open事件中加入如下语句:

VC++ 6.0下使用Winsock控件的局域网通讯程序

VC++ 6.0下使用Winsock控件的局域网通讯程序 摘要介绍在VISCAL C++ 6.0 环境下,使用Winsock控件进行网络通讯的一种方法。Winsock控件的使用简单,可以方便地应用在使用VC++进行编程 的网络通讯程序中。 关键词Winsock控件局域网 VC6.0 中图分类号:文献标识码:文章编号: 引言 随着计算机技术的发展和网络的不断普及,网络通讯程序的应用越来越普遍,各种软件开发平台也为网络通讯程序的开发提供了不同形式的类和控件。在利用Visual C++ 进行开发时,可以使用Csocket类;在利用Visucal Basic 进行开发时,可以使用Winsock 控件。有关Csocket类在VC中的使用和Winsock 控件在VB中使用,已经有许多文章、资料进行的介绍,这里不再赘述。同时也应注意到,利用VC的CSocket类需要对网络通讯的机制和参数有较深的了解,需要较深的计算机知识。虽然CSocket对Winsock进行了封装,但是它的函数调用仍然比较复杂,使用起来不容易。与此相反,在利用VB编程时,各种控件的使用比较简单,不需要许多的参数。利用VB中的Winsock 控件进行开发比较容易,但VB本身的功能不如VC强大,在进行开发时有时会受到一定程度的限制。在VC中利用Winsock控件的使用难度则介于上述二者之间,只需对少许一些参数做简单设置即可。如果在用VC编制程序时需要进行网络通讯而又不想花费过多的时间,在VC程序中插入Winsock控件是一种合适的方法。利用Winsock控件 可以编制一个简单的通讯程序,用于局域网之间的微机通讯。 一、Winsock控件的使用方法 1.1通讯协议的选择 Winsock控件提供了访问 TCP 和 UDP 网络服务的方便途径。采用TCP协议可以提供双向的、可靠的、有序的和无重复投递的数据流。TCP允许创建和维护与远程计算机的连接,连接两台计算机就可彼此进行数据传输。用户数据文报协议 (UDP) 是一个无连接协议。采用UDP协议,支持双向的数据流,但不保证有序、可靠或无重复的投递。但计算机并不建立连接。 在使用中,采用TCP协议的编程模型应用最为广泛,因为面向连接协议提供了一系列的数据纠错功能,可以保证在网络上传输的数据及时、无误地到达对方,Internet上的多数服务(WWW、FTP、Telnet、SMTP)就是靠此协议运转的。采用UDP协议由于不用建立连接,传输比连接协议快,无数据纠错功能,不保证数据的可靠传递。在这里本文只介绍使用TCP/IP协议进行编程的方法。 1.2使用方法和主要函数

VB Winsock控件的使用与介绍

VB Winsock控件的使用与介绍 第一节:Winsock控件的介绍 Winsock控件的作用简单说就是可以用于两台或多台机器间通信,这里不多说这个控件的作用了,因为在以后的介绍中我们会了解到这个控件的强大功能的,如可以用来做聊天软件等…… 废话不多说,来看看他有些什么重要的属性、方法和事件吧!在VB6.0中的工具箱里默认情况下是没有这个控件的,添加方法如下:在工具箱上右击,选择[部件],然后在部件对话框中选择"Microsoft Winsock Control 6.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):连接发生错误

VB Winsock控件创建多个连接

VB Winsock控件创建多个连接。 VB学习2010-12-11 16:28:12 阅读105 评论0 字号:大中小订阅 用VB写的一个简单的服务端程序, 服务器端程序: Private Sub Form_Load() tcpserver.LocalPort = 1001 '将LocalPort 属性设置为一个整数。 tcpserver.Listen '然后调用Listen 方法。 End Sub Private Sub tcpServer_ConnectionRequest(ByVal requestID As Long) If tcpserver.State <> sckClosed Then tcpserver.Close '检查控件的State 属性是否为关闭的。'如果不是,'在接受新的连接之前先关闭此连接。 tcpserver.Accept requestID '接受具有requestID 参数的'连接。 msgbox("有人连接服务端") End Sub 客服端程序 Private Sub Form_Load() tcpClient.RemoteHost = "192.168.1.2" tcpClient.RemotePort = 1001 End Sub Private Sub cmdConnect_Click() '连接按钮 tcpClient.Connect MsgBox ("连接服务器成功") End Sub 运行后,启动服务端,然后启动客户端,点“连接”按钮,客服端端跳出窗口“连接服务器成功”,服务端跳出窗口“有人连接服务端”。表示双方建立了连接。这个时候关闭客户端,然后再启动,点“连接”按钮,就只是跳出连接服务器成功(程序设置不完美)。然后在输入框中输入向服务端发送数据,出现“错误“40006” 所需事物请求的错误协议连接或连接状态”。这个时候发现第二次连接就不行,看来服务端只是支持单个连接,第二次连接相当于,第二个连接,就找不到服务器,这个错误跟没有启动服务端程序的错误是一样, 说明客户端找不到服务端。 解决办法:创建控件数组 上面设计的基本服务器只能接受一个连接请求。通过创建控件数组,使用一个控件也可以同时接受多个连接请求。利用这种方法,不需要关闭连接,而只需创建新的控件实例(通过设置其索引属性),然后在新 的实例上调用Accept 方法。 下面的代码假定名为sckServer 的窗体上有一个Winsock 控件,它的Index 属性被设置为0;因此控件是控件数组的一部分。在声明部分,声明了一个模块级的变量intMax。在窗体的Load 事件中,intMax 被设置为0,数组中第一个控件的LocalPort 属性被设置为1001。然后调用控件的Listen 方法,使之

WinSock的使用

WinSock控件能够通过UDP协议(用户数据报协议)或TCP协议(数据传输协议)连接到远程的机器并进行数据交换。这两种协议都能用来创建客户端和服务端应用程序。就像定时器控件一样,WinSock控件运行时没有一个可视的界面。 可能的用途 创建客户端应用程序,它能在信息到达中央服务器之前把用户的信息收集起来。 创建服务端应用程序,它能作为来自多个用户的数据一个集中处理点。 创建“聊天”程序。 协议的选择 当我们使用WinSock控件时,首先要确定的是使用TCP还是UDP协议。它们之间主要的区别在于连接状态: TCP协议控件是一个基于连接的协议,就像电话机一样,用户必须在通话之前建立连接; UDP是一个无连接的协议,两台计算机之间的事务处理就像传纸条一样:一台计算机向另一台计算机发送消息,但是它们之间并没有一个明确的连接路径。另外,发送的单个信息量的大小取决于网络。 通常,你要创建的应用程序的类别就决定了你要选择的协议。以下是几个能够帮助你选择合适的协议的问题: 当发送或接收数据时,该应用程序需要从服务端或客户端获得认证吗?如果要的话,那么TCP协议就正好需要在发送或接受数据前建立明确的连接。 要发送的数据量大吗?(就像图片、声音文件之类)一旦建立了连接,TCP 协议就会保持连接并保证数据的完整性。但是,这种连接会占用的更多的处理器资源,成本也会更高一些。 数据是陆续传输的,还是一次全部传完呢?比如,如果你要创建的应用程序在某些任务完成时会告知具体的计算机,那么选择UDP协议会更合适一些。UDP 协议也更适合于发送小量数据。 协议的配置 配置你的应用程序所用到的协议:在设计阶段,单击工具窗口里的协议,选择sckTCPProtocol或sckUDPProtocol。你也可以在代码里配置协议,就像下面这样: Winsock1.Protocol=sckTCPProtocol

VBWinsock控件TCP及UDP连接实例

利用WinSock 控件可以与远程计算机建立连接,并通过用户数据文报协议(UDP)或者传输控制协议(TCP)进行数据交换。这两种协议都可以用来创建客户与服务器应用程序。与Timer 控件类似,WinSock 控件在运行时是不可见的。 可能的用途 ?创建收集用户信息的客户端应用程序,并将收集的信息发送到某中央服务器。 ?创建一个服务器应用程序,作为多个用户的数据的汇入点。 ?创建“聊天”应用程序。 选择通讯协议 在使用 WinSock 控件时,首先需要考虑使用什么协议。可以使用的协议包括 TCP 和 UDP。两种协议之间的重要区别在于它们的连接状态: ?TCP 协议控件是基于连接的协议,可以将它同电话系统相比。在开始数据传输之前,用户必须先建立连接。 ?UDP 协议是一种无连接协议,两台计算机之间的传输类似于传递邮件:消息从一台计算机发送到另一台计算机,但是两者之间没有明确的连接。另外,单次传输的最大数据量取决于具体的网络。 到底选择哪一种协议通常是由需要创建的应用程序决定的。下面的几个问题将有助于选择适宜的协议: 1. 在收发数据的时候,应用程序是否需要得到客户端或者服务器的确认信息?如果需要,使用 TCP 协议,在收发数据之前先建立明确的连接。 2. 数据量是否特别大(例如图象与声音文件)?在连接建立之后,TCP 协议将维护连接并确保 数据的完整性。不过,这种连接需要更多的计算资源,因而是比较“昂贵”的。 3. 数据发送是间歇的,还是在一个会话内?例如,如果应用程序在某个任务完成的时候需要通 知某个计算机,UDP 协议是更适宜的。UDP 协议适合发送少量的数据。 协议的设置

最新Winsock控件使用手册

Winsock控件使用手册 本文使用Word2000排版,如你阅读时版面较凌乱,请使用Word2000阅读。 Winsock控件对用户是不可视的,可以很容易地访问TCP 和UDP网络服务。TOM注:制作网络通讯软件,应该没有比VB+WINSOCK控件更简单的方案了吧? 其可以被Microsoft Access, Visual Basic ,Visual C++或Visual FoxPro开发人员使用。 用Winsock控件编写客户和服务器应用程序,不需要了解TCP或调用底层Winsock API的具体细节。 通过设置Winsock控件的属性和调用该控件的方法,可以很容易地连接到远程计算机并进行双向的数据交换。 TCP基本知识 TCP(Transfer Control Protocol)允许你创建并维护一个与远程计算机的连接,使用该连接,两台计算机之间就可以交换数据了。 如果你在创建一个客户应用程序,你必须知道服务器计算机的名字T注:建议用IP地址或IP地址(RemoteHost属性),以及要监听的端口号(RemotePort属性),然后调用Connect 方法。

如果你在创建一个服务器应用程序,设置要监听的端口号(LocalPort属性),调用Listen方法。当客户建立连接请求时,产生ConnectionRequest事件。要完成该连接,在ConnectionRequest事件中调用Accept方法。 一旦建立了连接,两台计算机之间就可以发送和接受数据了。要发送数据,调用SendData方法。当接受数据时,产生DataArrival事件。在DataArrival事件中调用GetData 方法来检取数据。 UDP基本知识 UDP(User Datagram Protocol)是无连接的协议。 与TCP操作不同,计算机并不建立一个连接。并且,UDP 应用程序可以是客户也可以是服务器。 要传输数据,首先设置客户计算机的LocalPort属性。服务器计算机T注:实际含义是指发送方只需要将RemoteHost属性设置为客户计算机T注:实际上的意思是指接收方的IP地址,将RemotePort 属性设置为客户计算机上的LocalPort属性值,然后调用SendData方法开始发送数据。客户计算机在DataArrival事件中使用GetData方法检取数据。

基于Winsock控件实现PLC网络通信控制

基于Winsock控件实现PLC网络通信控制 摘要:介绍了一个使用Visual Basic的Socket控件与OMRONPLC之间的通信程序,并成功地应用在自动控制系统中,主要实现上位机与OMRON PLC之间的以太网通信,并对它们之间的通信协议作了描述,本文所介绍的通信程序的设计方法具有一定参考价值。 关键词:可编程逻辑控制器;以太网;FINS;Winsock控件 在工业控制中,用PLC控制的工程在上/下位机通讯上一般采用RS-232/RS-485串口通讯,这种方法对于数据量较大,通讯距离较远,实时性要求高的控制系统,很难满足通讯需要。 近年来随着计算机网络技术的飞速发展,网络化数控已经成为现代制造业发展的必然趋势, 控制系统正向虚拟化、网络化、集成化、分布化和节点智能化的方向发展。[1]许多大型PLC厂商生产的PLC都配备了相应的以太网通信模块,本文讨论了OMRON PLC的以太网通信体系结构,并以CP1H PLC的ENT2l以太网模块为例实现与计算机的通信。 1. Winsock网络通信控件 Winsock控件是不可视控件,它提供了访问TCP和UDP网络服务非常简便的途径,使编程人员开发客户/服务器应用程序时,不必了解TCP的细节或调用低级的Winsock API 函数,只通过设置Winsock控件的属性并调用其方法,就可直接连接到一台远程计算机进行,并可实现双向数据交换。 WinSock主要支持两种类型的套接字:①流式套接字(Stream Socket)也称面向连接方式,该方式对应的是TCP协议,其传输特点是通信可靠性高,可以保证数据流的传输是可靠的、有序的、无重复的,可提供双向的数据流,数据被看作字节流,无长度限制。②数据报套接字(Datagram Socket)又称无连接方式,对应的是UDP协议,这种方式不提供数据传输的正确性、有序性和无重复性,因为它支持面向记录的数据流。因此,传输的数据可能丢失和重复,并且接收顺序混乱,报文长度是有限的。考虑到本系统对通信可靠性和正确性的要求很高,选用流式套接字方式。基于Client/Server模式的流式套接字通讯过程如图1所示。

VB Winsock控件的使用与介绍

第一节:Winsock控件的介绍 Winsock控件的作用简单说就是可以用于两台或多台机器间通信,这里不多说这个控件的作用了,因为在以后的介绍中我们会了解到这个控件的强大功能的,如可以用来做聊天软件等…… 废话不多说,来看看他有些什么重要的属性、方法和事件吧! 在VB6.0中的工具箱里默认情况下是没有这个控件的,添加方法如下:在工具箱上右击,选择[部件],然后在部件对话框中选择"Microsoft Winsock Control 6.0",后确定即可。如果没有这个复选框的话,请点击[浏览]按钮后在打开的[添加ActiveX控件]对话框选择 MSWINSCK.ocx后选择打开,再点确定即可。Winsock控件在工具箱中图标为。Winsck的主要属性: 属性名说明 BytesReceived 返回接收的数据,可以用GetData方法来获取它 LocalHostName 返回本机名 LocalIP 返回本机IP LocalPort 返回或设置本机所用的端口,如果为0则为随机产生 Protocol 返回通信所用的协议 RemoteHostName 返回通信对方的计算机名 RemoteHostIP 返回通信对方的IP State 返回Winscok的当前状态,取值如下 ?sckClosed(常量为0):关闭状态 ?sckOpen(常量为1):打开状态 ?sckListening(常量为2):侦听状态 ?sckConnectionPending(常量为3):连接状态 ?sckResolvingHost(常量为4):解析主机中 ?sckHostResolved(常量为5):已解析主机 ?sckConnecting(常量为6):正在连接 ?sckConnected(常量为7):已经连接 ?sckClosing(常量为8):客户端正在关闭 ?sckError(常量为9):连接发生错误 Winsock的主要方法: 方法名作用 listen 使服务器程序处于侦听状态,等待客户端的连接请求

相关文档