we are using a vb.net chat application which uses a TCP client to send message.it uses TCP port 25025.In some cases we get an error 10060 from client when sending message.Also the error is not continuous and is intermediate.In both PC windows firewall and antivirus firewall is off.To troubleshoot the problem i have tried telnet and netstat command and it worked without any error.what may be possible reasons for this error and how to troubleshoot?
2 Answers
these are client side and server side code. we get Error 10053 and 10061 also
Client side code
in our application when user clicks 'send' message' button this procedure will be called..
Public Sub SendMessageByPort(ByVal PCName As String, ByVal Port As Integer, ByVal Message As String)
Try
'add winsock control added
Dim TempWinClient As New 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
Server side code
'global variables
Dim TempWebDetails() As WebUpLoadDetails
Dim WinSocketArray As AxMSWinsockLib.AxWinsock() = New AxMSWinsockLib.AxWinsock() {}
Dim WinSocketName() As String
'''
''' 0-->Close,1-->Listen,2-->Others
'''
Dim WinSocketState() As Integer
Dim WinTimer() As Integer
'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