C#实现的Socket服务器端、客户端代码分享

接下来我将详细讲解如何实现C# Socket服务器端、客户端代码的分享。

一、概述

Socket是一种应用程序编程接口(API),用于在两个计算机之间进行网络通信。在C#中,可以使用System.Net.Sockets命名空间来创建和使用Socket。本攻略将介绍如何使用C#创建一个简单的Socket服务器端和客户端,并分享相关代码。

二、Socket服务器端

要创建一个Socket服务器端,我们需要执行以下步骤:

1.创建服务器端Socket对象

Socket serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

创建一个IPv4类型的Socket对象,使用TCP协议进行通信。

2.绑定IP地址和端口号

IPHostEntry host = Dns.GetHostEntry(Dns.GetHostName());
IPAddress ipAddress = host.AddressList[0];
IPEndPoint ipEndPoint = new IPEndPoint(ipAddress, 12345);
serverSocket.Bind(ipEndPoint);

为Socket对象绑定本机IP地址和端口号。在本例中,我们使用本机的第一个IP地址和端口号为12345。实际上,我们可以使用任何可用的IP地址和端口号,只要它们没有被其他进程使用。

3.监听来自客户端的连接

serverSocket.Listen(10);

第一个参数表示连接队列的最大长度,第二个参数表示服务器端开始监听的端口号。

4.接受客户端连接

Socket clientSocket = serverSocket.Accept();

服务器端会一直阻塞,直到有客户端连接到来,此时会返回一个客户端Socket对象用于后面的通信。

5.接收客户端发送的数据

byte[] buffer = new byte[1024];
int length = clientSocket.Receive(buffer);
string message = Encoding.UTF8.GetString(buffer, 0, length);

使用客户端Socket对象的Receive方法接收客户端发送的数据,并将其转换为字符串。

6.发送数据给客户端

byte[] buffer = Encoding.UTF8.GetBytes("Hello Client!");
clientSocket.Send(buffer);

使用客户端Socket对象的Send方法将数据发送给客户端。

示例1

下面的示例演示了如何实现一个简单的Socket服务器端,只接收客户端发送的数据,并将其显示在控制台上。

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

namespace SocketServerDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            Socket serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            IPHostEntry host = Dns.GetHostEntry(Dns.GetHostName());
            IPAddress ipAddress = host.AddressList[0];
            IPEndPoint ipEndPoint = new IPEndPoint(ipAddress, 12345);
            serverSocket.Bind(ipEndPoint);
            serverSocket.Listen(10);
            Console.WriteLine("Server started and listening on: " + ipEndPoint);  
            Socket clientSocket = serverSocket.Accept();
            Console.WriteLine("Client connected: " + clientSocket.RemoteEndPoint);         
            byte[] buffer = new byte[1024];
            int length = clientSocket.Receive(buffer);
            string message = Encoding.UTF8.GetString(buffer, 0, length);
            Console.WriteLine("Client says: " + message);
            clientSocket.Close();   
            serverSocket.Close();
            Console.ReadLine();
        }
    }
}

三、Socket客户端

要创建一个Socket客户端,我们需要执行以下步骤:

1.创建客户端Socket对象

Socket clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

创建一个IPv4类型的Socket对象,使用TCP协议进行通信。

2.连接服务器端

IPHostEntry host = Dns.GetHostEntry("localhost");
IPAddress ipAddress = host.AddressList[0];
IPEndPoint ipEndPoint = new IPEndPoint(ipAddress, 12345);
clientSocket.Connect(ipEndPoint);

使用服务器端IP地址和端口号建立连接。在本例中,我们将服务器端地址设置为localhost,端口号为12345。

3.发送数据给服务器端

byte[] buffer = Encoding.UTF8.GetBytes("Hello Server!");
clientSocket.Send(buffer);

使用客户端Socket对象的Send方法将数据发送给服务器端。

4.接收服务器端发送的数据

byte[] buffer = new byte[1024];
int length = clientSocket.Receive(buffer);
string message = Encoding.UTF8.GetString(buffer, 0, length);

使用客户端Socket对象的Receive方法接收服务器端发送的数据,并将其转换为字符串。

示例2

下面的示例演示了如何实现一个简单的Socket客户端,向服务器端发送一条消息,并将服务器端的响应显示在控制台上。

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

namespace SocketClientDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            Socket clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            IPHostEntry host = Dns.GetHostEntry("localhost");
            IPAddress ipAddress = host.AddressList[0];
            IPEndPoint ipEndPoint = new IPEndPoint(ipAddress, 12345);
            clientSocket.Connect(ipEndPoint);
            Console.WriteLine("Connected to server: " + ipEndPoint);
            byte[] buffer = Encoding.UTF8.GetBytes("Hello Server!");
            clientSocket.Send(buffer);
            byte[] buffer2 = new byte[1024];
            int length = clientSocket.Receive(buffer2);
            string message = Encoding.UTF8.GetString(buffer2, 0, length);
            Console.WriteLine("Server says: " + message);
            clientSocket.Close();
            Console.ReadLine();
        }
    }
}

