예제 #1
0
 /// <summary>
 /// 終止連接 Disconnect remote service.
 /// </summary>
 public void Disconnect()
 {
     if (ClientRequest != null)
     {
         // close communication object ..
         ClientRequest.Close();
     }
 }
예제 #2
0
        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");
                    });
                });
            });
        }
예제 #3
0
        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");
                    });
                });
            });
        }
예제 #4
0
        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();
            }
        }