Heim  >  Artikel  >  Backend-Entwicklung  >  C# Socket implementiert einen einfachen Konsolenfall

C# Socket implementiert einen einfachen Konsolenfall

巴扎黑
巴扎黑Original
2018-05-25 14:17:382688Durchsuche

Dieser Artikel enthält hauptsächlich einen einfachen Konsolenfall von C# Socket, der einen gewissen Referenzwert hat

Serverseite

1. Instanziieren und legen Sie das Socket-Instanzobjekt fest

a. Erstellen Sie eine IP-Adresse und einen Port

b. Binden Sie die Abhöradresse

c. Legen Sie die Anzahl der gleichzeitigen Zugriffe fest

2. Überwachen Sie die Verbindung

a Ausführung, damit der Hauptthread nicht einfriert (starten Sie den Thread, die Parameter müssen vom Objekttyp sein)

Verwenden Sie eine Schleife, um auf die Verbindung zu warten und eine für die Kommunikation verantwortliche Socket-Instanz zurückzugeben

c. Die IP-Adresse des angeschlossenen Kundendienstes kann aus der zurückgegebenen Socket-Instanz abgerufen werden

3. Empfangen Sie die vom Kundendienst gesendete Nachricht

a. Starten Sie einen neuen Thread in der Abhörmethode, um

auszuführen. Wenn Sie die Methode aufrufen, um die Nachricht abzurufen, müssen Sie einen Byte-Variablenparameter übergeben als Behälter. Der Rückgabewert der Methode ist int und gibt die Anzahl der erhaltenen gültigen Bytes an

c. Wenn die Anzahl der gültigen Bytes 0 ist, springen Sie aus der Schleife

d an den Kundenservice

4. Konsolenprogramm-Server-Code

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);

   }
  }
 }
}

2

1. Instanziieren und verbinden Sie das Socket-Instanzobjekt a. Erstellen Sie eine IP-Adresse und einen Port (die IP und den Port des Servers)

b. Mit „Stellen Sie eine Verbindung auf der Serverseite her“

2. Empfangen Sie die vom Server gesendete Nachricht a neuer Thread zum Ausführen

b .Verwenden Sie eine Schleife, um die gesendete Nachricht abzurufen. Wenn Sie die Methode aufrufen, um die Nachricht abzurufen, müssen Sie einen Byte-Variablenparameter als Container übergeben. Der Rückgabewert der Methode ist int und gibt die Anzahl der erhaltenen gültigen Bytes an

c. Wenn die Anzahl der gültigen Bytes 0 ist, springen Sie aus der Schleife

3. Senden Sie eine Nachricht an den Server a. Rufen Sie die send()-Methode des Socket-Objekts auf, um sie direkt zu senden

4 Code

Das obige ist der detaillierte Inhalt vonC# Socket implementiert einen einfachen Konsolenfall. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn