您现在的位置是: 首页 > 一键重装 一键重装

winsock控件发送和接收_winsock控件主要用来编制基于

tamoadmin 2024-08-31 人已围观

简介1.Winsock控件的方法2.Winsock的接收、发送数据3.关于vb6的winsock控件一次性传递数据大小的问题。4.Winsock控件5.vb中用winsock编写的服务端同时接受几百个客户端发送的数据会丢失文件吗6.怎样在vb中利用winsock控件,tcp协议实现多客户端连接?7.vb 关于Winsock1的详细用法。Sleep 1000改为DoEvents此外Winsock1.Se

1.Winsock控件的方法

2.Winsock的接收、发送数据

3.关于vb6的winsock控件一次性传递数据大小的问题。

4.Winsock控件

5.vb中用winsock编写的服务端同时接受几百个客户端发送的数据会丢失文件吗

6.怎样在vb中利用winsock控件,tcp协议实现多客户端连接?

7.vb 关于Winsock1的详细用法。

winsock控件发送和接收_winsock控件主要用来编制基于

Sleep 1000

改为

DoEvents

此外

Winsock1.SendData "UD1,TREND,i" & vbCrLf

要改为

Winsock1.SendData "UD1,TREND," & i & vbCrLf

Winsock控件的方法

直接用 bytestotal做for循环的终点,别用 strlen了

楼主的vbbyte位置没错,那个位置不是接收长度,而是接收类型。如果是2进制数据的话,得改用byte型,这里不用写,因为它默认就是 vbarray + vbbyte 型

Winsock的接收、发送数据

Accept方法(接受TCP连接请求),Bind方法,Close方法(Winsock控件)(关闭TCP连接),Listen方法(监听TCP数据),PeerData方法(获得数据),SendData方法(传输数据),GetData方法(WinSock控件),GetData方法(ActiveX控件)(获得数据)。

注意:GetData方法取回数据后,将清除缓冲区,而PeerData方法只是获取当前接收到的数据拷贝,而不清除缓冲区。

关于vb6的winsock控件一次性传递数据大小的问题。

差别大了。dll是activex dll就好比是一个动态dll文件。如果不设置不能访问函数。改了可以。activex控件是用户控件。自己做控件。然后加载就可以独立运行。不需要外部。winsock需要这个msock.ocx忘记名字了。需要这个控件。否则别人不能使用。左边的那些都是基本控件。都不需要带。。webbrowser也不需要带。

winsock。。

流程。。。。

接受getdate

发送senddate

5分就这么多了。

Winsock控件

Winsock 主要是以TCP或UDP传输数据的,TCP/IP通常被认为是一个四层协议系统,包括链路层,网络层,传输层,应用层.UDP属于运输层。

下面由下至上一步一步来看:

以太网 (Ethernet)数据帧的长度必须在46-1500字节之间,这是由以太网的物理特性决定的.这个1500字节被称为链路层的MTU(最大传输单元).但这并不是指链路层的长度被限制在1500字节,其实这个MTU指的是链路层的数据区.并不包括链路层的首部和尾部的18个字节.所以,事实上,这个1500字节就是网络层IP数据报的长度限制.因为IP数据报的首部为20字节,所以IP数据报的数据区长度最大为1480字节.而这个1480字节就是用来放TCP传来的TCP报文段或UDP传来的UDP数据报的.又因为UDP数据报的首部8字节,所以UDP数据报的数据区最大长度为1472字节.这个1472字节就是我们可以使用的字节数。

当我们发送的UDP数据大于1472的时候会怎样呢?这也就是说IP数据报大于1500字节,大于 MTU.这个时候发送方IP层就需要分片(fragmentation).把数据报分成若干片,使每一片都小于MTU.而接收方IP层则需要进行数据报的重组.这样就会多做许多事情,而更严重的是,由于UDP的特性,当某一片数据传送中丢失时,接收方便无法重组数据报.将导致丢弃整个UDP数据报。

另外,数据限制也存在两个因素:

第一,应用程序可能会受到其程序接口的限制。socket API提供了一个可供应用程序调用的函数,以设置接收和发送缓存的长度。对于UDP socket,这个长度与应用程序可以读写的最大UDP数据报的长度直接相关。现在的大部分系统都默认提供了可读写大于8192字节的UDP数据报(使用这个默认值是因为8192是NFS读写用户数据数的默认值)。

第二个限制来自于TCP/IP的内核实现。可能存在一些实现特性(或差错),使IP数据报长度小于65535字节。

vb中用winsock编写的服务端同时接受几百个客户端发送的数据会丢失文件吗

