frandyyue,我照你的方法加了,可是每次一连接,就提示说:所需事物或请求的错误协议或连接状态: 服务器那边的设置如下: localport 1001 iisip 192.168.0.6 controlserviceip 192.168.0.6 controlserviceport 4000 agentid 2 dialoutwaittime 60 我的代码: Private Sub connect_Click() ' Winsockclient.connect ' Do Until Winsockclient.State = sckConnected 'If Winsockclient.State = sckClosed Then 'Exit Sub 'End If 'DoEvents 'Loop On Error Resume Next Winsockclient.connect If Err Then MsgBox Err.Description End If Exit Sub End SubPrivate Sub send_Click() Winsockclient.SendData Text1.Text End Sub Private Sub Form_Load() Winsockclient.RemotePort = 1001 Winsockclient.RemoteHost = "192.168.0.6" End Sub
Private Sub Winsockclient_Close() Winsockclient.Close End End Sub Private Sub winsockclient_DataArrival(ByVal bytesTotal As Long) Dim tmpstr As Integer Winsockclient.GetData tmpstr Textget.Text = tmpstr End Sub 实在看不出有什么错误呀
为了大家方便同步方式来传送数据,我写了一个客户端的DLL(VBSockDLL.dll),代码例子如下,专们用于与服务器的交互。 需要的可以和我联系。 Private Declare Function CloseSocket Lib "VBSockDLL.dll " (ByVal hSocket As Long) As Long Private Declare Function RecvData Lib "VBSockDLL.dll " (ByVal hSocket As Long, b As Any, ByVal nLen As Long) As Long Private Declare Function SendData Lib "VBSockDLL.dll " (ByVal hSocket As Long, b As Any, ByVal nLen As Long) As Long Private Declare Function ConnectServer Lib "VBSockDLL.dll " (ByVal strServerIp As String, ByVal nPort As Long) As Long Private Declare Function SetTimeOut Lib "VBSockDLL.dll " (ByVal nSec As Long) As Long Sub test1() Dim strData As String Dim nLen As Long Dim nRet As Long
Dim hSocket As Long hSocket = ConnectServer("www.csdn.net", 80) If hSocket = -1 Then MsgBox "ConnectServer error" Exit Sub End If SetTimeOut (10) '用于设置发送和接收数据的超时(秒),可以不用设置,默认为5秒
nRet = SendData(hSocket, ByVal strData, nLen) If nRet = -1 Then MsgBox "SendData error" Exit Sub End If nLen = 1000 strData = Space(nLen) nRet = RecvData(hSocket, ByVal strData, nLen) If nRet = -1 Then MsgBox "RecvData" Exit Sub End If MsgBox strData CloseSocket hSocket End SubSub test2() Dim strData As String Dim nLen As Long Dim nRet As Long Dim b(1 To 100) As Byte
Dim hSocket As Long hSocket = ConnectServer("www.csdn.net", 80) If hSocket = -1 Then MsgBox "ConnectServer error" Exit Sub End If SetTimeOut (10) '用于设置发送和接收数据的超时(秒),可以不用设置,默认为5秒
nLen = Len(strData) For i = 1 To nLen b(i) = Asc(Mid(strData, i, 1)) Next
nRet = SendData(hSocket, b(1), nLen) If nRet = -1 Then MsgBox "SendData error" Exit Sub End If nLen = 100 strData = Space(nLen) nRet = RecvData(hSocket, b(1), nLen) If nRet = -1 Then MsgBox "RecvData" Exit Sub End If CloseSocket hSocket End SubSub MAIN() test1 '用于传送字符串 'test2 '用于传送数组(二进制数据) End Sub
primmer,能帮我看看为什么嘛?谢谢了
昨天等到凌晨三点多,睡觉的时候居然梦见有人对我说你这个问题解决不了。
醒来发现居然果然是没有回贴。:(郁闷ing
再加个err看看是什么情况
Private Sub connect_Click()
On Error Resume Next
winsock1.Connect
If Err Then
MsgBox err.description
Exit Sub
End If
.....
wend
这个循环不需要吧.
端口是否正确,他们都正确。看看你的网络配置主要是Tcp/Ip协议。
我看你这段没有什么问题,要不你写一小段服务段程序与你现在的程序是否可以连接上。发现问题的所在
服务器那边的设置如下:
localport 1001
iisip 192.168.0.6
controlserviceip 192.168.0.6
controlserviceport 4000
agentid 2
dialoutwaittime 60
我的代码:
Private Sub connect_Click() ' Winsockclient.connect
' Do Until Winsockclient.State = sckConnected
'If Winsockclient.State = sckClosed Then
'Exit Sub
'End If
'DoEvents
'Loop
On Error Resume Next
Winsockclient.connect
If Err Then
MsgBox Err.Description
End If
Exit Sub
End SubPrivate Sub send_Click()
Winsockclient.SendData Text1.Text
End Sub Private Sub Form_Load()
Winsockclient.RemotePort = 1001 Winsockclient.RemoteHost = "192.168.0.6"
End Sub
Private Sub Winsockclient_Close() Winsockclient.Close End End Sub
Private Sub winsockclient_DataArrival(ByVal bytesTotal As Long) Dim tmpstr As Integer Winsockclient.GetData tmpstr Textget.Text = tmpstr End Sub
实在看不出有什么错误呀
有两个地方:第一个是我现在的机器不能被局域网内的其他机器看到,但是我能够看到其他的机器。我第一次试验的时候,发现不能够连接,就把协议改了成udp了。
第二个地方:我昨天自己写了一个服务器的程序,试过了,还是不能够连接,昨天我想完了,看来是我的客户端程序的问题,今天经你提醒,我发现可能是这个TCP/IP协议的问题吧。
另外:我的服务器段和客户端程序都是在我的机器上用的,如果TCP/IP正常的话,是不是这个就没关系了?
几乎想放弃了
pipi,frand你们在不在啊?
winsock.Listen这一句啊,好像你应该在伺服器端打开侦听,客户端才可以连接上的,还有,你如果第一次连接上了,你应该正常关闭端口,不然端口处在打开状态,你再去连接也会出现端口被占用的错误的。
更详细的情况,你可以在msdn里面找到。
不行直接将那个复制过来不就可以了吗?
每一个WINSOCK只能进行一次通讯,如果要进行第二次通讯的话,那么重新LOAD一个,另外建议你用一个TIMER来监视WINSOCK的STATE是否为sckConnected。为什么不可以在一次通讯的末尾用winsock.close事件关闭这个socket,在开头用一个判断语句:If winsock.state =sckclosed Then winsock.connect来打开呢?我的程序好像证明的确不能够这样做,为什么呢?那么如果要重新LOAD一下的话,该怎么做呢?
如果这样做的话,那我是不是要用个动态数组控件?
每次用过一个winsock之后关闭,然后再打开后一个?
如果是这样,那要winsock.close这个事件有什么意义呢?只用一次就关掉了阿
谢谢。
在我写的那个网络版软件中,当服务器安装在Win2000操作系统的计算机中时,所有安装在WIN9X下的客户程序均无法连接上,第一次也曾经连接上过。
服务器安装在WINXP下也没有这种问题。
需要的可以和我联系。
Private Declare Function CloseSocket Lib "VBSockDLL.dll " (ByVal hSocket As Long) As Long
Private Declare Function RecvData Lib "VBSockDLL.dll " (ByVal hSocket As Long, b As Any, ByVal nLen As Long) As Long
Private Declare Function SendData Lib "VBSockDLL.dll " (ByVal hSocket As Long, b As Any, ByVal nLen As Long) As Long
Private Declare Function ConnectServer Lib "VBSockDLL.dll " (ByVal strServerIp As String, ByVal nPort As Long) As Long
Private Declare Function SetTimeOut Lib "VBSockDLL.dll " (ByVal nSec As Long) As Long
Sub test1()
Dim strData As String
Dim nLen As Long
Dim nRet As Long
Dim hSocket As Long
hSocket = ConnectServer("www.csdn.net", 80)
If hSocket = -1 Then
MsgBox "ConnectServer error"
Exit Sub
End If
SetTimeOut (10) '用于设置发送和接收数据的超时(秒),可以不用设置,默认为5秒
strData = "GET / HTTP/1.1" + vbCrLf
strData = strData + "Host: www.csdn.net" + vbCrLf + vbCrLf
nLen = Len(strData)
nRet = SendData(hSocket, ByVal strData, nLen)
If nRet = -1 Then
MsgBox "SendData error"
Exit Sub
End If
nLen = 1000
strData = Space(nLen)
nRet = RecvData(hSocket, ByVal strData, nLen)
If nRet = -1 Then
MsgBox "RecvData"
Exit Sub
End If
MsgBox strData
CloseSocket hSocket
End SubSub test2()
Dim strData As String
Dim nLen As Long
Dim nRet As Long
Dim b(1 To 100) As Byte
Dim hSocket As Long
hSocket = ConnectServer("www.csdn.net", 80)
If hSocket = -1 Then
MsgBox "ConnectServer error"
Exit Sub
End If
SetTimeOut (10) '用于设置发送和接收数据的超时(秒),可以不用设置,默认为5秒
strData = "GET / HTTP/1.1" + vbCrLf
strData = strData + "Host: www.csdn.net" + vbCrLf + vbCrLf
nLen = Len(strData)
For i = 1 To nLen
b(i) = Asc(Mid(strData, i, 1))
Next
nRet = SendData(hSocket, b(1), nLen)
If nRet = -1 Then
MsgBox "SendData error"
Exit Sub
End If
nLen = 100
strData = Space(nLen)
nRet = RecvData(hSocket, b(1), nLen)
If nRet = -1 Then
MsgBox "RecvData"
Exit Sub
End If
CloseSocket hSocket
End SubSub MAIN()
test1 '用于传送字符串
'test2 '用于传送数组(二进制数据)
End Sub