检查客户端在 tcp 连接中关闭
Checking client closed in tcp connection
我对使用套接字和 TCP 还很陌生,在尝试确定我的客户端和服务器之间的连接是否已关闭时弄得一团糟。
我目前的方法是在结束连接时将字节数组的第一个元素(b(10) 仅用于写入和读取流)更改为 0x0 服务器端,然后检查第一个字节是否数组的0x0 服务端看客户端是否关闭
我对此非常不满意,理想情况下只想能够检查它的连接,但我找不到任何这样做的方法。
现在这只是用于从客户端发送几个字符的字符串并在服务器上打印出来window,但理想情况下我想在我了解更多我的内容时从这里开始正在做。
服务器:
While True
client.GetStream.Read(b, 0, 10)
If b(0) <> Convert.ToByte(0) Then
For i = 0 To 10
Console.Write(Convert.ToChar(b(i)))
Next i
Console.Write(vbCrLf)
Else
Exit While
End If
End While
客户:
If aString = "y" Then
'Create a TcpClient.
client = New TcpClient(localAddr.ToString, port)
Do
Array.Clear(b, 0, 10)
b(0) = 1
Console.Write("Ready to quit? (y/message)")
aString = Console.ReadLine()
If aString <> "y" Then
For i = 0 To Len(aString.ToCharArray()) - 1
Console.WriteLine(i)
b(i) = Convert.ToByte(aString.ToCharArray.GetValue(i))
Next i
client.GetStream.Write(b, 0, 10)
End If
Loop Until aString = "y"
b(0) = Convert.ToByte(0)
client.GetStream.Write(b, 0, 10)
client.GetStream.Close()
client.Close()
End If
任何人都可以提供有关如何以不那么混乱的方式执行此操作的详细信息,或者为我提供一些可以提供帮助的资源吗?
查看 How to check the connection state of a TCP Server (Socket) with TCP Client in VB.NET 的答案,我添加了以下函数:
Public Function IsConnected(ByRef client As TcpClient) As Boolean
Try
Return Not (client.Client.Poll(-1, SelectMode.SelectRead) _
AndAlso client.Available = 0)
Catch ex As Exception
Return False
End Try
End Function
将服务器调整为:
While True
If IsConnected(client) Then
client.GetStream.Read(b, 0, 10)
For i = 0 To 10
Console.Write(Convert.ToChar(b(i)))
Next i
Console.Write(vbCrLf)
Else
Exit While
End If
End While
而客户:
If aString = "y" Then
'Create a TcpClient.
client = New TcpClient(localAddr.ToString, port)
Do
Array.Clear(b, 0, 10)
Console.Write("Ready to quit? (y/message)")
aString = Console.ReadLine()
If aString <> "y" Then
For i = 0 To Len(aString.ToCharArray()) - 1
Console.WriteLine(i)
b(i) = Convert.ToByte(aString.ToCharArray.GetValue(i))
Next i
client.GetStream.Write(b, 0, 10)
End If
Loop Until aString = "y"
client.GetStream.Close()
client.Close()
End If
现在一切正常。
我对使用套接字和 TCP 还很陌生,在尝试确定我的客户端和服务器之间的连接是否已关闭时弄得一团糟。
我目前的方法是在结束连接时将字节数组的第一个元素(b(10) 仅用于写入和读取流)更改为 0x0 服务器端,然后检查第一个字节是否数组的0x0 服务端看客户端是否关闭
我对此非常不满意,理想情况下只想能够检查它的连接,但我找不到任何这样做的方法。
现在这只是用于从客户端发送几个字符的字符串并在服务器上打印出来window,但理想情况下我想在我了解更多我的内容时从这里开始正在做。
服务器:
While True
client.GetStream.Read(b, 0, 10)
If b(0) <> Convert.ToByte(0) Then
For i = 0 To 10
Console.Write(Convert.ToChar(b(i)))
Next i
Console.Write(vbCrLf)
Else
Exit While
End If
End While
客户:
If aString = "y" Then
'Create a TcpClient.
client = New TcpClient(localAddr.ToString, port)
Do
Array.Clear(b, 0, 10)
b(0) = 1
Console.Write("Ready to quit? (y/message)")
aString = Console.ReadLine()
If aString <> "y" Then
For i = 0 To Len(aString.ToCharArray()) - 1
Console.WriteLine(i)
b(i) = Convert.ToByte(aString.ToCharArray.GetValue(i))
Next i
client.GetStream.Write(b, 0, 10)
End If
Loop Until aString = "y"
b(0) = Convert.ToByte(0)
client.GetStream.Write(b, 0, 10)
client.GetStream.Close()
client.Close()
End If
任何人都可以提供有关如何以不那么混乱的方式执行此操作的详细信息,或者为我提供一些可以提供帮助的资源吗?
查看 How to check the connection state of a TCP Server (Socket) with TCP Client in VB.NET 的答案,我添加了以下函数:
Public Function IsConnected(ByRef client As TcpClient) As Boolean
Try
Return Not (client.Client.Poll(-1, SelectMode.SelectRead) _
AndAlso client.Available = 0)
Catch ex As Exception
Return False
End Try
End Function
将服务器调整为:
While True
If IsConnected(client) Then
client.GetStream.Read(b, 0, 10)
For i = 0 To 10
Console.Write(Convert.ToChar(b(i)))
Next i
Console.Write(vbCrLf)
Else
Exit While
End If
End While
而客户:
If aString = "y" Then
'Create a TcpClient.
client = New TcpClient(localAddr.ToString, port)
Do
Array.Clear(b, 0, 10)
Console.Write("Ready to quit? (y/message)")
aString = Console.ReadLine()
If aString <> "y" Then
For i = 0 To Len(aString.ToCharArray()) - 1
Console.WriteLine(i)
b(i) = Convert.ToByte(aString.ToCharArray.GetValue(i))
Next i
client.GetStream.Write(b, 0, 10)
End If
Loop Until aString = "y"
client.GetStream.Close()
client.Close()
End If
现在一切正常。