winsock.Connect的阻塞问题,急!!!! winsock.connect ip,port 当IP找不到时,出现长达20多秒的超时等待才返回错误,此时应用程序像死了一样,请问如何让其马上返回错误,这个问题如何解决,在VB中很难解决呀,请教高手!送分。。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 初始化写Winsock2.RemoteHost = 127.0.0.1 Winsock2.RemotePort = 1080 Winsock2.connect事件中写Private Sub Winsock2_Connect()On Error GoTo errendWinsock2.SendData "ok"Exit Suberrend:MsgBox "连接发生错误!数据发送失败!", vbOKOnly + vbExclamation, "TCP 错误信息"End Sub 影子的代码测试了,没有用,依然要等很久,而且连不上后不会触发Connect事件,而是触发ERROR事件。 直接在连接的过程中用err如Private Sub connectCmd_Click() On Error GoTo errDoIf Winsock1.State <> 0 ThenWinsock1.CloseTimer1.Enabled = FalseMsgBox ipText.TextWinsock1.RemoteHost = Trim(ipText.Text)Winsock1.RemotePort = Trim(PortText.Text) End IfWinsock1.LocalPort = 0Winsock1.ConnectTimer1.Enabled = TrueExit SuberrDo: 'MsgBox "Error!!!!!!!" MsgBox Err.Description End Sub 楼上的,那个timer1是干什么的? 等待肯定有不过怎么会出现不能动的情况呢如果程序死在那儿的话,你在winsock.connect前面加上DoEvents 当然如果你connect一个互联网上的Ip自然慢点.不过你可以把winsock.connect放在定时器事件里执行,那就不用等了. 这里很多人回答问题都是想当然,其实不是那么回事。等待多少时间与机器的设定有关。最多,只能使用winsock的error事件。不要随便加DOEVENTS,根本没用。更不要加TIMER控件,惹来的麻烦比得到的好处要多。 用timer没什么不好的, 根据网络连接情况每次手动设置判断间隔,如果时间内没有连接则为不能连接(当然完全由系统返回错误是100%的确认无法连接了),用这样的方法我扫描一个远程(65535每个端口)少于5分钟--每次只开一个线程,而且结果基本可靠! 我个人认为某些情况手动设置远比error返回要实际得多。 如果只是确认一个服务,推荐error返回 看看这个管用不Dim sIP As String初始化Winsock2.RemoteHost = 127.0.0.1Winsock2.RemotePort = 1080Private Sub Command1_Click()Winsock1.ConnectCommand1.Enabled = FalseLabel1.Caption = "连接远程服务器...."Do Until Winsock1.State = 7 If Winsock1.State = 0 Or Winsock1.State = 9 Then Command1.Enabled = True Winsock1.Close Label1.Caption = "无法连接" Exit Sub End If DoEvents Label1.Caption = "已经连接到服务器...."LoopLabel1.Caption = "服务器IP:" & Winsock1.RemoteHostIPsIP = Winsock1.RemoteHostIP'Winsock1.CloseCommand1.Enabled = TrueEnd Sub 请看代码:使用KODAK控件,可以扫描,但为什么不能保存到文件? 在VB中怎么样获得计算机的随机数呀? MSN上不了了,FT! 为什么这样写的sql,运行后名次都是1 VB MSCOMM控件读取16进制字串显示乱码问题,急!!!各位大哥,高手,前辈,老鸟们帮帮小弟啊!!!谢谢!!! 这行的符号究竟该怎么写 哪位大哥知道有把一个图片读入自动缩小尺寸保存成缩略图的代码或组件 VB高级问题,如何运行是枚举一个控件的所有属性名称? 紧急求救:如何给一个函数返回多个值或数组 datagrid中某列怎样与bit类字段结合? winsock.close问题 [急!]如何响应运行添加的控件的事件
Winsock2.RemoteHost = 127.0.0.1
Winsock2.RemotePort = 1080
Winsock2.connect
事件中写
Private Sub Winsock2_Connect()On Error GoTo errendWinsock2.SendData "ok"
Exit Sub
errend:
MsgBox "连接发生错误!数据发送失败!", vbOKOnly + vbExclamation, "TCP 错误信息"
End Sub
如
Private Sub connectCmd_Click()
On Error GoTo errDoIf Winsock1.State <> 0 Then
Winsock1.Close
Timer1.Enabled = FalseMsgBox ipText.TextWinsock1.RemoteHost = Trim(ipText.Text)Winsock1.RemotePort = Trim(PortText.Text)
End If
Winsock1.LocalPort = 0Winsock1.Connect
Timer1.Enabled = True
Exit SuberrDo:
'MsgBox "Error!!!!!!!"
MsgBox Err.Description
End Sub
等待多少时间与机器的设定有关。最多,只能使用winsock的error事件。
不要随便加DOEVENTS,根本没用。更不要加TIMER控件,惹来的麻烦比得到的好处要多。
看看这个管用不Dim sIP As String初始化
Winsock2.RemoteHost = 127.0.0.1
Winsock2.RemotePort = 1080Private Sub Command1_Click()
Winsock1.Connect
Command1.Enabled = False
Label1.Caption = "连接远程服务器...."
Do Until Winsock1.State = 7
If Winsock1.State = 0 Or Winsock1.State = 9 Then
Command1.Enabled = True
Winsock1.Close
Label1.Caption = "无法连接"
Exit Sub
End If
DoEvents
Label1.Caption = "已经连接到服务器...."
Loop
Label1.Caption = "服务器IP:" & Winsock1.RemoteHostIP
sIP = Winsock1.RemoteHostIP
'Winsock1.Close
Command1.Enabled = True
End Sub