我正在嘗試使用套接字進行客戶端 - 服務器連接。如果我的服務器重新啓動,如何將客戶端套接字重新連接到我的服務器
它基本上工作得很好;只有一個問題是,當我關閉並重新打開我的服務器計算機上的服務器的客戶端將無法重新連接
這是我的客戶端代碼:
Imports System.Net.Sockets
Imports System.Threading
Imports System.IO
Public Class Form1
Public Delegate Sub MessageReceivedEventHandler(ByVal sender As Object, ByVal e As MessageReceivedEventArgs)
Public Delegate Sub ClientConnectedEventHandler(ByVal sender As Object, ByVal e As ClientConnectedEventArgs)
Public Event MessageReceived As MessageReceivedEventHandler
Public Event ClientConnected As ClientConnectedEventHandler
Public Buffer As Byte()
Public Shared Client As TcpClient
Dim Port As Integer = 5050
Dim host As String = "computer name"
Dim KEY As String = "mykey"
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim T As New Thread(AddressOf run)
T.Start()
End Sub
Private Sub run()
' Connect to the server'
Client = New TcpClient(host, Port)
Dim T As New Thread(AddressOf Receiver, 10)
T.Start()
End Sub
Public Shared Function StringToByte(ByVal STR As String) As Byte()
Return System.Text.Encoding.Default.GetBytes(STR)
End Function
Public Shared Function ByteToString(ByVal BYS As Byte()) As String
Return System.Text.Encoding.Default.GetString(BYS)
End Function
Public Sub Data(ByVal Sender As Object, ByVal Data As MessageReceivedEventArgs) Handles Me.MessageReceived
Dim info As Byte() = Data.Message
Dim Client As Socket = Data.clientSocket
Dim ID As String = Data.Sender
Dim Arr As String() = Split(System.Text.Encoding.Default.GetString(info), "mykey")
Try
Select Case Arr(0)
Case "MSG"
MsgBox(Arr(1))
End Select
Catch ex As Exception
MsgBox("Error Detected in Data Client :" & ex.Message)
End Try
End Sub
Sub Receiver()
Dim M As New MemoryStream
Try
If Client.Available > 0 Then
ReDim Buffer(Client.Available - 1)
Client.Client.Receive(Buffer, 0, Buffer.Length, SocketFlags.None)
M.Write(Buffer, 0, Buffer.Length)
If System.Text.Encoding.Default.GetString(M.ToArray).Contains("EOF") Then
Dim Data As Byte() = (M.ToArray).Remove(ConfigTcp.ENDOFPACKET)
Dim Msg As New MessageReceivedEventArgs
Msg.Message = Data
Msg.clientSocket = Client.Client
Msg.Sender = Client.Client.Handle.ToString()
RaiseEvent MessageReceived(Me, Msg)
M.Dispose()
M = New MemoryStream
End If
End If
Thread.Sleep(1)
Catch ex As Exception
MsgBox("Error Detected :" & ex.Message)
End Try
End Sub
Public Shared Sub Send(ByVal sock As Socket, ByVal s As String)
Send(sock, System.Text.Encoding.UTF8.GetBytes(s))
End Sub
Private Shared Sub Send(ByVal sock As Socket, ByVal b As Byte())
Try
Dim Memory As MemoryStream = New MemoryStream
Dim CB As Byte() = b
Memory.Write(CB, 0, CB.Length)
Memory.Write(ConfigTcp.ENDOFPACKET, 0, ConfigTcp.ENDOFPACKET.Length)
sock.Send(Memory.ToArray, 0, Memory.Length, SocketFlags.None)
Memory.Dispose()
Catch x As Exception
End Try
End Sub
End Class
Public Class MessageReceivedEventArgs
Inherits EventArgs
Public Sender As String
Public clientSocket As Socket
Public Message As Byte()
End Class
Public Class ClientConnectedEventArgs
Inherits EventArgs
Public clientID As String
Public clientSocket As Socket
End Class
對不起,我是菜鳥,但什麼是處理斷開 – ranger003
就像是說最好的方式,在你嘗試catch語句,在適用情況下,調用DoReconnect() –