【源码】c#编写的安卓客户端与Windows服务器程序进行网络通信
2023-09-27 14:23:18 时间
为了方便测试,我临时搭建了一个服务器可以安装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#.NET 大型企业信息化系统集成快速开发平台 4.2 版本 - 防止暴力破解密码、提高大型信息系统安全
- C#.NET 大型企业信息化系统集成快速开发平台 4.2 版本 - 面向全国标准省市县行政数据基础之上的组织机构管理
- C#_面试
- C#运行出现:基础连接已经关闭: 未能为 SSL/TLS 安全通道建立信任关系。
- C# 调用C++ SDK/API的问题总结
- OpenCVSharp(C# OpenCV)图片自动生成彩虹特效(附源码)
- C# Socket编程笔记
- C#中关于DataGridView行和列的背景色-前景色设置
- C#学习-枚举(数据类型,适用于某些取值范围有限的数据)
- 2018-8-10-C#-代码占用的空间
- C# 获取进程退出代码
- C# double 好用的扩展