zoukankan      html  css  js  c++  java
  • 【源码】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代码
  • 相关阅读:
    Expression Bland 入门视频(五) 了解对象面板和属性面板
    Windows Phone 一步一步从入门到精通
    “北京今年入冬的第一场雪”,纪念博客园写日志一年了
    2010年即将到来,用我的名字注册了的新域名 TerryFeng.com
    我要在黑龙江的老家,组织一个微软.Net俱乐部
    Windows 7 小工具 问题步骤记录器
    给弟弟起步学习软件开发(.Net 方向)的指导,博友们帮助看看,提些意见给他。
    今天是中国传统节日“重阳节”。也是爷爷的生日,今年80岁高龄。
    Windows 7 远程服务器管理工具 简体中文 下载
    新的技术和概念应该尽可能先去接受,而不是排斥。
  • 原文地址:https://www.cnblogs.com/Jeely/p/10972130.html
Copyright © 2011-2022 走看看