【源碼】c#編寫的安卓客戶端與Windows服務器程序進行網絡通信


源碼(包含客戶端與服務器端所有工程文件)    數據庫文件      

為了方便測試,我臨時搭建了一個服務器可以安裝apk文件,直接測試  apk文件下載地址  

通信框架為來自英國的NetworkComms2.3.1開源通信框架    序列化采用Protobuf.net開源框架

客戶端界面如下:

      

服務器端程序界面:

服務器搭建在winserver2003 上,基於.net4.0.

數據庫采用sql2005

輸入數據:

數據庫建設完成,打開VS2010開始,創建相關的工程

創建服務器端工程

 

下一步:打開CodeSmith創建“存儲過程”,“數據層”代碼,“邏輯層(Business層代碼)”:  

相關CodeSmith模板下載地址:

使用的CodeSmith為6.5版本:

生成完成后,VS中工程圖:

下一步先構建服務器代碼 

 數據庫中添加存儲過程

DBUsers.CS中添加:

//添加 根據UserID獲取用戶
        public static IDataReader GetOneByUserName(
           string name)
        {
            SqlParameterHelper sph = new SqlParameterHelper(GetReadConnectionString(), "Users_SelectOneByUserName", 1);
            sph.DefineSqlParameter("@Name", SqlDbType.NVarChar, 200, ParameterDirection.Input, name);
            return sph.ExecuteReader();

        }

 

邏輯層DoUsers中添加:

public static string Login(string username, string password)
        { 
            using (IDataReader reader = DBUsers.GetOneByUserName(username))
            {
                string theResult = "登錄不成功";
                Users theUser = PopulateFromReader(reader);
                if (theUser == null)
                {
                    theResult = "用戶不存在";
                }
                else if (theUser.PassWord == password)
                { 
                    theResult = "登錄成功";
                     
                }

                else
                {
                    theResult = "密碼不正確";
                  
                }


                return theResult;
            }


        }

 

 服務器端代碼:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms; 
using NetworkCommsDotNet; 
using System.Net;
using Mobile.Business;
using Mobile.Entity;

namespace MobileServer
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        { 
            //服務器開始監聽客戶端的請求 
            //開始監聽某T端口
            IPEndPoint thePoint = new IPEndPoint(IPAddress.Parse(txtIP.Text), int.Parse(txtPort.Text));
            TCPConnection.StartListening(thePoint, false);
            button1.Text = "監聽中";
            button1.Enabled = false;

            //此方法中包含服務器具體的處理方法。
            StartListening();
        }
        private void StartListening()
        {
            
            //禁用日志記錄  服務器端正式使用時,禁用日志記錄
            NetworkComms.DisableLogging();
             
            //處理登陸請求
            NetworkComms.AppendGlobalIncomingPacketHandler<Users>("UserLogin", IncomingLoginRequest);

        }

        //處理某個具體的請求
        private void IncomingLoginRequest(PacketHeader header, Connection connection, Users currentUser)
        {
            try
            {
                //從數據庫中獲取返回結果
                string resMsg  = DoUsers.Login(currentUser.Name,currentUser.PassWord);

                ResMessage contract = new ResMessage();
                contract.Message = resMsg;

                //把結果返回給客戶端
                connection.SendObject("ResLogin", contract);

            }
            catch (Exception ex)
            {

            }
        }

        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            NetworkComms.Shutdown();
            this.Dispose();
            this.Close();
        }
    }
}

 

至此,我們已經完成了“建設數據庫”,“建表”,“生成數據庫存儲過程“,”數據層代碼“,”邏輯層代碼“,”服務器端代碼的編寫“。只剩下安卓客戶端的編寫了。

 還有一點是安卓客戶端的加密保護,在此分享推薦我常用的加密技術——愛加密安卓應用加密技術,絕對是專業的安卓應用加密保護平台!

借助xamarin平台,用C#語言開發安卓程序,最大的優勢,個人感覺是可以使用.net平台上眾多優秀的庫類,特別是通過穩定成熟的通信框架與c#服務器端進行交互。

 

 

修改 Main.axml文件,增加幾個文本框給用戶輸入用戶名和密碼:

 修改Main.axml文件
 MainActivity代碼


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM