.Net Tcp/ip 数据接收

.Net Tcp/ip data reception

为了通过 tcp/ip 协议监听远程客户端,我写了一大段代码。 我能够从客户那里收到数据。但我不知道如何知道客户端是否停止发送数据以完成连接。 这是我的代码:

static void Main(string[] args)
        {
            TcpListener listener = new TcpListener(IPAddress.Any, 34400);
            TcpClient client;
            listener.Start();

            while (true) // Add your exit flag here
            {
                client = listener.AcceptTcpClient();
                ThreadPool.QueueUserWorkItem(ThreadProc, client);
            }
        }

        private static void ThreadProc(object state)
        {
            string imei = string.Empty;
            var client = ((TcpClient) state);
            NetworkStream nwStream = ((TcpClient) state).GetStream();
            byte[] buffer = new byte[client.ReceiveBufferSize];

            try
            {


                while (true)
                {
                    int bytesRead = nwStream.Read(buffer, 0, client.ReceiveBufferSize);

                    string dataReceived = Encoding.ASCII.GetString(buffer, 0, bytesRead);
                    if (imei == string.Empty)
                    {
                        imei = dataReceived;
                        Console.WriteLine("IMEI received : " + dataReceived);

                        Byte[] b = { 0x01 };
                        nwStream.Write(b, 0, 1);

                    }
                    else
                    {
                        int dataNumber =  Convert.ToInt32(buffer.Skip(9).Take(1).ToList()[0]); ;

                        var result = 0;
                        while (dataNumber > 0)
                        {
                            var parser = new TeltonikaDevicesParser(false);
                            result = parser.Decode(new List<byte>(buffer), imei);
                            dataNumber--;
                        }
                        nwStream.Write(
                            result > 0 ? new byte[] { 0x00, 0x00, 0x00, 0x01 } : new byte[] { 0x00, 0x00, 0x00, 0x00 }, 0,
                            4);
                    }
                }  

你不知道。 TCP/IP 不太关心关闭一端的连接。只有当你尝试通过发送数据时才会出现断开连接的状态。

您必须通过 TCP/IP 实现一个简单的协议来完成您的代码:

  • 提前了解您期望的数据量。 IMEI 号码有固定的长度。
  • 等到传输超时。你收到的都是你的。
  • 先发送您打算传输的数据量,当您收到所有数据后,您的工作就完成了。