Winsock 控件对用户来说是不可见的,它提供了访问 TCP 和 UDP 网络服务的方便途径。Microsoft Access、Visual Basic、Visual C++ 或 Visual FoxPro 的开发人员都可使用它。为编写客户或服务器应用程序,不必了解 TCP 的细节或调用低级的 Winsock APIs。通过设置控件的属性并调用其方法就可轻易连接到一台远程机器上去,并且还可双向交换数据。

TCP 基础

数据传输协议允许创建和维护与远程计算机的连接。连接两台计算机就可彼此进行数据传输。

如果创建客户应用程序,就必须知道服务器计算机名或者 IP 地址(RemoteHost 属性),还要知道进行“侦听”的端口(RemotePort 属性),然后调用 Connect 方法。

如果创建服务器应用程序,就应设置一个收听端口(LocalPort 属性)并调用 Listen 方法。当客户计算机需要连接时就会发生 ConnectionRequest 。为了完成连接,可调用 ConnectionRequest 内的 Accept 方法。

建立连接后,任何一方计算机都可以收发数据。为了发送数据,可调用 SendData 方法。当接收数据时会发生 DataArrival 。调用 DataArrival 内的 GetData 方法就可获取数据。

UDP 基础

用户数据文报协议 (UDP) 是一个无连接协议。跟 TCP 的操作不同,计算机并不建立连接。另外 UDP 应用程序可以是客户机,也可以是服务器。

为了传输数据,首先要设置客户计算机的 LocalPort 属性。然后,服务器计算机只需将 RemoteHost 设置为客户计算机的 Internet 地址,并将 RemotePort 属性设置为跟客户计算机的 LocalPort 属性相同的端口,并调用 SendData 方法来着手发送信息。于是,客户计算机使用 DataArrival 内的 GetData 方法来获取已发送的信息。

Connect (Winsock 控件)

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

语法

object.Connect()

object 所在处代表一个对象表达式,其值是一个 Winsock 控件。

说明

使用 Connect 确认已经成功建立了一个连接。

ConnectionRequest

当远程计算机请求连接时出现。

仅适用于 TCP 服务器应用程序。在请求一个新连接时激活该。激活之后,RemoteHostIP 和 RemotePort 属性存储有关客户的信息。

语法

object_ConnectionRequest (requestID As Long)

ConnectionRequest 的语法有包含下面部分:

部分 描述

object 对象表达式,其值是“应用于”列表中的对象。

requestID 新连接请求标识。应把此参数传递给第二个控件示例上的 Accept 方法。

说明

服务器可决定是否接受连接。如果不接受新连接,则同级人员(客户)将得到 Close 。(在一个新控件示例上)用 Accept 方法接受新连接。

DataArrival

当新数据到达时出现。

语法

object_DataArrival (bytesTotal As Long)

DataArrival 的语法包含下面部分:

部分 描述

object 对象表达式,其值是“应用于”列表中的对象。

bytesTotal Long。可获取的数据总数量。

说明

如果没有获取一个 GetData 调用中的全部数据,则不会出现。只有存在新数据时才激活。可随时用 BytesReceived 属性检查可用的数据量。

建议你下载一个msdn

怎样在vb中利用winsock控件,tcp协议实现多客户端连接?

'*****************************************************

'编写作者:刘俊宾

'作者主页:://hystudio.ik8

'QQ:171162612

'编写日期:2007年6月1日

'谢谢使用,请勿修改

'问:用winsock控件中的udp协议编写的服务端程序,能不能同时接受200~300左右的客户端同时发送来的数据

'答:一般不会,但有丢的可能!UDP是一种无连接协议,不保证数据传输安全.

'问:还有如果是能同时接受的话,服务端是一个一个的处理客户端请求还是同时处理啊

'答:"Winsock1_DataArrival"用这个来处理就行了.它是在接受到数据时触发.

'问:说明下,客户端所发送的程序并不是很大,最大也就是10k左右(其实正常情况下只有3~5k左右,和qq一样,差不多都是文本的)

'答:注意!VB的WinSock一次发送数据不得大于8K,否则丢失多余数据!你可以将数据分开发送.

'问:我根本不懂udp这东东?

'答:UDP(User Datagram Protocol)用户数据报协议,用户数据报协议(UDP)是 ISO 参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务.

Option Explicit '强制性变量声明

Private Sub Command1_Click()

Winsock2.RemotePort = 3839 '设置对方(接收)端口

Winsock2.RemoteHost = "127.0.0.1" '对方IP(这里127.0.0.1为本机的意思)

Winsock2.SendData "text" & Text1.Text '发送数据("text"+text1.text内容.注意:"text"是用来区分数据类型用的,就是接收到之后告诉计算机该如何处理)

End Sub

Private Sub Form_Load()

