>  기사  >  백엔드 개발  >  C# 소켓은 간단한 콘솔 케이스를 구현합니다.

C# 소켓은 간단한 콘솔 케이스를 구현합니다.

巴扎黑
巴扎黑원래의
2018-05-25 14:17:382688검색

이 기사는 C# 소켓의 간단한 콘솔 사례를 주로 공유하며 관심 있는 친구는 참고할 수 있습니다.

1. 서버 측

1. 소켓 인스턴스 객체를 인스턴스화하고 설정합니다

a. IP 주소와 포트를 생성합니다

b. 수신 주소 바인딩

c. 동시 접근 허용 횟수 설정

2. 연결 모니터링

a. 메인 스레드가 정지되지 않도록 실행(스레드 시작, 매개변수는 객체 유형이어야 함)

b. 루프를 사용하여 연결을 기다리고 통신을 담당하는 소켓 인스턴스를 반환합니다.

c. 연결된 고객 서비스의 IP 주소는 반환된 소켓 인스턴스에서 얻을 수 있습니다

3. 고객 서비스에서 보낸 메시지를 받습니다

a.

을 실행하기 위해 청취 메소드에서 새 스레드를 시작합니다. b. 메시지를 얻기 위해 메소드를 호출할 때 루프를 사용하여 바이트 변수 매개변수를 전달해야 합니다. 컨테이너로. 메서드의 반환 값은 int이며, 획득한 유효한 바이트 수를 나타냅니다.

c. 유효한 바이트 수가 0이면 루프에서 빠져나옵니다

d. 고객센터

4. 콘솔 프로그램 서버측 코드

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. 소켓 인스턴스 객체를 인스턴스화하고 연결합니다

a. IP 주소와 포트(서버의 IP와 포트)를 생성합니다

b. 서버와 연결합니다.

2. 서버에서 보낸 메시지를 받습니다.

a.

실행 b. 루프를 사용하여 보낸 메시지를 가져옵니다. 메시지를 가져오기 위해 메서드를 호출할 때 바이트 변수 매개 변수를 컨테이너로 전달해야 합니다. 메서드 반환 값은 int이며, 획득한 유효한 바이트 수를 나타냅니다.

c. 유효한 바이트 수가 0이면 루프에서 빠져나옵니다

3. 서버로 메시지 보내기

a. 소켓 객체의 send() 메소드를 호출하여 직접 보내기

4. 코드

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

namespace SocketClient
{
 class Program
 {
  static void Main(string[] args)
  {
   Console.WriteLine("Hello World!");
   //创建实例
   Socket socketClient = new Socket(SocketType.Stream, ProtocolType.Tcp);
   IPAddress ip = IPAddress.Parse("192.168.0.111");
   IPEndPoint point = new IPEndPoint(ip, 2333);
   //进行连接
   socketClient.Connect(point);
   
   //不停的接收服务器端发送的消息
   Thread thread = new Thread(Recive);
   thread.IsBackground = true;
   thread.Start(socketClient);

   //不停的给服务器发送数据
   int i = 0;
   while (true)
   {
    i++;
    var buffter = Encoding.UTF8.GetBytes($"Test Send Message:{i}");
    var temp = socketClient.Send(buffter);
    Thread.Sleep(1000);
   }
   
  }


  /// <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);
    if (effective == 0)
    {
     break;
    }
    var str = Encoding.UTF8.GetString(buffer, 0, effective);
    Console.WriteLine(str);
   }
  }
 }
}

위 내용은 C# 소켓은 간단한 콘솔 케이스를 구현합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.