C# Socket网络编程实例

下面给大家详细讲解一下“C# Socket网络编程实例”的完整攻略。

引言

在进行网络编程时,我们经常需要使用到Socket
,它是一种协议栈的API,它提供了网络编程在应用层的解决方案。在C#语言中,有着完备的Socket基础类库,我们可以简单的使用C# Socket类来进行网络编程。

Socket 常用方法

1. 创建 Socket

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

2. 连接 Socket

IPAddress ip = IPAddress.Parse("127.0.0.1");//待连接的IP地址
IPEndPoint port = new IPEndPoint(ip, 5000);//待连接的端口号
socket.Connect(port);

3. 发送数据

string sendData = "你好,这是一个网络编程的实例!";
byte[] data = Encoding.ASCII.GetBytes(sendData);
socket.Send(data);

4. 接收数据

byte[] recvBytes = new byte[1024];
int byteRec = socket.Receive(recvBytes);
string recvData = Encoding.ASCII.GetString(recvBytes, 0, byteRec);

5. 释放 Socket

socket.Shutdown(SocketShutdown.Both);
socket.Close();

C# Socket编程实例

示例一:Socket TCP通信示例

服务端代码

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

namespace Server
{
    class Program
    {
        static void Main(string[] args)
        {
            Socket serverSocket = null;
            try
            {
                serverSocket = new Socket(AddressFamily.InterNetwork,
                    SocketType.Stream, ProtocolType.Tcp);
                IPEndPoint ipEndPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8000);
                serverSocket.Bind(ipEndPoint);
                serverSocket.Listen(20);
                Console.WriteLine("服务端已启动,等待客户端连接...");

                while (true)
                {
                    Socket clientSocket = serverSocket.Accept();
                    string str = "欢迎连接服务端!";
                    byte[] buffer = Encoding.UTF8.GetBytes(str);
                    int iLength = clientSocket.Send(buffer);
                    Console.WriteLine("发送消息给客户端成功,消息内容:{0}", str);
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("服务器出现异常,异常信息:{0}", ex.Message);
            }
            finally 
            {
                serverSocket?.Close();
            }
        }
    }
}

客户端代码

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

namespace Client
{
    class Program
    {
        static void Main(string[] args)
        {
            Socket clientSocket = null;
            try
            {
                clientSocket = new Socket(AddressFamily.InterNetwork, 
                    SocketType.Stream, ProtocolType.Tcp);
                IPEndPoint ipEndPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8000);
                clientSocket.Connect(ipEndPoint);

                if (clientSocket.Connected)
                {
                    byte[] buffer = new byte[1024];
                    int iLength = clientSocket.Receive(buffer);
                    string str = Encoding.UTF8.GetString(buffer, 0, iLength);
                    Console.WriteLine("接收到服务端消息:{0}", str);
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("客户端出现异常,异常信息:{0}", ex.Message);
            }
            finally 
            {
                clientSocket?.Close();
            }
        }
    }
}

示例二:Socket UDP通信示例

服务端代码

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

namespace Server
{
    class Program
    {
        static void Main(string[] args)
        {
            Socket server = new Socket(AddressFamily.InterNetwork, 
                SocketType.Dgram, ProtocolType.Udp);
            IPEndPoint endPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8080);
            server.Bind(endPoint);
            Console.WriteLine("服务端已启动,等待数据接收...");

            IPEndPoint iep = new IPEndPoint(IPAddress.Any, 0);
            EndPoint ep = (EndPoint)iep;

            while (true)
            {
                byte[] buffer = new byte[1024];
                int iLength = server.ReceiveFrom(buffer, ref ep);
                string message = Encoding.Default.GetString(buffer, 0, iLength);
                Console.WriteLine("接受到客户端消息:{0}", message);
            }
        }
    }
}

客户端代码

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

namespace Client
{
    class Program
    {
        static void Main(string[] args)
        {
            Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);

            IPEndPoint iep = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8080);
            string message = "Hello server";
            byte[] data = Encoding.Default.GetBytes(message);
            client.SendTo(data, data.Length, SocketFlags.None, iep);
            Console.WriteLine("已经向服务端发送数据:{0}", message);
        }
    }
}

