.Net Tcp / ip数据接收

时间:2018-05-27 10:04:36

标签: .net tcp-ip

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

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);
                    }
                }  

1 个答案:

答案 0 :(得分:0)

你没有。 TCP / IP并不关心在一端关闭连接。只有当您尝试通过数据发送数据时才会断开连接状态。

您必须通过TCP / IP实现简单协议才能完成代码:

  • 事先知道您期望的数据量。 IMEI号码具有设定的长度。
  • 等到传输超时。你收到的是你的。
  • 首先发送您要转移的数据量,当您收到所有数据时,您的工作就完成了。