android访问远程数据库,C#服务器,android客户端

本文介绍如何使用C#和Java实现停车场车辆状态信息查询应用,包括数据库建立、服务器响应客户端请求、手机端数据交互过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

需求是,做一个停车场车辆状态信息查询的应用,涉及到车场前端信息采集到服务器数据库,手机端查询。服务器是用C#编的,客户端java编的,前端采集不说了,我在数据库里模拟了一些采集到的数据,下面具体讲服务器和手机端数据交互的过程,手机发送指令给服务器,具体查询过程交由服务器完成,再将查询结果返回到手机客户端,这里面涉及到知识点有数据库操作、socket通信、json数据解析。

        具体实现过程:

1.      数据库建立,我用的是一个小型数据库管理软件mysql,下载地址http://down.51cto.com/data/420104mysqldos黑框框操作界面,在下一个mysql的图形操作界面工具HAP_SQLyog_Enterprise_7.14,下载地址http://down.51cto.com/data/499101mysql的安装教程这里就不说了。数据库建立如下:建了个数据库名字叫carinfo,表名叫carlocation,

  

2.  服务器。

服务器主要用来响应客户端的连接请求,用C#编写,采用socket的UDP通信方式,

首先为客户端监听开启一个线程

 if (udpClient != null)
            {
                UdpThread.Abort();
                Thread.Sleep(TimeSpan.FromMilliseconds(500d));
                udpClient.Close();
            }
            try
            {
                udpClient = new UdpClient(8050);
                UdpThread = new Thread(new ThreadStart(UdpReciveThread));
                UdpThread.Start();
                //UdpThread.Abort();

            }
            catch (Exception y)
            {
                MessageBox.Show(this, y.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                this.Dispose(true);
            }
            try
            {
                getport_state();
              
            }
            catch (Exception k) { 
            }

UDP通信模块,这块代码主要响应客户端的连接指令:

  #region 采用UDP协议通信,响应客户端请求并回复
        /// <summary>
        /// 建立一个监听线程,采用UDP协议通信,响应客户端请求并回复
        /// </summary>
        void UdpReciveThread()
        {
          
            byte[] send_buf=null;
            byte[] receive_buf=null;
            String send_out=null;
            IPHostEntry oIPHost = Dns.GetHostEntry(Environment.MachineName);      
            IPEndPoint remoteHost = new IPEndPoint(IPAddress.Any, 0);//获取远程主机地址
            while (udpClient != null && Thread.CurrentThread.ThreadState.Equals(ThreadState.Running))
            {
                try
                {

                    receive_buf = udpClient.Receive(ref remoteHost); //接收由远程主机发送的数据
                    string bufs = Encoding.UTF8.GetString(receive_buf);          
                    uc = new UdpClient(remoteHost.Address.ToString(), remoteHost.Port); //此UDPclient是为了服务器给客户端发回应
                    if (bufs.StartsWith("#GETIN")) //客户端想要获取验证码,传回数据格式为:#GETIN|phone|starttime|endtime
                    {
                        string[] strs = new string[3];
                        strs = bufs.Split('|');  //strs[0]=#GETIN strs[1]=张三 strs[2]=13598055398

                        Random rd = new Random();                     
                        send_out = rd.Next().ToString();//产生随机数
                        send_buf = Encoding.UTF8.GetBytes(send_out);
                        uc.Send(send_buf, send_buf.Length);//发回客户端

                        string send_msg = "感谢你使用找车位,您的预约号为:" + send_out + ",请于24小时内使用,祝您生活愉快!";
                        send_CatMsg(strs[2], send_msg);//发短信
                    }
                    else if (bufs.StartsWith("#GETSTATE"))//查询停车场停车情况
                    {
                        send_out = get_carstate();
                        send_buf = Encoding.UTF8.GetBytes(send_out);
                        uc.Send(send_buf, send_buf.Length);
                    }

                }
                catch (Exception y)
                {
                    //MessageBox.Show(y);
                }
                finally 
                {
                    uc.Close();
                }

            }
            
           
        }
        #endregion

 

mysql数据库操作部分:

  #region  建立MySql数据库连接
        /// <summary>
        /// 建立数据库连接.
        /// </summary>
        /// <returns>返回MySqlConnection对象</returns>
        public MySqlConnection getmysqlcon()
        {
            string M_str_sqlcon = "server=localhost;user id=root;password=123;database=carinfo"; //根据自己的设置
            MySqlConnection myCon = new MySqlConnection(M_str_sqlcon);
            return myCon;
        }
        #endregion

这段代码是查询数据库,并将查询结果以json数组格式返回。

  #region 查询数据库中车辆位置,和状态,并返回json数组
        /// <summary>
        /// 查询数据库中车辆位置,和状态,并返回json数组
        /// </summary>
        /// <returns>将查询数组以json数组形式返回</returns>
        public string get_carstate() 
        {
            MySqlConnection mysqlcon = this.getmysqlcon();
            string sql = "select * from carlocation";
            string result = null;
            MySqlCommand mysqlcom = new MySqlCommand(sql, mysqlcon);
            mysqlcon.Open();
            MySqlDataReader reader = mysqlcom.ExecuteReader();//用mysqldatareader查询数据库          
          
            StringBuilder htmlStr = new StringBuilder("");           
            htmlStr.Append("[");
           while (reader.Read())
           {                                                                    //将查询结果分封成json数组
               htmlStr.Append("{'ID':" + reader["ID"] + ",");                   //json 格式为:[{"ID":1,"layout_x":20,"layout_y":30,"state":1},{},{},{}]
               htmlStr.Append("'layout_x':" + reader["layout_x"] + ",");             
               htmlStr.Append("'layout_y':" + reader["layout_y"] + ","); 
             htmlStr.Append("'state':" + reader["state"]); 
             htmlStr.Append("},"); 
            }
           htmlStr.Remove(htmlStr.ToString().LastIndexOf(','), 1);
           htmlStr.Append("]");
           result = htmlStr.ToString();                                     //json数组变成string类型
         reader.Close(); 
         mysqlcon.Close();        //关闭数据库 
          return result;
        }
        #endregion

服务器上主要功能函数就是这些了,最后会附上完整的代码。

3.android手机客户端

android手机端通信代码相对简单,主要就是建立一个socket连接,再发送指令,并接收返回的指令,解析一下就好了。

socket = new DatagramSocket(8050);         
        InetAddress serverAddress = InetAddress.getByName("192.168.0.11");
        //发送请求
        String str = "#GETSTATE";
        byte data [] = str.getBytes();      
        packet_send = new DatagramPacket(data,data.length,serverAddress,8050);              
        socket.send(packet_send);     
        System.out.println("data...:"+data);
        //接收到回应
        byte data1 [] = new byte[1024];
        packet_rece = new DatagramPacket(data1,data1.length);
        socket.receive(packet_rece);
        String result = new String(packet_rece.getData(),packet_rece.getOffset(),packet_rece.getLength());
        //数据解析
     System.out.println("result-------->"+result);

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值