Maison  >  Article  >  développement back-end  >  C# Socket implémente un cas de console simple

C# Socket implémente un cas de console simple

巴扎黑
巴扎黑original
2018-05-25 14:17:382669parcourir

Cet article partage principalement un cas de console simple de C# Socket, qui a une certaine valeur de référence. Les amis intéressés peuvent s'y référer

Côté serveur

<.>

1. Instanciez et définissez l'objet d'instance de socket

a. Créez l'adresse IP et le port

b. Liez l'adresse d'écoute

c. Définir le nombre d'accès simultanés autorisés

2. Surveiller la connexion a. exécution pour que le thread principal ne se fige pas (démarrez le thread, les paramètres doivent être de type objet)

b. Utiliser une boucle pour attendre la connexion et renvoyer une instance de socket chargée de la communication

c. L'adresse IP du service client connecté peut être obtenue à partir de l'instance de socket renvoyée

3. Recevez le message envoyé par le service client a. Démarrez un nouveau thread dans la méthode d'écoute pour exécuter

b. Utilisez une boucle pour obtenir le message envoyé Lors de l'appel de la méthode pour obtenir le message, vous devez passer un paramètre de variable d'octet. comme conteneur. La valeur de retour de la méthode est int, indiquant le nombre d'octets valides obtenus

c. Si le nombre d'octets valides est 0, sortez de la boucle

d. au service client

4. Code côté serveur du programme de console

Client
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;

namespace ServerSocket
{
 class Program
 {
  static void Main(string[] args)
  {
   Console.WriteLine("Hello World!");
   Socket serverSocket = new Socket(SocketType.Stream, ProtocolType.Tcp);
   IPAddress ip = IPAddress.Any;
   IPEndPoint point = new IPEndPoint(ip, 2333);
   //socket绑定监听地址
   serverSocket.Bind(point);
   Console.WriteLine("Listen Success");
   //设置同时连接个数
   serverSocket.Listen(10);

   //利用线程后台执行监听,否则程序会假死
   Thread thread = new Thread(Listen);
   thread.IsBackground = true;
   thread.Start(serverSocket);

   Console.Read();
  }

  /// <summary>
  /// 监听连接
  /// </summary>
  /// <param name="o"></param>
  static void Listen(object o)
  {
   var serverSocket = o as Socket;
   while (true)
   {
    //等待连接并且创建一个负责通讯的socket
    var send = serverSocket.Accept();
    //获取链接的IP地址
    var sendIpoint = send.RemoteEndPoint.ToString();
    Console.WriteLine($"{sendIpoint}Connection");
    //开启一个新线程不停接收消息
    Thread thread = new Thread(Recive);
    thread.IsBackground = true;
    thread.Start(send);
   }
  }

  /// <summary>
  /// 接收消息
  /// </summary>
  /// <param name="o"></param>
  static void Recive(object o)
  {
   var send = o as Socket;
   while (true)
   {
    //获取发送过来的消息容器
    byte[] buffer = new byte[1024 * 1024 * 2];
    var effective = send.Receive(buffer);
    //有效字节为0则跳过
    if (effective == 0)
    {
     break;
    }
    var str = Encoding.UTF8.GetString(buffer,0, effective);
    Console.WriteLine(str);
           var buffers = Encoding.UTF8.GetBytes("Server Return Message");
           send.Send(buffers);

   }
  }
 }
}

1. Instanciez et connectez l'objet d'instance de socket

a. Créez une adresse IP et un port (l'adresse IP et le port du serveur)

b. Avec Établir un lien côté serveur

2. Recevoir le message envoyé par le serveur

a. nouveau thread à exécuter

b .Utilisez une boucle pour obtenir le message envoyé Lorsque vous appelez la méthode pour obtenir le message, vous devez passer un paramètre de variable d'octet en tant que conteneur. La valeur de retour de la méthode est un entier, indiquant le nombre d'octets valides obtenus

c Si le nombre d'octets valides est 0, sortez de la boucle

3. Envoyer un message au serveur

a. Appelez la méthode send() de l'objet socket pour envoyer directement

4. code

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!

Déclaration:
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