/// <summary> /// 終止連接 Disconnect remote service. /// </summary> public void Disconnect() { if (ClientRequest != null) { // close communication object .. ClientRequest.Close(); } }
private void TestInternal(string host, int port) { var client = new TcpClientSocket(); client.Resolve(host, port.ToString(), (args1) => { if (!args1.Successful) { Console.WriteLine("failed to resolve host {0}", host); return; } Console.WriteLine("host resolved to {0}", args1.Data); client.Connect(args1.Data[0], (args2) => { if (!args2.Successful) { Console.WriteLine("connection failed"); return; } Console.WriteLine("connection to {0} successful", args1.Data); client.Close(false, (args3) => { if (!args3.Successful) { Console.WriteLine("failed to close connection"); return; } Console.WriteLine("connection closed"); }); }); }); }
public void TcpTest() { object monitor = new object(); lock (monitor) { bool clientMaySend = false; int payloadCounter = 0; Console.WriteLine("Starting server"); HashSet <Socket> connectedSockets = new HashSet <Socket>(); TcpServerSocket server = null; server = new TcpServerSocket(socket => { lock (monitor) { lock (connectedSockets) { Console.WriteLine("Server received client's connection"); connectedSockets.Add(socket); } } }, (sender, buffer, size) => { lock (monitor) { Console.WriteLine("SRec " + size); server.Send(sender, buffer, 0, size); } }, socket => { lock (connectedSockets) { Console.WriteLine("Server lost connection to client"); connectedSockets.Remove(socket); } }, connectedSockets, 1, Port); byte[] sendBuffer = new byte[DataSize]; _random.NextBytes(sendBuffer); Console.WriteLine("Starting client"); TcpClientSocket client = null; client = new TcpClientSocket(() => { lock (monitor) { Console.WriteLine("Client connected to server"); if (clientMaySend) { Console.WriteLine("Client not waiting for main thread"); } else { Console.WriteLine("Client waiting for main thread"); Monitor.Wait(monitor); } Console.WriteLine("Client sending first data"); client.Send(sendBuffer, 0, sendBuffer.Length); } }, error => { lock (monitor) { Console.WriteLine("Client failed to connect to server: " + error); } }, (buffer, size) => { lock (monitor) { Console.WriteLine("CRec " + size); AssertArrayContentsEqualInFirstArrayLengthRange(sendBuffer, buffer); if (++payloadCounter == PayloadCount) { Monitor.Pulse(monitor); } else { _random.NextBytes(sendBuffer); client.Send(sendBuffer, 0, sendBuffer.Length); } } }, () => Console.WriteLine("Client lost connection to server")); client.Start(Ip, Port); clientMaySend = true; Monitor.Pulse(monitor); Console.WriteLine("Main thread waiting"); Monitor.Wait(monitor); Console.WriteLine("Closing client"); client.Close(); Console.WriteLine("Closing server"); server.Close(); } }