【问题标题】:client gives error 10060 when sending message to a TCP port客户端向 TCP 端口发送消息时出现错误 10060
【发布时间】:2014-08-10 02:01:51
【问题描述】:

我们正在使用一个使用 TCP 客户端发送消息的 vb.net 聊天应用程序。它使用 TCP 端口 25025。在某些情况下,我们在发送消息时从客户端收到错误 10060。此外,该错误不是连续的,并且是中间错误.在PC windows防火墙和防病毒防火墙都关闭。为了解决问题,我尝试了telnet和netstat命令,它没有任何错误。这个错误的可能原因是什么以及如何解决?

【问题讨论】:

    标签: vb.net windows tcp firewall tcpclient


    【解决方案1】:

    错误 10060 是“连接超时”。

    检查所有套接字/TCP 客户端/服务器对象的超时参数。 检查您是否没有在某处循环等待响应等。

    没有任何源代码或更多信息,其他诊断很困难!

    【讨论】:

      【解决方案2】:

      这些是客户端和服务器端代码。 我们也得到错误 10053 和 10061

      客户端代码
      在我们的应用程序中,当用户单击“发送”消息“按钮时,将调用此过程..
      Public Sub SendMessageByPort(ByVal PCName As String, ByVal Port As Integer, ByVal Message As String)
      试试
      '添加winsock控件添加
      将 TempWinClient 调暗为新的 AxMSWinsockLib.AxWinsock
      Me.Controls.Add(TempWinClient)
      AddHandler TempWinClient.CloseEvent, AddressOf TcpClient_CloseEvent
      AddHandler TempWinClient.ConnectEvent, AddressOf TcpClient_ConnectEvent
      AddHandler TempWinClient.DataArrival, AddressOf TcpClient_DataArrival
      AddHandler TempWinClient.Error, AddressOf TcpClient_Error

                  TempWinClient.RemoteHost = PCName       
                  TempWinClient.RemotePort = Port         
                  TempWinClient.Tag = Message     
                  TempWinClient.Connect()     
      
              Catch ex As Exception       
                  Write_toErrorLog(ex.StackTrace, Err.Description, Err.Number, Me.Name, "UpdateToServer")     
              End Try     
          End Sub     
      
      
       Private Sub TcpClient_ConnectEvent(ByVal sender As System.Object, ByVal e As System.EventArgs)     
              Try     
                  sender.SendData(sender.tag)         
              Catch ex As Exception       
                  Write_toErrorLog(ex.StackTrace, Err.Description, Err.Number, Me.Name, "WinClient_ConnectEvent")     
              End Try     
          End Sub     
      
      
      Private Sub TcpClient_DataArrival(ByVal sender As Object, ByVal e As AxMSWinsockLib.DMSWinsockControlEvents_DataArrivalEvent)       
              Try     
      
                  Dim TempStr As String = ""      
                  Dim MsgID As String = "" '      
                  Dim ErrorMsgstr As String = ""      
      
                  sender.GetData(TempStr)     
      
                  If TempStr.IndexOf("[ERROR]") >= 0 Then     
          MessageBox.Show("Error when Message send to " & sender.RemoteHost.ToString & " " & TempStr, "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error)    
                  ElseIf TempStr.IndexOf("[SUCCESS]") >= 0 Then       
                      MessageBox.Show("Message Sucssesfully sent to port", "Success", MessageBoxButtons.OK, MessageBoxIcon.Information)       
                  Else        
                      MessageBox.Show(TempStr, "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error)       
                  End If      
      
                  sender.Close()      
                  Me.Controls.Remove(sender)      
      
              Catch ex As Exception       
                  Write_toErrorLog(ex.StackTrace, Err.Description, Err.Number, Me.Name, "TcpClient_DataArrival")      
              End Try     
          End Sub     
      
       Private Sub TcpClient_CloseEvent(ByVal sender As Object, ByVal e As System.EventArgs)      
              Try     
                  sender.Close()      
                  Me.Controls.Remove(sender)      
              Catch ex As Exception       
                  Write_toErrorLog(ex.StackTrace, Err.Description, Err.Number, Me.Name, "WinClient_CloseEvent")       
              End Try     
          End Sub     
      
      
      
        Private Sub TcpClient_Error(ByVal sender As Object, ByVal e As AxMSWinsockLib.DMSWinsockControlEvents_ErrorEvent)     
              Try     
                  Dim retryCnt As Integer     
                  Dim MessageData As String = sender.tag      
                  Dim RetryProcess As Boolean     
                  Dim ErrorDetails As String = "Not Uploaded to Web because of connection failure in network " & sender.RemoteHost.ToString & ". DataSent:" & MessageData     
      
                  'for this error we tried three times        
                  If InStr(e.description, "Connection is aborted due to timeout or other failure", CompareMethod.Text) > 0 Then       
                      retryCnt = Val(getArgColVal("RetryProcess", MessageData))       
                      If retryCnt < 3 Then        
                          MessageData = Replace(MessageData, "#RetryProcess$" & retryCnt & "|", "", , , CompareMethod.Text)       
                          MessageData = MessageData & "#RetryProcess$" & (retryCnt + 1) & "|"     
                          RetryProcess = True     
                      End If      
                  End If      
      
      
                  If RetryProcess = True Then 'retry sending message to port on error     
                      Call SendMessageByPort(sender.RemoteHost.ToString, sender.RemotePort, MessageData)      
                  Else        
                          Call Write_toErrorLog("", e.description, e.number, Me.Name, "TcpClient_Error", True, , , ErrorDetails) '        
                          Call MsgWinman("785", "sender" & MsgVarSep & "description" & MsgVarSep & "number", sender.RemoteHost.ToString & MsgVarSep & e.description & MsgVarSep & e.number)       
                      End If      
                  End If      
      
                  sender.Close()      
                  Me.Controls.Remove(sender)      
              Catch ex As Exception       
                  Write_toErrorLog(ex.StackTrace, Err.Description, Err.Number, Me.Name, "TcpClient_Error") 'sod 19.9.13'Write_toErrorLog(ex.StackTrace, Err.Description, Err.Number, Me.Name, "WinClient_Error")      
              End Try     
          End Sub     
      

      服务器端代码
      '全局变量
      将 TempWebDetails() 调暗为 WebUpLoadDetails
      将 WinSocketArray 调暗为 AxMSWinsockLib.AxWinsock() = 新 AxMSWinsockLib.AxWinsock() {}
      将 WinSocketName() 调暗为字符串
      '''
      ''' 0-->关闭,1-->收听,2-->其他
      '''
      将 WinSocketState() 调暗为整数
      将 WinTimer() 调暗为整数

      'frmpaydet is form name     
       Private Sub frmPayDet_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown      
              Try     
                          LoadNewSocket()     
                          ListenFreeSocket()      
                          Me.Hide()       
              Catch ex As Exception       
                  Write_toErrorLog(ex.StackTrace, Err.Description, Err.Number, Me.Text, "frmPayDet_Shown")        
              End Try     
          End Sub     
      
      
       Private Sub LoadNewSocket()        
              Dim IsVisible As Boolean = Me.Visible       
              Try     
                  Me.Visible = True       
                  Dim i As Integer = WinSocketArray.GetUpperBound(0) + 1      
                  ReDim Preserve WinSocketArray(i)        
                  ReDim Preserve WinSocketState(i)        
                  ReDim Preserve WinSocketName(i)     
                  ReDim Preserve WinTimer(i)      
                  WinSocketArray(i) = New AxMSWinsockLib.AxWinsock        
                  WinSocketArray(i).Name = "WinServer" & i        
                  WinSocketName(i) = WinSocketArray(i).Name       
      
                  Me.Controls.Add(WinSocketArray(i))      
                  AddHandler WinSocketArray(i).CloseEvent, AddressOf tcpServer_CloseEvent     
                  AddHandler WinSocketArray(i).ConnectionRequest, AddressOf tcpServer_ConnectionRequest       
                  AddHandler WinSocketArray(i).DataArrival, AddressOf tcpServer_DataArrival       
                  AddHandler WinSocketArray(i).Error, AddressOf tcpServer_Error       
                  ToolSeverCount.Text = " | WinSocket Count is " & i + 1 & " |"       
      
              Catch ex As Exception       
                  Write_toErrorLog(ex.StackTrace, Err.Description, Err.Number, Me.Name, "LoadNewSocket")      
              Finally     
                  Me.Visible = IsVisible      
              End Try     
          End Sub     
      
          Private Sub ListenFreeSocket()      
              On Error GoTo ListenFreeSocket_eh       
      
              Dim ListenFlg As Boolean        
              Timer1.Enabled = True       
              ToolServer.Text = ""        
      
              If WinSocketArray.Length > 0 Then       
                  For i As Integer = 0 To WinSocketState.GetUpperBound(0)     
                      If WinSocketState(i) = 1 Then       
                          ToolServer.Text = " | " & WinSocketArray(i).Name & " Sever Listen at Port " & WinSocketArray(i).LocalPort & " | "       
                          ListenFlg = True        
                          Exit For        
                      End If      
                  Next        
      
                  'if not found then listen socket which is free      
                  If ListenFlg = False Then       
                      For i As Integer = 0 To WinSocketState.GetUpperBound(0)     
                          If WinSocketState(i) = 0 Then       
                              WinSocketArray(i).LocalPort = Split("PC110:8000", ":")(1)       
                              WinSocketArray(i).Listen()      
                              ToolServer.Text = " | " & WinSocketArray(i).Name & " Sever Listen at Port " & WinSocketArray(i).LocalPort & " | "       
                              WinSocketState(i) = 1       
                              If i = WinSocketState.GetUpperBound(0) Then LoadNewSocket()     
                              ListenFlg = True        
                              Exit For        
                          End If      
                      Next        
                  End If      
              End If      
      
              If ListenFlg = False Then       
                  'Enable Timer       
                  LoadNewSocket()     
                  Timer1.Enabled = True       
              Else        
                  'Disable Timer      
                  Timer1.Enabled = False      
              End If      
      
              Exit Sub        
      ListenFreeSocket_eh:        
              'Write_toErrorLog_old(Err.Description, Err.Number, Me.Name, "ListenFreeSocket")'this line must be commented     
      End Sub     
      
      
      Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick     
              Try     
                  Call ListenFreeSocket()     
              Catch ex As Exception       
                  Write_toErrorLog(ex.StackTrace, Err.Description, Err.Number, Me.Name, "Timer1_Tick")        
              End Try     
          End Sub     
      
      
      Private Sub tcpServer_ConnectionRequest(ByVal sender As Object, ByVal e As AxMSWinsockLib.DMSWinsockControlEvents_ConnectionRequestEvent) ' Handles tcpServer1.ConnectionRequest, tcpServer2.ConnectionRequest, tcpServer3.ConnectionRequest, tcpServer4.ConnectionRequest, tcpServer5.ConnectionRequest, tcpServer0.ConnectionRequest      
              Try     
                  CloseWinSocket(sender.name)     
                  sender.Accept(e.requestID)      
                  ConnectWinSocket(sender.name)       
                  ListenFreeSocket()      
      
                  ToolStatus.Text = " | " & sender.RemoteHostIP & " IP Address Accepted | "       
      
              Catch ex As Exception       
                  ToolServer.Text = ex.Message & " Please Call Coding Team"       
              End Try     
          End Sub     
      
      
      
       Private Sub CloseWinSocket(ByVal SocketName As String)     
              Try     
                  If SocketName.Trim <> "" Then       
                      Dim i As Integer = Array.IndexOf(WinSocketName, SocketName)     
                      WinSocketArray(i).Close()       
                      WinSocketState(i) = 0       
                      WinTimer(i) = 0     
                  Else        
                      If Not WinSocketState Is Nothing Then       
                          For i As Integer = 0 To WinSocketState.GetUpperBound(0)     
                              If WinSocketState(i) <> 0 Then      
                                  WinSocketArray(i).Close()       
                                  WinSocketState(i) = 0       
                                  WinTimer(i) = 0     
                              End If      
                          Next        
                      End If      
                  End If      
      
              Catch ex As Exception       
                  Write_toErrorLog(ex.StackTrace, Err.Description, Err.Number, Me.Name, "CloseWinSocket")     
              End Try     
      
          End Sub     
      
      
       Private Sub ConnectWinSocket(ByVal SocketName As String)       
              Try     
                  Dim i As Integer = Array.IndexOf(WinSocketName, SocketName)     
                  WinSocketState(i) = 2       
              Catch ex As Exception       
                  Write_toErrorLog(ex.StackTrace, Err.Description, Err.Number, Me.Name, "ConnectWinSocket")       
              End Try     
          End Sub     
      
      
      Private Sub tcpServer_DataArrival(ByVal sender As Object, ByVal e As AxMSWinsockLib.DMSWinsockControlEvents_DataArrivalEvent)       
              Try     
                  Dim TempStr As String = ""      
                  Dim ReplyMessage As String = ""     
                  sender.GetData(TempStr)     
      
                  If TempStr Is Nothing Then TempStr = ""     
      
                  If TempStr.Trim <> "" Then      
          ''some process is done  
          'ReplyMessage string assigned proper reply string   
          sender.SendData(ReplyMessage)   
                  Else        
                      CloseWinSocket(sender.name)     
                      ToolStatus.Text = " | No Data Sent to IPAddress:- " & sender.RemoteHostIP & " | "       
                  End If      
      
              Catch ex As Exception       
                  Write_toErrorLog(ex.StackTrace, Err.Description, Err.Number, Me.Name, "tcpServer_DataArrival")      
              End Try     
          End Sub     
      
      
       Private Sub tcpServer_Error(ByVal sender As Object, ByVal e As AxMSWinsockLib.DMSWinsockControlEvents_ErrorEvent)      
              Try     
                  ToolServer.Text = e.description & " Please Call Coding Team"        
                  CloseWinSocket(sender.name)     
                  ListenFreeSocket()      
                  ToolServer.Text = "Sever Listen on Local Port " & sender.LocalPort()        
      
              Catch ex As Exception       
                  ToolServer.Text = ex.Message & " Please Call Coding Team"       
              End Try     
          End Sub     
      
      
      Private Sub tcpServer_CloseEvent(ByVal sender As Object, ByVal e As System.EventArgs)       
              Try     
                  CloseWinSocket(sender.name)     
                  ListenFreeSocket()      
              Catch ex As Exception       
                  ToolServer.Text = ex.Message & " Please Call Coding Team"       
              End Try     
             End sub
      

      【讨论】:

        猜你喜欢
        • 2018-03-08
        • 1970-01-01
        • 2019-01-26
        • 1970-01-01
        • 2015-11-05
        • 1970-01-01
        • 1970-01-01
        • 2017-05-03
        • 2015-04-17
        相关资源
        最近更新 更多