以上是本次的完整攻略,希望对你有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C# Socket网络编程实例 - Python技术站

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

相关文章

  • 使用 HttpReports 监控 .NET Core 应用程序的方法

    当我们在开发 .NET Core 应用程序时,特别是在部署到生产环境后,我们需要对应用程序的运行时状态和表现进行监控。这种监控对于保持应用程序的稳定和高效运行至关重要。在这种情况下,使用 HttpReports 是一个好的选择。 以下是使用 HttpReports 监控 .NET Core 应用程序的方法和步骤: 一、安装 HttpReports 安装 Ht…

    C# 2023年6月3日
    00
  • ASP.NET MVC使用Log4Net记录异常日志并跳转到静态页

    下面是ASP.NET MVC使用Log4Net记录异常日志并跳转到静态页的完整攻略。 前置条件 一个已经配置好了的ASP.NET MVC项目 Log4Net库的安装和配置 步骤 第一步:创建Log4Net配置文件 在项目根目录下创建一个Log4Net.config文件,内容为: <?xml version="1.0" encodin…

    C# 2023年6月3日
    00
  • C#中利用LINQ to XML与反射把任意类型的泛型集合转换成XML格式字符串的方法

    要利用LINQ to XML与反射将任意类型的泛型集合转换成XML格式字符串,需要按照以下步骤实现: 第一步:创建XML文档对象 首先,我们需要创建一个XDocument对象,这个对象将表示我们要转换的XML文档,然后通过它来操作整个XML文档实现转换。 XDocument doc = new XDocument(new XElement("Roo…

    C# 2023年6月1日
    00
  • ASP.Net MVC 布局页、模板页使用方法详细介绍

    下面我将详细讲解“ASP.Net MVC布局页、模板页使用方法详细介绍”的完整攻略,过程中将包含两个示例的说明。 ASP.Net MVC布局页 ASP.Net MVC布局页用于定义网站的整体布局,例如头部、底部、导航等元素,以及将内容区域占据的html、css进行分离。 具体实现步骤如下: 创建一个布局页 在MVC项目的Views/Shared文件夹下,右键…

    C# 2023年5月31日
    00
  • redis缓存数据库中数据的方法

    Redis缓存数据库中数据的方法 Redis 是一种高性能的缓存数据库,它支持多种数据结构和操作,可以用于缓存、消息队列、分布式锁等场景。本攻略将介绍 Redis 缓存数据库中数据的方法,包括数据的添加、查询、修改和删除等操作。 连接 Redis 在进行 Redis 操作之前,需要先连接 Redis 数据库。可以使用 StackExchange.Redis …

    C# 2023年5月17日
    00
  • 在SQL Server中使用CLR调用.NET方法实现思路

    在SQL Server中使用CLR调用.NET方法可以扩展数据库的功能,下面是实现思路的完整攻略: 1.启用CLR 要在SQL Server中使用CLR,首先需要在服务器级别启用CLR。可以通过以下步骤启用CLR: 在SQL Server Management Studio中打开一个新的查询窗口。 运行以下T-SQL代码: sp_configure ‘clr…

    C# 2023年6月3日
    00
  • ASP.NET Core 过滤器中使用依赖注入知识点总结

    ASP.NET Core 过滤器中使用依赖注入知识点总结 ASP.NET Core是一个跨平台的Web应用程序框架,它可以帮助我们构建高性能的Web应用程序。过滤器是ASP.NET Core中的一个重要概念,它可以帮助我们在请求管道中添加逻辑。本攻略将详细介绍如何在ASP.NET Core过滤器中使用依赖注入。 环境要求 在进行ASP.NET Core过滤器…

    C# 2023年5月17日
    00
  • ASP.NET MVC从控制器中获取URL值

    ASP.NET MVC是一个非常流行的Web应用程序框架,它可以帮助开发者创建开放式网络应用程序。在ASP.NET MVC中,我们可以利用控制器来获取URL的值,本篇攻略将为您提供详细的解释。 方法一:QueryString参数获取 我们可以使用Request对象的Querystring(查询字符串)来获取URL中的参数。查询字符串是指在 URL 中包含的键…

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