用WINSOCK进行TCP连接时,无非就是一个LISTEN,一个CONNECT,但如果让程序一运行就LISTEN,然后另一个程序再去连接却常常会出现连不上的情况,但如果让程序按一下按纽才LISTEN,对后再连接的话就一定能连上,这是怎么回事呢我的这个问题的意义在于,有时我想方便一下用户,不用按"等待连接"这个按纽才LISTEN,而是一运行就LISTEN,结果就发现了这个BUG

解决方案 »

  1.   

    此非bug,多数是你的客户端程序的问题
      

  2.   

    如果服务端一来就listen,客户端发出connect请求时,服务端会发生一个connectrequst事件,你在这个时间里写入如下代码。if winsock1.state<>0 then winsock1.close:winsock1.accept requestID,这样就行了。
      

  3.   

    你所描述的没有碰到过。不是bug!
    就如楼上说的,3661512(.Net) 那样做就每错
      

  4.   

    if winsock1.state<>0 then winsock1.close:winsock1.accept requestID如果不用这行代码我怎么完成TCP连接呢
    我所说的情况下,如果一运行就LISTEN,就会出现有时连不上的情况
    但如果将winsock1.listen加在一个按纽上,点击才LISTEN,就肯定能连上如果没有winsock1.close:winsock1.accept requestID这行代码,那怎么样都连不上的
      

  5.   

    我的程序就是以起来就listen的并没有你所说的问题。
    在你的服务端起来后可以先看看你开辟的端口是否以处在监听状态可以用netstat -an在dos界面下查看一下,看后面的状态这一列的值。如果是Listening哪你的客户端就可以connect上。
      

  6.   

    '-------------------------------------------------------------------
    '-------------------------初始化部份--------------------------------
    '-------------------------------------------------------------------
    Private Sub Form_Load()
    On Error Resume Next
     Me.Show
      DoEvents
     lpos = 1
     SendPos = 1
     AddToTray Me, h
     Open "d:\聊天记录.txt" For Binary As #5 If GetUname = "" Then
       WritePrivateProfileString "运行", "昵称", "啊娜", "zhachat.ini"
        WritePrivateProfileString "运行", "头像", 19, "zhachat.ini"
     End If
     
      GetUname
      GetPic
      busond = LoadResData(101, "CUSTOM")
      WinList.Listen
    Bylist.Listen
    End SubPrivate Sub Command1_Click()
    '8361做听   8362做连
    WinStr.Close
    Bysend1.Close
    WinList.Close
    Bylist.Close
    WinStr.RemoteHost = Text1
    Bysend1.RemoteHost = Text1
    WinStr.Connect
    Bysend1.Connect
    End Sub
    服务端即客户端,客户端即服务端
      

  7.   

    搂主的问题我还未碰到,但是可以肯定,搂主的思路是没有问题的,无论是运行即listen还是要点击才listen应该都能正常连接到,可能是搂主的程序有问题!
      

  8.   

    在使用每一个方法之前,最好先检查一下状态。
    比如,在Listen之前先检查是否为sckClosed,
    在Senddata之前先检查是否为sckConnected
      

  9.   

    你在服务器端和客户端的程序窗口里都各加一个label和一个timer,然后实时显示每一个时刻的端口状态,这样有助于测试。
      

  10.   

    我建议楼主在调试时最好把 On Error Resume Next 注释掉,否则不知道有没有发生错误。
    另外,你是否在winsock控件的error事件里写上显示错误信息,因为连接不上时会触发error事件的,里面有error信息……