国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

C# networkcomms 3.0實現模擬登陸總結

2019-10-29 21:09:23
字體:
來源:轉載
供稿:網友

最近項目需要做一個客戶查詢狀態系統,當前上位機缺少服務功能,于是找到了networkcomms 開源框架,作為項目使用.

最新版networkcomms 下載地址:#25af49f0e79fce90312f328a2c7bc2cc#

下載直接vs打開

新建服務器端

c#,networkcomms,3.0實現模擬登陸

using MessageContract;using NetworkCommsDotNet;using NetworkCommsDotNet.Connections;using NetworkCommsDotNet.Connections.TCP;using NetworkCommsDotNet.DPSBase;using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Net;using System.Text;using System.Windows.Forms;namespace AppServer{  public partial class MaiForm : Form  {    public MaiForm()    {      InitializeComponent();    }    SendReceiveOptions aboveOptions = new SendReceiveOptions(DPSManager.GetDataSerializer<ProtobufSerializer>(), null, null);    private void button1_Click(object sender, EventArgs e)    {      //服務器開始監聽客戶端的請求      Connection.StartListening(ConnectionType.TCP, new IPEndPoint(IPAddress.Parse(txtIP.Text), int.Parse(txtPort.Text)));      //服務器開始監聽客戶端的請求            //IPEndPoint thePoint = new IPEndPoint(IPAddress.Parse(txtIP.Text), int.Parse(txtPort.Text));      //TCPConnection.StartListening(thePoint, false);      button1.Text = "監聽中";      button1.Enabled = false;      //button1.Text = "監聽中";      //button1.Enabled = false;      //此方法中包含服務器具體的處理方法。      StartListening();    }    private void StartListening()    {      //開啟日志記錄       //配置日志記錄器      //ILogger logger = new LiteLogger(LiteLogger.LogMode.ConsoleAndLogFile, "ServerLogFile_" + NetworkComms.NetworkIdentifier + ".txt");      //NetworkComms.EnableLogging(logger);      //禁用日志記錄 服務器端正式使用時,贏禁用日志記錄      NetworkComms.DisableLogging();      //服務器端處理收到的消息      //為簡單起見,此示例中我們只處理字符類型的信息,也返回字符類型的信息。      //處理的信息可以使自定義類,具體見下一個Demo      NetworkComms.AppendGlobalIncomingPacketHandler<LoginContract>("ReqLogin", IncomingLoginRequest);    }    //處理某個具體的請求    private void IncomingLoginRequest(PacketHeader header, Connection connection, LoginContract loginContract)    {      try      {        string resMsg = "";        //為了簡單,這里不調用數據庫,而是模擬一下登錄        if (loginContract.UserID == "1000" && loginContract.PassWord == "123")          resMsg = "登錄成功";        else          resMsg = "用戶名密碼錯誤";        //把返回結果寫入到契約類中,后面返回給客戶端        //ResMsgContract contract = new ResMsgContract();        //contract.Message = resMsg;        //connection.SendObject<ResMsgContract>("ResLogin", contract);        ResMsgContract contract = new ResMsgContract();        contract.Message = resMsg;        connection.SendObject("ResLogin", contract);      }      catch (Exception ex)      {        // LogTools.LogException(ex, "IncomingMsgHandle");      }    }  }}

在別的幫助中往往少了這行:導致出現客戶端發送時,類型打包出現問題. 這行代碼是客戶端服務器兩端都要加上的,是指定傳輸方式

 SendReceiveOptions aboveOptions = new SendReceiveOptions(DPSManager.GetDataSerializer<ProtobufSerializer>(), null, null);

就是這個報錯了

c#,networkcomms,3.0實現模擬登陸

一下是客戶端

c#,networkcomms,3.0實現模擬登陸

using MessageContract;using NetworkCommsDotNet;using NetworkCommsDotNet.Connections;using NetworkCommsDotNet.Connections.TCP;using NetworkCommsDotNet.DPSBase;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;namespace AppClient{  public partial class MainForm : Form  {    public MainForm()    {      InitializeComponent();    }    //連接信息對象    public ConnectionInfo connInfo = null;    //連接對象    Connection newTcpConnection;    SendReceiveOptions aboveOptions = new SendReceiveOptions(DPSManager.GetDataSerializer<ProtobufSerializer>(), null, null);    private void button1_Click(object sender, EventArgs e)    {      //給連接信息對象賦值      connInfo = new ConnectionInfo(txtIP.Text, int.Parse(txtPort.Text));      //如果不成功,會彈出異常信息      newTcpConnection = TCPConnection.GetConnection(connInfo);      button1.Enabled = false;      button1.Text = "連接成功";    }    private void btnlogin_Click(object sender, EventArgs e)    {      //給契約類賦值      LoginContract contract = new LoginContract(txtUserName.Text, txtPassword.Text);      //contract.UserID = txtUserName.Text;      //contract.PassWord = txtPassword.Text;      //向服務器發送登錄信息并獲取登錄結果       ResMsgContract resMsg = newTcpConnection.SendReceiveObject<LoginContract, ResMsgContract>("ReqLogin", "ResLogin", 5000, contract);      //向服務器發送登錄信息并獲取登錄結果      // ResMsgContract resMsg = newTcpConnection.SendReceiveObject<ResMsgContract>("ReqLogin", "ResLogin", 5000, contract);      if (resMsg.Message == "登錄成功")      {        MessageBox.Show("登錄成功");      }      else      {        MessageBox.Show("用戶名密碼錯誤");      }    }  }}

契約類

using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace MessageContract{  [ProtoContract]  public class LoginContract  {    [ProtoMember(1)]    public string UserID { get; set; }    [ProtoMember(2)]    public string PassWord { get; set; }    public LoginContract() { }    public LoginContract(string userID, string passWord)    {      this.UserID = userID;      this.PassWord = passWord;    }  }}using ProtoBuf;using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace MessageContract{  [ProtoContract]  public class ResMsgContract  {    [ProtoMember(1)]    public string Message;    public ResMsgContract() { }    public ResMsgContract(string message)    {      this.Message = message;    }  }}

注意:

使用這個框架要配合谷歌的protobuf   要選好版本.本人沒重復測試最高版本,因為在調試登錄過程中出現別的問題過程中,也順改了protobuf 的版本,至今未測試最高版本是否存在兼容問題.本人成功的使用的是2.0.0.668

    protobuf簡介protobuf是google提供的一個開源序列化框架,類似于XML,JSON這樣的數據表示語言,其最大的特點是基于二進制,因此比傳統的XML表示高效短小

vs nuget添加方式

c#,networkcomms,3.0實現模擬登陸

輸入

c#,networkcomms,3.0實現模擬登陸

版本選擇自己指定一下,加大項目的契約類里邊.這是自己定義傳輸對象的方式.

c#,networkcomms,3.0實現模擬登陸

 結果:

c#,networkcomms,3.0實現模擬登陸

以上所述是小編給大家介紹的C# networkcomms 3.0實現模擬登陸總結,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對VEVB武林網網站的支持!

 

注:相關教程知識閱讀請移步到c#教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 营山县| 盐津县| 冷水江市| 汨罗市| 麻城市| 民乐县| 湘西| 汽车| 大关县| 仪征市| 合水县| 柘城县| 洪雅县| 重庆市| 黄梅县| 卢氏县| 乌鲁木齐市| 昭觉县| 桃园县| 新田县| 原阳县| 曲阜市| 霍林郭勒市| 商河县| 疏附县| 蚌埠市| 屏东县| 专栏| 霸州市| 诸暨市| 呼玛县| 两当县| 合川市| 鹤峰县| 高要市| 霍邱县| 岳阳县| 奉节县| 彭水| 弥渡县| 海原县|