public void Dispose() { try { if (IsConnected) { server?.DisconnectClient(client); } } catch (Exception) { // ignored } try { server?.Dispose(); } catch (Exception) { // ignored } }
void DisconnectClientTest(TcpClient client, TcpServer server, IPEndPoint endPoint) { ServerConnectedEventArgs = null; ServerDisconnectedEventArgs = null; ClientConnectedEventEventArgs = null; Assert.IsNull(ServerConnectedEventArgs); Assert.IsNull(ServerDisconnectedEventArgs); Assert.IsNull(ClientConnectedEventEventArgs); client.Start(endPoint); var waitStart = DateTime.Now; while (ServerConnectedEventArgs == null || ClientConnectedEventEventArgs == null) { Thread.Sleep(1); var delta = DateTime.Now - waitStart; if (delta.TotalSeconds > 5) { Assert.Fail("Wait Timeout"); } } Assert.IsNotNull(ClientConnectedEventEventArgs); Assert.IsNotNull(ServerConnectedEventArgs); Assert.IsNull(ServerDisconnectedEventArgs); Assert.AreEqual(endPoint, ServerConnectedEventArgs.LocalEndPoint); Assert.AreEqual(endPoint, ClientConnectedEventEventArgs.RemoteEndPoint); var clientLocalEp = ClientConnectedEventEventArgs.LocalEndPoint; var remoteIp = ServerConnectedEventArgs.RemoteEndPoint; var localIp = ServerConnectedEventArgs.LocalEndPoint; ServerConnectedEventArgs = null; ServerDisconnectedEventArgs = null; Assert.IsNull(ServerConnectedEventArgs); Assert.IsNull(ServerDisconnectedEventArgs); server.DisconnectClient((IPEndPoint)localIp, (IPEndPoint)remoteIp); waitStart = DateTime.Now; while (!Equals(ServerDisconnectedEventArgs?.RemoteEndPoint, clientLocalEp)) { Thread.Sleep(1); var delta = DateTime.Now - waitStart; if (delta.TotalSeconds > 5) { Assert.Fail("Wait Timeout"); } } Assert.IsNotNull(ServerDisconnectedEventArgs); Assert.AreEqual(endPoint, ServerDisconnectedEventArgs.LocalEndPoint); Assert.AreEqual(remoteIp, ServerDisconnectedEventArgs.RemoteEndPoint); //Wait before client will be connected once again. waitStart = DateTime.Now; ClientConnectedEventEventArgs = null; while (ServerConnectedEventArgs == null || ClientConnectedEventEventArgs == null) { Thread.Sleep(1); var delta = DateTime.Now - waitStart; if (delta.TotalSeconds > 5) { Assert.Fail("Wait Timeout"); } } Assert.IsNotNull(ClientConnectedEventEventArgs); Assert.AreEqual(endPoint, ClientConnectedEventEventArgs.RemoteEndPoint); clientLocalEp = ClientConnectedEventEventArgs.LocalEndPoint; remoteIp = ServerConnectedEventArgs.RemoteEndPoint; //Disconnect client. ServerDisconnectedEventArgs = null; client.Stop(); waitStart = DateTime.Now; while (!Equals(ServerDisconnectedEventArgs?.RemoteEndPoint, clientLocalEp)) { Thread.Sleep(1); var delta = DateTime.Now - waitStart; if (delta.TotalSeconds > 5) { Assert.Fail($"Wait Timeout: expected{ServerDisconnectedEventArgs?.RemoteEndPoint} actual {clientLocalEp}"); } } Assert.IsNotNull(ServerDisconnectedEventArgs); Assert.AreEqual(endPoint, ServerDisconnectedEventArgs.LocalEndPoint); Assert.AreEqual(remoteIp, ServerDisconnectedEventArgs.RemoteEndPoint); }
public void DisconnectGuestSocket(Socket other) //(내가 호스트일때) 특정 게스트와 연결을 끊는다. { m_host.DisconnectClient(other); }
static void Main(string[] args) { InitializeServer(); _Server.Start(); Console.WriteLine("Listening on tcp://127.0.0.1:8000"); while (_RunForever) { Console.Write("Command [? for help]: "); string userInput = Console.ReadLine(); if (String.IsNullOrEmpty(userInput)) { continue; } if (userInput.Equals("?")) { Console.WriteLine("-- Available Commands --"); Console.WriteLine(""); Console.WriteLine(" cls Clear the screen"); Console.WriteLine(" q Quit the program"); Console.WriteLine(" list List connected clients"); Console.WriteLine(" send [ipport] [data] Send data to a specific client"); Console.WriteLine(" read [ipport] [count] Read [count] bytes from a specific client"); Console.WriteLine(" kick [ipport] Disconnect a specific client from the server"); Console.WriteLine(" dispose Dispose of the server"); Console.WriteLine(" start Start the server (running: " + (_Server != null ? _Server.IsListening.ToString() : "false") + ")"); Console.WriteLine(" stats Retrieve statistics"); Console.WriteLine(""); continue; } if (userInput.Equals("c") || userInput.Equals("cls")) { Console.Clear(); continue; } if (userInput.Equals("q")) { _RunForever = false; break; } if (userInput.Equals("list")) { List <string> clients = _Server.GetClients().ToList(); if (clients != null) { Console.WriteLine("Clients: " + clients.Count); foreach (string curr in clients) { Console.WriteLine(" " + curr); } } else { Console.WriteLine("(null)"); } } if (userInput.StartsWith("send ")) { string[] parts = userInput.Split(new char[] { ' ' }, 3, StringSplitOptions.RemoveEmptyEntries); string ipPort = parts[1]; string data = parts[2]; _Server.Send(ipPort, data); } if (userInput.StartsWith("read ")) { string[] parts = userInput.Split(new char[] { ' ' }, 3, StringSplitOptions.RemoveEmptyEntries); string ipPort = parts[1]; int count = Convert.ToInt32(parts[2]); ReadResult rr = _Server.Read(ipPort, count); if (rr.Status == ReadResultStatus.Success) { Console.WriteLine("Retrieved " + rr.BytesRead + " bytes: " + Encoding.UTF8.GetString(rr.Data)); } else { Console.WriteLine("Non-success status: " + rr.Status.ToString()); } } if (userInput.StartsWith("kick ")) { string[] parts = userInput.Split(new char[] { ' ' }, 2, StringSplitOptions.RemoveEmptyEntries); string ipPort = parts[1]; _Server.DisconnectClient(ipPort); } if (userInput.Equals("dispose")) { _Server.Dispose(); } if (userInput.Equals("start")) { InitializeServer(); _Server.Start(); } if (userInput.Equals("stats")) { Console.WriteLine(_Server.Stats); } } }
static void Main(string[] args) { _ListenerIp = InputString("Listener IP:", "127.0.0.1", false); _ListenerPort = InputInteger("Listener Port:", 9000, true, false); _Ssl = InputBoolean("Use SSL:", false); if (_Ssl) { _PfxFilename = InputString("PFX Certificate File:", "simpletcp.pfx", false); _PfxPassword = InputString("PFX File Password:"******"simpletcp", false); } _Server = new TcpServer(_ListenerIp, _ListenerPort, _Ssl, _PfxFilename, _PfxPassword); _Server.ClientConnected += ClientConnected; _Server.ClientDisconnected += ClientDisconnected; _Server.DataReceived += DataReceived; _Server.IdleClientTimeoutSeconds = 10; _Server.MutuallyAuthenticate = false; _Server.AcceptInvalidCertificates = true; _Server.Logger = Logger; _Server.Start(); while (_RunForever) { string userInput = InputString("Command [? for help]:", null, false); switch (userInput) { case "?": Menu(); break; case "q": case "Q": _RunForever = false; break; case "c": case "C": case "cls": Console.Clear(); break; case "list": ListClients(); break; case "send": Send(); break; case "remove": Console.Write("IP:Port: "); string ipPort = Console.ReadLine(); _Server.DisconnectClient(ipPort); break; case "dispose": _Server.Dispose(); break; case "stats": Console.WriteLine(_Server.Stats.ToString()); break; case "stats reset": _Server.Stats.Reset(); break; } } }
void DisconnectClientTest(TcpClient client, TcpServer server, IPEndPoint endPoint, string serverName, X509Certificate clientCertificate, SslProtocols enabledSslProtocols, bool checkCertificateRevocation, EncryptionPolicy encryptionPolicy) { ServerConnectedEventArgs = null; ServerDisconnectedEventArgs = null; ClientConnectedEventEventArgs = null; Assert.IsNull(ServerConnectedEventArgs); Assert.IsNull(ServerDisconnectedEventArgs); Assert.IsNull(ClientConnectedEventEventArgs); client.Start(endPoint, serverName, clientCertificate, enabledSslProtocols, checkCertificateRevocation, encryptionPolicy); var waitStart = DateTime.Now; while (ServerConnectedEventArgs == null || ClientConnectedEventEventArgs == null) { Thread.Sleep(1); var delta = DateTime.Now - waitStart; if (delta.TotalSeconds > 5) { Assert.Fail("Wait Timeout"); } } Assert.IsNotNull(ClientConnectedEventEventArgs); Assert.IsNotNull(ServerConnectedEventArgs); Assert.IsNull(ServerDisconnectedEventArgs); Assert.AreEqual(endPoint, ServerConnectedEventArgs.LocalEndPoint); Assert.AreEqual(endPoint, ClientConnectedEventEventArgs.RemoteEndPoint); var clientLocalEp = ClientConnectedEventEventArgs.LocalEndPoint; var remoteIp = ServerConnectedEventArgs.RemoteEndPoint; var localIp = ServerConnectedEventArgs.LocalEndPoint; ServerConnectedEventArgs = null; ServerDisconnectedEventArgs = null; Assert.IsNull(ServerConnectedEventArgs); Assert.IsNull(ServerDisconnectedEventArgs); server.DisconnectClient((IPEndPoint)localIp, (IPEndPoint)remoteIp); waitStart = DateTime.Now; while (!Equals(ServerDisconnectedEventArgs?.RemoteEndPoint, clientLocalEp)) { Thread.Sleep(1); var delta = DateTime.Now - waitStart; if (delta.TotalSeconds > 5) { Assert.Fail("Wait Timeout"); } } Assert.IsNotNull(ServerDisconnectedEventArgs); Assert.AreEqual(endPoint, ServerDisconnectedEventArgs.LocalEndPoint); Assert.AreEqual(remoteIp, ServerDisconnectedEventArgs.RemoteEndPoint); //Wait before client will be connected once again. waitStart = DateTime.Now; ClientConnectedEventEventArgs = null; while (ServerConnectedEventArgs == null || ClientConnectedEventEventArgs == null) { Thread.Sleep(1); var delta = DateTime.Now - waitStart; if (delta.TotalSeconds > 5) { Assert.Fail("Wait Timeout"); } } Assert.IsNotNull(ClientConnectedEventEventArgs); Assert.AreEqual(endPoint, ClientConnectedEventEventArgs.RemoteEndPoint); clientLocalEp = ClientConnectedEventEventArgs.LocalEndPoint; remoteIp = ServerConnectedEventArgs.RemoteEndPoint; //Disconnect client. ServerDisconnectedEventArgs = null; client.Stop(); waitStart = DateTime.Now; while (!Equals(ServerDisconnectedEventArgs?.RemoteEndPoint, clientLocalEp)) { Thread.Sleep(1); var delta = DateTime.Now - waitStart; if (delta.TotalSeconds > 5) { Assert.Fail($"Wait Timeout: expected{ServerDisconnectedEventArgs?.RemoteEndPoint} actual {clientLocalEp}"); } } Assert.IsNotNull(ServerDisconnectedEventArgs); Assert.AreEqual(endPoint, ServerDisconnectedEventArgs.LocalEndPoint); Assert.AreEqual(remoteIp, ServerDisconnectedEventArgs.RemoteEndPoint); }