コード例 #1
0
        public void TestTcpConnWriteAfterClose()
        {
            var tcpListener = new TcpListener(IPAddress.Loopback, 4193);

            tcpListener.Start();

            var wg = new WaitGroup();

            wg.Add(1);

            GoFunc.Run(() =>
            {
                var tcpClient = tcpListener.AcceptTcpClient();

                using (var rdr = new BinaryReader(tcpClient.GetStream()))
                    using (var connw = new BinaryWriter(tcpClient.GetStream()))
                    {
                        while (true)
                        {
                            var readMsg = ReadBytes(rdr, (byte)'\n');
                            if (readMsg.SequenceEqual(Encoding.UTF8.GetBytes("QUIT\n")))
                            {
                                break;
                            }
                            connw.Write(readMsg);
                        }
                    }

                tcpClient.Close();
                wg.Done();
            }, "TcpConnTest read loop");

            var tcpConn = new TcpConn(IPAddress.Loopback.ToString(), 4193);

            var helloMsg = Encoding.UTF8.GetBytes("Hello\n");

            tcpConn.Write(helloMsg, 0, helloMsg.Length);

            var recv = new byte[helloMsg.Length];

            tcpConn.Read(recv);
            Console.WriteLine(Encoding.UTF8.GetString(recv));

            var quitMsg = Encoding.UTF8.GetBytes("QUIT\n");

            tcpConn.Write(quitMsg, 0, quitMsg.Length);

            recv = new byte[quitMsg.Length];
            tcpConn.Read(recv);
            Console.WriteLine(Encoding.UTF8.GetString(recv));

            wg.Wait();

            tcpConn.Close();

            Assert.Throws <ConnectionClosedException>(() => tcpConn.Write(quitMsg, 0, quitMsg.Length));
        }
コード例 #2
0
 private void CloseConn(TcpConn conn)
 {
     if (conn.stream != null)
     {
         conn.stream.Close();
     }
     if (conn.client != null)
     {
         conn.client.Close();
     }
 }
コード例 #3
0
 private void CloseConn(TcpConn conn)
 {
     new Thread(delegate() {
         try {
             if (conn.stream != null)
             {
                 conn.stream.Close();
             }
             if (conn.client != null)
             {
                 conn.client.Close();
             }
         }
         catch (Exception) { }
     }).Start();
 }
コード例 #4
0
 public GateCli()
 {
     handler = (HandlerI) new Handler();
     codec   = (CodecI) new Codec();
     conn    = new TcpConn(handler);
 }