您的位置 首页 > 驱动程序

winsock控件的问题_当winsock控件处于关闭状态

1.VB的Winsock控件,为什么不能接收完所有数据呢?明明发送了56个字节的数据,可只接收了6个字节?拜求高手

2.VB,winsock控件的一小段代码

3.为什么用winsock控件传输数据的时候会出现乱码

4.如何使用VB Winsock控件

5.VB中的winsock控件怎么找不到啊?(我用的是.net)

winsock控件的问题_当winsock控件处于关闭状态

If Winsock1.State <> sckcolsed Then Winsock1.Close这行代码的意思是,当前连接处于活动状态,必须关掉,才能再接入, 就比如一个人整和一个人说话,这时来了第二个人,想要和第二个人说话只能先结束和第一个人的说话了

VB的Winsock控件,为什么不能接收完所有数据呢?明明发送了56个字节的数据,可只接收了6个字节?拜求高手

你这个错误与Winsock没有关系吧,这是与WEB的PHP通信的应答代码。

用Winsock进行Web通信倒是没有问题,但要控制数据量。每个数据包是有尺寸限制的,如果你发送或接收的数据量超过了一个数据包规定的字节数,它会自动拆开分多次发送。因此你的Winsock代码里必须有判断数据传输完成的代码部分。

对于web访问来说,我建议你不要用Winsock发送请求和获得应答,数据量小你可以用Inet控件,数据量大可以用Webbrowser。你的这个功能用这两个控件轻松完成,何必非要用Winsock呢。一般我们用Winsock是用来处理传输自己编写的服务器与客户端程序用,对于这种标准的web尤其是协议通信,只要用现成控件即可。

VB,winsock控件的一小段代码

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

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

为什么用winsock控件传输数据的时候会出现乱码

Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long) '这个是winsock有新的连接请求时触发的

If Winsock1.State <> sckcolsed Then Winsock1.Close '这句的作用是当前如果有连接未关闭就将它关闭,以接受新的连接请求

Winsock1.Accept requestID '这句的作用是接受新的客户机请求

Label1.Caption = "有客户端连入本机" '其实 这个应该是 有新的客户端连入本机 这样直观点

End Sub

如何使用VB Winsock控件

打开你的字符串缓冲区,用二进制方式看看究竟传回来的是什么内容,

通常这类情况与接收和发送的缓冲区不匹配有关系,导致字符串被异常截断,但是你的现象是乱码,可能是服务器根本没有把你需要的字符串正常打包传送。

另外还建议查一下是否有大小端的问题,可能服务器是按大端来发数据,但是客户端却会按小端来收。上网去找winsock的文档仔细阅读下比较好。

VB中的winsock控件怎么找不到啊?(我用的是.net)

使用 Winsock 控件步骤:

一)选择通讯协议

在使用 WinSock 控件时,首先需要考虑使用什么协议。可以使用的协议包括 TCP 和 UDP。

到底选择哪一种协议通常是由需要创建的应用程序决定的。下面的几个问题将有助于选择适宜的协议:

在收发数据的时候,应用程序是否需要得到客户端或者服务器的确认信息?如果需要,使用 TCP 协议,在收发数据之前先建立明确的连接。

数据量是否特别大(例如图象与声音文件)?在连接建立之后,TCP 协议将维护连接并确保数据的完整性。不过,这种连接需要更多的计算,因而是比较“昂贵”的。

数据发送是间歇的,还是在一个会话内?例如,如果应用程序在某个任务完成的时候需要通知某个计算机,UDP 协议是更适宜的。UDP 协议适合发送少量的数据。 ?

二)协议的设置

在设计时,可以按如下方式设置应用程序使用的协议:在“属性”窗口中单击“协议”,然后选择 sckTCPProtocol 或者 sckUDPProtocol。也可以使用程序代码来设置 Protocol 属性,如下所示:

Winsock1.Protocol = sckTCPProtocol

三)确定计算机的名称

在与远程计算机相连接的时候,需要知道它的 IP 地址或者它的“好听的名字”。IP 地址是一串数字,每三个数字为一组,中间用点隔开(形如 xxx.xxx.xxx.xxx)。通常,最易记住的是计算机的“好听的名字”。

要确定计算机的名字,请按照以下步骤执行:

在计算机的“任务栏”上,单击“启动”。

在“设置”项中,单击“控制面板”。

双击“网络”图标。

单击“标识”选项卡。

在“计算机名称”框中可以找到计算机的名称。

上面找到的计算机名称可以作为 RemoteHost 属性的值。

四)TCP 连接初步