四、总结

本攻略介绍了如何使用C#创建一个简单的Socket服务器端和客户端,并分享了相关的代码。通过这些示例,您应该可以了解如何使用C#实现Socket通信,并开始构建更复杂的网络应用程序。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#实现的Socket服务器端、客户端代码分享 - Python技术站

(0)
上一篇 2023年6月7日
下一篇 2023年6月7日

相关文章

  • C#实现Redis的分布式锁

    C#实现Redis的分布式锁 概述 在分布式系统中,为了保证数据的一致性,在某个时间段内只有一个客户端能够对数据进行操作。这种机制称为分布式锁。Redis非常适合实现分布式锁的机制,以下是C#实现Redis分布式锁的详细攻略。 Redis实现分布式锁的原理 Redis实现分布式锁的原理可以概括成两个步骤: 通过SETNX方法在共享资源上创建一个锁标记,创建成…

    C# 2023年6月1日
    00
  • C#并行编程Task类用法介绍

    标题:C#并行编程Task类用法介绍 什么是Task类? Task类是C#并行编程中最重要的类之一,它可以用来表示一个异步操作或者一组异步操作,并且可以方便地实现并行编程。 如何使用Task类? 使用Task类有以下几个基本步骤: 步骤一:定义异步任务 需要定义一个表示异步任务的委托,例如: Func<int, int> computeDeleg…

    C# 2023年5月15日
    00
  • ASP.NET MVC实现登录后跳转到原界面

    ASP.NET MVC实现登录后跳转到原界面的完整攻略如下: 首先,在需要登录才能访问的控制器或方法上添加[Authorize]特性。例如: [Authorize] public class HomeController : Controller { public ActionResult Index() { return View(); } } 这样,当用…

    C# 2023年5月12日
    00
  • WCF中使用nettcp协议进行通讯的方法

    下面是关于“WCF中使用nettcp协议进行通讯的方法”的完整攻略,包含两个示例。 1. 什么是nettcp协议 nettcp协议是一种用于WCF通信的传输协议。nettcp协议是一种高性能、可靠的协议,适用于在同一局域网内的通信。nettcp协议使用二进制编码,可以提高通信效率。 2. 配置WCF服务使用nettcp协议 以下是配置WCF服务使用nettc…

    C# 2023年5月15日
    00
  • C# String.Compare()方法: 比较两个字符串,返回比较结果

    C#中的String.Compare() Compare() 方法是C#中 string 类的成员方法之一,它用于比较两个字符串,并返回一个整数值来表示它们之间的关系。在比较字符串时,该方法会将文本视为由独立的字符组成的序列,而不是单个字符串。 下面是该方法的语法: public static int Compare(string strA, string …

    C# 2023年4月19日
    00
  • c#防止多次运行代码收集分享

    下面是“c#防止多次运行代码收集分享”的完整攻略。 为什么需要防止多次运行代码收集分享? 在一些情况下,我们可能需要避免多次运行同一段代码,例如: 程序中涉及到计费、统计等需要唯一记录的操作。 程序中涉及到文件、资源等需要避免重复操作的情况。 这时就需要在代码中增加防止多次运行的机制。 如何防止多次运行代码收集分享? 方法一:使用静态标志位 使用静态标志位的…

    C# 2023年6月7日
    00
  • C# MVC模式中应该怎样区分应用程序逻辑(Controller层)和业务逻辑(Model层)?

    在C#MVC模式中,Controller层和Model层分别处理应用程序逻辑和业务逻辑。它们之间的区分至关重要,这样我们可以更容易地维护和扩展我们的应用程序。下面是一些建议来帮助你更好地区分两层的逻辑。 应用程序逻辑(Controller层) Controller层是MVC模式中应用程序的核心,它处理用户请求和响应。应用程序的逻辑应该仅仅存在于Control…

    C# 2023年5月15日
    00
  • C#高性能动态获取对象属性值的步骤

    下面是关于C#高性能动态获取对象属性值的步骤的完整攻略。 1. 利用反射获取属性信息 在C#中,我们可以使用反射来获取指定对象的属性信息,包括属性的名称、类型、值等。反射是C#编程中的一个重要概念,可以通过System.Reflection命名空间下的Type类、MethodInfo类、PropertyInfo类等相关类型来实现。 示例代码: using S…

    C# 2023年6月1日
    00
合作推广
合作推广
分享本页
返回顶部