转载

【源码】c#编写的安卓客户端与Windows服务器程序进行网络通信

源码 (包含客户端与服务器端所有工程文件)     数据库文件       

为了方便测试,我临时搭建了一个服务器可以安装apk文件,直接测试   apk文件下载地址

通信框架为来自英国的NetworkComms2.3.1开源通信框架    序列化采用Protobuf.net开源框架

客户端界面如下:

【源码】c#编写的安卓客户端与Windows服务器程序进行网络通信 【源码】c#编写的安卓客户端与Windows服务器程序进行网络通信 【源码】c#编写的安卓客户端与Windows服务器程序进行网络通信

服务器端程序界面:
【源码】c#编写的安卓客户端与Windows服务器程序进行网络通信

服务器搭建在winserver2003 上,基于.net4.0.

数据库采用sql2005

【源码】c#编写的安卓客户端与Windows服务器程序进行网络通信

输入数据:

【源码】c#编写的安卓客户端与Windows服务器程序进行网络通信

数据库建设完成,打开VS2010开始,创建相关的工程

【源码】c#编写的安卓客户端与Windows服务器程序进行网络通信

创建服务器端工程

【源码】c#编写的安卓客户端与Windows服务器程序进行网络通信

【源码】c#编写的安卓客户端与Windows服务器程序进行网络通信

下一步:打开CodeSmith创建“存储过程”,“数据层”代码,“逻辑层(Business层代码)”:  

相关CodeSmith模板下载地址:

使用的CodeSmith为6.5版本:

【源码】c#编写的安卓客户端与Windows服务器程序进行网络通信

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

【源码】c#编写的安卓客户端与Windows服务器程序进行网络通信

下一步先构建服务器代码 

【源码】c#编写的安卓客户端与Windows服务器程序进行网络通信   数据库中添加存储过程

DBUsers.CS中添加:

【源码】c#编写的安卓客户端与Windows服务器程序进行网络通信
  //添加 根据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(); } 
【源码】c#编写的安卓客户端与Windows服务器程序进行网络通信

逻辑层DoUsers中添加:

【源码】c#编写的安卓客户端与Windows服务器程序进行网络通信
  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;  } } 
【源码】c#编写的安卓客户端与Windows服务器程序进行网络通信

服务器端代码:

【源码】c#编写的安卓客户端与Windows服务器程序进行网络通信
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();   }  } } 
【源码】c#编写的安卓客户端与Windows服务器程序进行网络通信

至此,我们已经完成了“建设数据库”,“建表”,“生成数据库存储过程“,”数据层代码“,”逻辑层代码“,”服务器端代码的编写“。只剩下安卓客户端的编写了。

还有一点是安卓客户端的加密保护,在此分享推荐我常用的加密技术—— 爱加密安卓应用加密技术 ,绝对是专业的安卓应用加密保护平台!

借助xamarin平台,用C#语言开发安卓程序,最大的优势,个人感觉是可以使用.net平台上众多优秀的库类,特别是通过稳定成熟的通信框架与c#服务器端进行交互。

【源码】c#编写的安卓客户端与Windows服务器程序进行网络通信 【源码】c#编写的安卓客户端与Windows服务器程序进行网络通信

修改 Main.axml文件,增加几个文本框给用户输入用户名和密码:

【源码】c#编写的安卓客户端与Windows服务器程序进行网络通信   修改Main.axml文件

【源码】c#编写的安卓客户端与Windows服务器程序进行网络通信   MainActivity代码

正文到此结束
Loading...