Winsock1.Protocol = sckUDPProtocol '即楼主说的UDP协议

Winsock2.Protocol = sckUDPProtocol '即楼主说的UDP协议

Winsock1.LocalPort = 3839 '设置本地端口为3839

Winsock1.Bind 3839 '注意:这里是重点!!!!!!很多人在做UDP数据传输时会忘了这句,所以才会做不成功.(这里是绑定3839端口的意思)

End Sub

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)

Dim gg As String '定义变量

Winsock1.GetData gg, vbString '取得数据

If Left(gg, 4) = "text" Then '取得前四个字符,如果为"text"则,从而不执行其它数据操作

Text2.Text = Mid(gg, 5) '显示,测试用

End If

End Sub

vb 关于Winsock1的详细用法。

通信程序通常都是用Client/Server形式。这就要求作为服务器的主机可以同时处理多个客户的请求。因此在编写服务器程序时要添加多个Winsock控件。在开始我们先加入两个Winsock控件。其中一个用来侦听网上请求信号,取名为Listener;另外一个为初始的连接口,取名叫Sock(0)。注意,后一个控件要设为动态数组的形式,以后当客户增多时,可在这个控件基础上动态增加。由于受限制,我们在本例中设定最多可以同时接纳15个客户。客户机一般只与一个主机相连,因此程序只须一个Winsock进行连接就足够了。这个程序要用到的控件较少,除了Winsock和Form控件外,只须再添加Commmand控件即可。下面是具体程序和详细注释。

******************************

服务器程序

******************************

Option Explicit

定义常量

Const BUSY As Boolean = False

Const FREE As Boolean = True

定义连接状态

Dim ConnectState() As Boolean

Private Sub Form_Load()

ReDim Preserve ConnectState(0 To 1)

On Error Resume Next

ConnectState(0) = FREE

ConnectState(1) = FREE

’指定网络端口号

Listener.LocalPort = 1011

‘开始侦听

Listener.Listen

End Sub

Private Sub Listener_ConnectionRequest(ByVal requestID As Long)

Dim SockIndex As Integer

Dim SockNum As Integer

On Error Resume Next

Form1.Print requestID & "连接请求"

查找连接的用户数

SockNum = UBound(ConnectState)

If SockNum > 14 Then

Form1.Print SockIndex & ""

Exit Sub

End If

查找空闲的sock

SockIndex = FindFreeSocket()

’如果已有的sock都忙,而且sock数不超过15个,动态添加sock

If SockIndex > SockNum Then

Load Sock(SockIndex)

End If

ConnectState(SockIndex) = BUSY

Sock(SockIndex).Tag = SockIndex

接受请求

Sock(SockIndex).Accept (requestID)

Form1.Print SockIndex & "接受请求"

End Sub

客户断开,关闭相应的sock

Private Sub Sock_Close(Index As Integer)

If Sock(Index).State <> sckClosed Then

Sock(Index).Close

End If

ConnectState(Index) = FREE

Form1.Print Index & "close"

End Sub

接收数据

Private Sub Sock_DataArrival(Index As Integer, ByVal bytesTotal As Long)

Dim dx As Double

Form1.Print "数据来自" & Index

Sock(Index).GetData dx, vbDouble

Form1.Print "dx=" & dx

End Sub

寻找空闲的sock

Public Function FindFreeSocket()

Dim SockCount, i As Integer

SockCount = UBound(ConnectState)

For i = 0 To SockCount

If ConnectState(i) = FREE Then

FindFreeSocket = i

Exit Function

End Ifs

Next i

ReDim Preserve ConnectState(0 To SockCount + 1)

FindFreeSocket = UBound(ConnectState)

End Function

***************************

客户程序

’***************************

Option Explicit

发送数据

Private Sub command1_Click()

Dim dx As Double

dx = 23.9

sock.SendData dx

MsgBox ("data sended")

End Sub

Private Sub Form_Load()

远程主机名

sock.RemoteHost = "media2"

网络端口

sock.RemotePort = 1011

发出连接命令

sock.Connect

Command1.Enabled = False

End Sub

服务器关闭

Private Sub sock_Close()

MsgBox ("socket closed")

End Sub

连接成功

Private Sub sock_Connect()

MsgBox ("socket connected")

Command1.Enabled = True

End Sub

1、首先,在电脑上打开自己的VB6.0软件,然后打开VB属性窗口,在VB的工程按钮下方,点击引用这个按钮。

2、然后就会看到引用的添加窗口,可以在这里看到可用引用。

3、在这里还会看到引用文件的路径。

4、在这里还能根据自己的需要使用优先级。

5、设置完成后,点击确定按钮,就可以进行最后的保存了。