標籤:
源碼(包含用戶端與伺服器端所有工程檔案) 資料庫檔案
為了方便測試,我臨時搭建了一個伺服器可以安裝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代碼
【源碼】c#編寫的安卓用戶端與Windows伺服器程式進行網路通訊