Пример #1
0
        private void RunListenServer()
        {
            try
            {
                int       port = Convert.ToInt32(portText.Text.Trim()); //服务器port
                IPAddress ip   = IPAddress.Parse(IP.GetLocalIP());      //服务器端ip
                myListener = new TcpListener(ip, port);                 //创建TcpListener实例
                myListener.Start();                                     //start
                this.RunOnUiThread(() =>                                //this 指代的是Activity对象,RunOnUiThread 是Activity的一个成员方法  
                {
                    RefreshMessageView("请连接:" + IP.GetLocalIP() + ":" + port);
                });
                while (serverRuning)
                {
                    newClient = myListener.AcceptTcpClient();//等待客户端连接,长连接
                    //this.RunOnUiThread(() =>
                    //{
                    //    RefreshMessageView("链接成功");
                    //});

                    //while (serverRuning)
                    //{
                    //try
                    //{
                    clientStream = newClient.GetStream();    //利用TcpClient对象GetStream方法得到网络流
                    TCPHelper newtcp      = new TCPHelper();
                    byte[]    btemp       = newtcp.ReceiveByteArray(clientStream);
                    Message   mes         = new Message(btemp);
                    byte      messagetype = mes.Date_9F01.Data[0];
                    string    url         = "";
                    string    logData     = "";
                    Dictionary <string, string> log;
                    byte[] barCodeData = null;

                    switch (messagetype)
                    {
                    case 0x00:
                        logData = Encoding.Default.GetString(mes.Date_9F03.Data);
                        url     = Encoding.Default.GetString(mes.Date_9F05.Data);
                        log     = UP_SDK.SDKUtil.CoverStringToDictionary(logData, Encoding.UTF8);
                        var re_00 = Https.sendOfflineBarCodeAsync(log, url);    //脱机扫码
                        break;

                    case 0x01:
                        logData = Encoding.Default.GetString(mes.Date_9F03.Data);
                        url     = Encoding.Default.GetString(mes.Date_9F05.Data);
                        log     = UP_SDK.SDKUtil.CoverStringToDictionary(logData, Encoding.UTF8);
                        var re_01 = Https.sendBarCodeAsync(log, url);
                        break;

                    case 0x02:
                        //图片扫描
                        break;

                    default:
                        break;
                    }


                    byte[] byteArray = mes.PackageMessage(barCodeData, null, true);
                    newtcp.SendByteArray(clientStream, byteArray);
                    clientStream.Close();
                    newClient.Close();
                    newClient.Dispose();

                    // Shutdown and end connection
                }
            }
            catch (Exception e)
            {
                this.RunOnUiThread(() =>
                {
                    RefreshMessageView("异常信息" + e.Message);
                });
                if (clientStream != null)
                {
                    clientStream.Close();
                    clientStream = null;
                }
                if (myListener != null)
                {
                    myListener.Stop();
                    myListener = null;
                }
                if (!e.Message.Equals("interrupted"))
                {
                    this.RunOnUiThread(() =>
                    {
                        RefreshMessageView("异常信息" + e.Message);
                        createButton.PerformClick();
                    });
                }

                return;
            }
        }