文档库 最新最全的文档下载
当前位置:文档库 › 网络编程中Winsock的使用

网络编程中Winsock的使用

网络编程中Winsock的使用
网络编程中Winsock的使用

VB网络编程中Winsock的使用

如同上面的内容所描述的,不论您使用UDP协议或是TCP协议,Winsock控件都可以允许与远程的设备连接,并且在相互之间交换数据。因此,依据上面的面熟而言,不论您使用的是哪一种协议都可以扮演主机端和客户端的角色。

同时,当您在使用Winsock控件的过程中,这个控件不会显示在正在执行的窗体之中。换句话说,Winsock控件是在后台运行的一种控件。在执行过程之中,不会具有任何选用、可见的控件。那么该如何使用Winsock控件呢?它可以被应用在那些类型的应用程序之中呢?以下所列出的内容,是这个控件可以应用的大致范围:

?将客户端所收集的数据,传送给主机端。

?点对点的文件传送。

?聊天室应用程序。

?电子公告栏。

?voip(voice over TCP/ip)

因此,当您希望建立上述类型的应用程序之前,必须要学习如何选用适合的协议类型。

2-1如何选用适用的协议

当您准备开始使用Winsock控件之前,首要的工作是如何选择适用的协议类型。如同先前所述的,您可以选择TCP 协议或是UDP协议中的一种。但是这两种协议的差异点在哪里呢?虽然,它们同样可以使用在Internet或是Internet环境之中,但是主要的差异在于连接的状态。以下是这两种协议的特点说明:

?TCP协议是属于面向连接的协议。所谓的面向连接协议是指——“在您可以交换数据之前,在两个终端设备之间必须连接成功”。同时,在网络的基础理论之中,都会特别强调

TCP具有错误核对的功能。也就是说,在数据的传送过程中,如果发生错误或是数据无法传达对方时,TCP协议将会重复尝试着重新传送数据。因此,核对以及重新传送的能力,因此起传输效率会比Internet协议或是巨域网络协议差一些(netBIEUI、IPX、AppleTalk)。

?UDP协议是属于无面向连接协议。这种协议为适用在两个设备之间,适用于信息传送以及数据的传输方面。但是在使用时,必须注意当你将信息送出时,对方可能已经离线,因而无法接收到数据,而您也无法实时察觉到对方已经离线。此外,使用UDP协议的最大数据传送量,完全取决于网络的传输量。因此,此种协议较为适用于局域网络。

因此,当您在建立应用程序并且选用适当的协议之前,务必先依据应用程序使用的环境来选择适用的协议。

2-2设置协议

当已经选择好适当的协议之后,接下来,将必须要设置协议的类型。在Visable Basic 之中,共有两种设置协议的方式:“修改属性窗口”以及“程序代码设置”。以下是这两种设置方式的说明。?修改属性窗口(见图2-1)

?程序代码设置

Winsock1.Protocol=sckTCPProtocol

3.TCP连接的基础

在使用TCP协议来建立应用程序的过程中,首先必须决定应用程序是属于主机端

是客户端来决定应用程序所扮演的角色问题。因此,在建立应用程序的过程中,如果您选择“主机端”时,主机端的Winsock控件必须将特定的连接端口号设置在监听模式之中。同时,在客户端提出连接的请求时,主机端可以允许客户端的连接请求,并且完成连接的程序。

因此,一旦主机端与客户端连接成功之后,在这个部设备之间即可开始传送数据,以下的程序代码,具有TCP连接的基本聊天室功能。

3-1TCP连接范例

在此笔者只做简单的-程序介绍,

?frmserver窗体的设计内容

如图3-1所示

?frmserver的程序代码

private sub form_load()

…设置本机连接端口的localport属性的内容

…请注意!必须是整体值

tcpserver.LocalPort=2000

…将本机连接端口设置为监听模式

tcpserver.Listen

Me.Caption=”frmsever”

Label1.Caption=”传送的文字“

Label2.Caption=”接收的文字“

…打开frmclient窗体

frmClient.Show

end sub

private sub tcpserver_connectionrequest(byval requestid as long)

…如果tcpserver 控件的状态目前不是处于关

…闭的状态时,在允许远程设备连接时,必须要关闭目前的控制的运行if tcpserver.state<>sckclosed then tcpserver..close

…允许远程设备使用必要的识别码(requestid)与主机进行连接tcpserver.accept requestid

end sub

private sub txtsend_change()

…当txtsend控件的内容发生变化时,将txtsend控件的内容,通过tcpserver控件sendda ta方

…法,将txtsend控件的内容传送给frmclient

tcpserver.senddata txtsend.text

end sub

private sub tcpserver_dataarrival(byval bytestotal as long)

…声明即将接收的数据类型

dim strdata as string

…调用tcpserver控件的getdata方法,将接收的数据以vbstring数据类型,存放在strdat a变量之中。

Tcpserver.getdata strdata ,vbstring

…将strdata变量的内容,存放在txtoutput控件之中。

Txtreceive.text =strdata

End sud

?frmclient窗体的设计内容

窗体的配置内容如图3-2

?程序的代码

private sub form_load()

…指定远程主机的ip地址。如果是localhost,代表的ip地址为127.0.0.1,并且也代表本机。

Tcpclient.RemoteHost=”localhost”

…设置本机连接端口的localport属性的内容

…请注意!必须是整体值

tcpclient.remoteport=2000

…设置窗体的标题内容

Me.Caption=”frmclient”

Label1.caption=”传送的文字”

Label2.caption=”接收的文字”

Cmdconnect.caption=”与主机连接”

End sub

Private sub cmdconnect_click()

…调用tcpclient控件的connect方法,来初始化与主机的连接请求

tcpclient.connect

end sub

private sub txtsend_change()

…当txtsend控件的内容发生变化时,立即调用tcpclient控件的senddata方法,将txtsen d控件的内容传送给主机

tcpclient.senddata txtsend.text

end sub

private sub tcpclient_dataarrival(byval bytestotal as long)

…说明即将接收的数据类型

dim strdata as string

…调用tcpclient控件的getdata方法,将接收的数据以vbstring数据类型存放strdata变量之中。

Tcpclient.getdata strdata,vbstring

…将strdata变量的内容,存放在txtoutput控件之中。

Txtreceive.text=strdata

End sub

?程序的执行结果

3-1-1如何允许更多客户端同时连接

当您的应用程序架构是属于主从式架构时,一般来说,客户端应该不止一个而已。但是,如果每一个客户端使用的一组连接端口时,那么如果有100个客户端呢?如果有1000个客户端呢?那么究竟要增加多少个winsock控件呢?同时,也得要分成100(或是1000)组accept子程序,接着每一部客户端都必须记得固定的连接端口号。

其实,您大可不必如此辛苦。您可以利用Visable Basic控件数组的方式并利用监听用的数组元素(一般都是索引值“0”),来触发ConnectRequest事件。接下来再利用判别控件数组元素的连接状态来进行远程客户端连接。以下的程序代码范例,就是如何让许多远程用户连接到同一个连接端口号的程序代码的模板:

private connmax as long

private sub form_load ()

dim I as integer

connmax =200

sckserver(0).localport=1001

sckserver(0).listen

for I =1 to connmax

load sckserver(i)

next

end sub

private sub sckserver_connectionrequest(index as integer,byval requestid as long)

dim I as intege

for I =1 to connmax

if sckserver(1).state=sckclosed then

sckserver(I).accept requestid

end if

end if

end sub

在上述的程序范例中,将会建立一个具有“201”个元素的sckserver控件数组。接着,利用for。。。next循环的方式,来设置加载sckserver控件数组元素或是判断数组元素是否正在连接中进而允许客户端连接。至于sckserver控件数组总元素为“201”的原因在于——“con nmax设置为200再加上sckserver(0),因此总元素数量为201”。

4.UDP连接的基础

在建立UDP的应用程序时,其过程会比TCP协议简单许多。这是由于UDP协议在数据传送之前,可以不需要特别明确的连接方式。但是,在上述的TCP连接方式之中,Wi nsocke控件必须设置在“监听(Linsten)”状态之下,同时在客户端准备与主机进行连接时,主机端也必须要使用Accept方法来允许客户端所要求的连接。

反观在UDP协议方面,双方仅仅需要使用Bind方法,即可与对方连接并且传输数九,因此,UDP协议连接过程的处理方式确实比TCP简单许多。下面介绍使用UDP协议来传送信息的过程。

4-1UDP的连接范例

在此只做简单的介绍

?窗体frm PeerA的设计内容

如图4-1所示

?窗体的程序代码

Private Sub Form_Load()

′控件的名字为udpPeerA

With udpPeerA′重点:必须将RemoteHost 的值修改为对方计算机的名字。

RemoteHost= ″PeerB″

RemotePort = 1001 ′连接的端口号。

Bind 1002 ′绑定到本地的端口。

End With

frmPeerB.Show′显示第二个窗体。

End Sub

Private Sub txtSend_Change()

′在键入文本时,立即将其发送出去。

udpPeerA.SendData txtSend.Text

End Sub

Private Sub udpPeerA_DataArrival (ByVal bytesTotal As Long) Dim strData As String

udpPeerA.GetData strData

txtOutput.Text = strData

End Sub

?窗体frmpeerB的设计内容

如图4-2所示

?窗体frmpeerB的程序代码

Private Sub Form_Load()

′控件的名字为udpPeerB。

With udpPeerB

′重点:必须将RemoteHost的值改为对方计算机的名字。RemoteHost= ″PeerA″

RemotePort = 1002 ′要连接的端口。

Bind 1001 ′绑定到本地的端口上。

End With

End Sub

Private Sub txtSend_Change()

′在键入后立即发送文本。

udpPeerB.SendData txtSend.Text

End Sub

Private Sub udpPeerB_DataArrival (ByVal bytesTotal As Long) Dim strData As String

udpPeerB.GetData strData

txtOutput.Text = strData

End Sub

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 使服务器程序处于侦听状态,等待客户端的连接请求

相关文档