Maison > développement back-end > Tutoriel C#.Net > Comment implémenter le partage de code de connexion simulé dans networkcomms3.0 en C# (image)

Comment implémenter le partage de code de connexion simulé dans networkcomms3.0 en C# (image)

黄舟
Libérer: 2017-06-18 10:16:18
original
2408 Les gens l'ont consulté

Cet article présente principalement le résumé de la connexion simulée dans C# networkcomms 3.0. Les amis qui en ont besoin peuvent s'y référer

Les projets récents doivent être un clientRequêteSystème de statut, le système actuel. L'ordinateur hôte n'a pas de fonction de services, j'ai donc trouvé le framework open source networkcomms et je l'ai utilisé comme projet

La dernière version de l'adresse de téléchargement de networkcomms :

https://github.com/MarcFletcher/NetworkComms.Net Télécharger directement vs ouvrir

Nouveau serveur


Dans d'autres aides Cette ligne est souvent manquante : provoquant des problèmes de packaging des types lorsque le client envoie. Cette ligne de code doit être ajoutée des deux côtés du client et du serveur, et précise la méthode de transmission
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");
      }
    }
  }
}
Copier après la connexion
<🎜. >


Voici l'erreur signalée

 SendReceiveOptions aboveOptions = new SendReceiveOptions(DPSManager.GetDataSerializer<ProtobufSerializer>(), null, null);
Copier après la connexion

Voici le client


Classe de contrat

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("ReqLogin", "ResLogin", 5000, contract);
      //向服务器发送登录信息并获取登录结果
      // ResMsgContract resMsg = newTcpConnection.SendReceiveObject("ReqLogin", "ResLogin", 5000, contract);
      if (resMsg.Message == "登录成功")
      {
        MessageBox.Show("登录成功");
      }
      else
      {
        MessageBox.Show("用户名密码错误");
      }
    }
  }
}
Copier après la connexion


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;
    }
  }
}
Copier après la connexion
Remarque :

Conditions d'utilisation de ce framework Pour coopérer avec le protobuf de Google, vous devez choisir une bonne version. Je n'ai pas testé à nouveau la version la plus élevée car j'ai également modifié la version du protobuf lors du débogage d'autres problèmes survenus lors du processus de connexion jusqu'à présent. , Je n'ai pas testé si la version la plus élevée présentait des problèmes de compatibilité. Je l'ai testée avec succès. Celle utilisée est la 2.0.0.668

Introduction à protobuf protobuf est un framework de sérialisation open source fourni par Google. langages de représentation de données tels que XML et JSON. Sa plus grande caractéristique est qu'il est basé sur le binaire, il est donc meilleur que la représentation XML traditionnelle. Efficace et court

par rapport à la méthode d'ajout de nuget
.

Entrée

Choisissez votre propre version Maintenant, augmentez la classe de contrat du projet. C'est ainsi que vous définissez le transfert. objectez-vous.

Résultat :

Ce qui précède est un résumé de l'implémentation de C# networkcomms 3.0 de la connexion simulée introduite par l'éditeur. J'espère que cela vous sera utile. Si vous avez des questions, laissez-moi un message et l'éditeur vous répondra à temps. Je voudrais également remercier tout le monde pour votre soutien au site Web de Script House !

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal