Починин Socket

This commit is contained in:
2025-03-31 20:09:45 +03:00
parent ffc309ce21
commit a35d7fdb97
3 changed files with 41 additions and 23 deletions

View File

@ -31,6 +31,7 @@ namespace DroneSimulator
public byte[] buffer = new byte[size];
}
private bool Connected = false;
private Socket? ServerSocket = null;
private ServerData DataServer = new ServerData();
@ -43,10 +44,11 @@ namespace DroneSimulator
public ClientState Connect(string Addr, int Port, ClientCallback Connection, ClientCallback Receive)
{
if (ServerSocket != null)
if (Connected)
{
ServerSocket.Close();
ServerSocket = null;
try { ServerSocket?.Shutdown(SocketShutdown.Both); } catch { }
ServerSocket?.Close();
Connected = false;
return ClientState.Stop;
}
@ -56,24 +58,26 @@ namespace DroneSimulator
IPEndPoint ep = new IPEndPoint(IPAddress.Parse(Addr), Port);
ServerSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
try
{
ServerSocket.Connect(ep);
}
catch { ServerSocket.Close(); ServerSocket = null; return ClientState.Error; }
try { ServerSocket.Connect(ep); }
catch { ServerSocket.Close(); return ClientState.Error; }
Connected = true;
ConnectionCallback(new ConnectData { Connect = true, Server = ServerSocket });
ReceiveData receiveData = new ReceiveData { Buffer = DataServer.buffer, Size = ServerData.size, Server = ServerSocket };
ServerSocket.BeginReceive(DataServer.buffer, 0, ServerData.size, 0, new AsyncCallback(ReadCallback), receiveData);
try { ServerSocket.BeginReceive(DataServer.buffer, 0, ServerData.size, 0, new AsyncCallback(ReadCallback), receiveData); }
catch { }
return ClientState.Connected;
}
public void Close()
{
try { ServerSocket?.Shutdown(SocketShutdown.Both); } catch { }
ServerSocket?.Close();
ServerSocket = null;
Connected = false;
}
public void ReadCallback(IAsyncResult ar)
@ -82,23 +86,23 @@ namespace DroneSimulator
if (cd == null) return;
int bytes = 0;
try { bytes = ServerSocket.EndReceive(ar); }
catch { }
try { bytes = ServerSocket.EndReceive(ar); } catch { }
if (bytes == 0)
{
ServerSocket?.Close();
if (ServerSocket != null) ConnectionCallback(new ConnectData { Connect = false, Server = null });
Connected = false;
ServerSocket = null;
if (ServerSocket != null) ConnectionCallback(new ConnectData { Connect = false, Server = null });
return;
}
ReceiveCallback(new ReceiveData { Buffer = cd.Buffer, Size = bytes, Server = ServerSocket });
ServerSocket?.BeginReceive(cd.Buffer, 0, ServerData.size, 0, new AsyncCallback(ReadCallback), cd);
try { ServerSocket?.BeginReceive(cd.Buffer, 0, ServerData.size, 0, new AsyncCallback(ReadCallback), cd); }
catch { }
}
}
}