博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【源码】c#编写的安卓客户端与Windows服务器程序进行网络通信
阅读量:5342 次
发布时间:2019-06-15

本文共 3603 字,大约阅读时间需要 12 分钟。

(包含客户端与服务器端所有工程文件)          

为了方便测试,我临时搭建了一个服务器可以安装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
("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代码

转载于:https://www.cnblogs.com/Niger123/p/4323009.html

你可能感兴趣的文章
8-EasyNetQ之Send & Receive
查看>>
Android反编译教程
查看>>
java重写LinkedList
查看>>
zTree节点重叠或者遮挡
查看>>
List<string> 去重复 并且出现次数最多的排前面
查看>>
js日志管理-log4javascript学习小结
查看>>
Android之布局androidmanifest.xml 资源清单 概述
查看>>
How to Find Research Problems
查看>>
Linux用户管理
查看>>
数据库第1,2,3范式学习
查看>>
《Linux内核设计与实现》第四章学习笔记
查看>>
使用iperf测试网络性能
查看>>
struts2入门之准备工作
查看>>
从C语言的弱类型属性说起
查看>>
图片的显示隐藏(两张图片,默认的时候显示第一张,点击的时候显示另一张)...
查看>>
Docker 安装MySQL5.7(三)
查看>>
python 模块 来了 (调包侠 修炼手册一)
查看>>
关于CSS的使用方式
查看>>
本地MongoDB服务开启与连接本地以及远程服务器MongoDB服务
查看>>
跨域解决方案之CORS
查看>>