如果应用程序要使用 TCP 协议,那么首先必须决定应用程序是服务器还是客户端。如果要创建一个服务器端,那么应用程序需要“监听”指定的端口。当客户端提出连接请求时,服务器端能够接受请求并建立连接。在连接建立之后,客户端与服务器端可以自由地互相通讯。

五)下列步骤创建一个非常简单的服务器:

要创建一个 TCP 服务器,请按照以下步骤执行:

创建新的 Standard EXE 工程。

将缺省窗体的名称改为 frmServer。

将窗体的标题改为“TCP 服务器”。

在窗体中放入一个 Winsock 控件,并将它的名字改为 tcpServer。

在窗体上添加两个 TextBox 控件。将第一个命名为 txtSendData,第二个为 txtOutput。

为窗体添加如下的代码。

Private?Sub?Form_Load()

'将?LocalPort?属性设置为一个整数。

'然后调用?Listen?方法。

tcpServer.LocalPort?=?1001

tcpServer.Listen?

frmClient.Show?'显示客户端的窗体。

End?Sub

Private?Sub?tcpServer_ConnectionRequest?_

(ByVal?requestID?As?Long)

'检查控件的?State?属性是否为关闭的。

'如果不是,

'在接受新的连接之前先关闭此连接。

If?tcpServer.State?<>?sckClosed?Then?_

tcpServer.Close

'接受具有?requestID?参数的

'连接。

tcpServer.Accept?requestID

End?Sub

Private?Sub?txtSendData_Change()

'名为?txtSendData?的?TextBox?控件中

'包含了要发送的数据。当用户往文本框中

'键入数据时,使用?SendData?方法

'发送输入的字符串。

tcpServer.SendData?txtSendData.Text

End?Sub

Private?Sub?tcpServer_DataArrival?_

(ByVal?bytesTotal?As?Long)

'为进入的数据声明一个变量。

'调用?GetData?方法,并将数据赋予名为?txtOutput?

'的?TextBox?的?Text?属性。

Dim?strData?As?String

tcpServer.GetData?strData

txtOutput.Text?=?strData

End?Sub 上面的步骤创建了一个简单的服务器应用程序。为了使它能够工作,还必须为它创建一个客户端的应用程序。

六)创建 TCP 客户端,请按照以下步骤执行:

在工程中添加一个新的窗体,将其命名为 frmClient。

将窗体的标题改为“TCP Client”。

在窗体中添加一个 Winsock 控件,并将其命名为 tcpClient。

在 frmClient 中添加两个 TextBox 控件。将第一个命名为 txtSend,第二个为 txtOutput。

在窗体上放一个 CommandButton 控件,并将其命名为 cmdConnect。

将 CommandButton 控件的标题改为 Connect。

在窗体中添加如下的代码。

重点必须将 RemoteHost 属性值修改为您的计算机的名字。

Private?Sub?Form_Load()

'Winsock?控件的名字为?tcpClient。

'注意:要指定远程主机,可以使用

'?IP?地址(例如:"121.111.1.1"),也可以使用

'计算机的“好听的名字”如下所示。

tcpClient.RemoteHost?=?"RemoteComputerName"

tcpClient.RemotePort?=?1001

End?Sub

Private?Sub?cmdConnect_Click()

'调用?Connect?方法,初始化连接。

tcpClient.Connect

End?Sub

Private?Sub?txtSendData_Change()

tcpClient.SendData?txtSend.Text

End?Sub

Private?Sub?tcpClient_DataArrival?_

(ByVal?bytesTotal?As?Long)

Dim?strData?As?String

tcpClient.GetData?strData

txtOutput.Text?=?strData

End?Sub

上面的代码创建了一个简单的客户/服务器模式的应用程序。我们可以将两者都运行起来:运行工程,然后单击“连接”。在两个窗体之一的 txtSendData 文本框中键入文本,可以看到同样的文字将出现在另一个窗体的 txtOutput 文本框中。

七)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 方法来获取已发送的信息。

如你装过VB6的话,那么WINSOCK控件已经注册过了,你再装VB。NET的话,可以按在“添加/移除项”里,选中COM组件,找到“Microsoft WinSock Control,version6.0”,选中,点击“确定”按钮即可以找到这个控件。

如你没有装过VB6直接装VB.NET的话,就找不到这个控件了,建议把VB6。0装上就可以了

如果不装又想用WINSOCK的话,可以用.net的Socket类代替,具体引用方法为:

首先加入命名空间:

Imports System.Net.Sockets,然后定义一个socket类的引用,

Dim MySocket As Socket

具体编程可参考MSDN

热门文章