C# Socket网络编程实例

yizhihongxing

下面给大家详细讲解一下“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日

相关文章

  • c# RSA非对称加解密及XML&PEM格式互换方案

    关于“c#RSA非对称加解密及XML&PEM格式互换方案”的攻略,我们可以分为以下几个部分进行讲解: 1. RSA非对称加解密原理介绍 1.1 RSA加密原理 RSA加密公式为:$C = M ^ e$ mod $N$,其中: C为密文 M为明文 e为公钥,表示加密的指数 N为公钥,表示模数 mod为取模运算 1.2 RSA解密原理 RSA解密公式为:…

    C# 2023年5月15日
    00
  • Entity Framework映射TPH、TPT、TPC与继承类

    Entity Framework是一种ORM(Object Relational Mapping)框架,通过实体映射来将数据库中的表映射到代码中的类。当数据库中的表存在继承关系时,Entity Framework提供了三种继承映射策略:TPH、TPT、TPC。 TPH TPH(Table Per Hierarchy)策略将整个继承关系映射到同一张表中,该表有…

    C# 2023年6月3日
    00
  • C#并行编程之PLINQ(并行LINQ)

    那我就简要介绍下C#并行编程中的PLINQ,并提供两个示例说明。 什么是PLINQ? PLINQ,全名叫做Parallel LINQ,是C#中的一个并行编程库。它基于LINQ(Language Integrated Query,语言集成查询),可以让我们更方便地执行并行查询和数据操作。相较于手动编写多线程代码,PLINQ让我们的代码更加容易编写和维护,从而大…

    C# 2023年6月1日
    00
  • ASP.NET MVC学习笔记

    ASP.NET MVC学习笔记 – 完整攻略 什么是 ASP.NET MVC ASP.NET MVC 是一种基于模型-视图-控制器(Model-View-Controller,MVC)模式的架构,它提供了一种让 Web 应用程序的逻辑和表现分离的方式。ASP.NET MVC 通过区分应用程序的逻辑(控制器)和 UI(视图)来改进应用程序的可测试性和可维护性。…

    C# 2023年5月31日
    00
  • C# Path.GetTempFileName – 获取一个临时文件名

    Path.GetTempFileName() 是 C# 中的一个方法,用于生成一个唯一的临时文件名,以便在应用程序中保存临时数据。 该方法的返回值是一个字符串,包含一个全局唯一的文件名。临时文件名是基于系统的临时目录和指定的前缀生成的。 以下是使用 Path.GetTempFileName() 方法的完整攻略: 1. 获取临时文件名 string tmpFi…

    C# 2023年4月19日
    00
  • 详解如何在C#中使用投影(Projection)

    在C#中,投影(Projection)是一种将数据从一种形式转换为另一种形式的技术。投影可以用于将数据从一种数据结构转换为另一种数据结构,或者将数据从一种表示形式转换为另一种表示形式。本文将提供详解如何在C#中使用投影的完整攻略,包括创建投影、使用投影、处理投影等。同时,本文还提供两个示例,演示如何在C#中使用投影。 创建投影 要创建投影,可以使用以下方法:…

    C# 2023年5月15日
    00
  • 基于C#的socket编程的TCP异步的实现代码

    下面我将为您详细介绍基于 C# 的 Socket 编程的 TCP 异步实现代码的攻略。 1. 使用 Socket 类 在 C# 中,可以使用 Socket 类来实现网络编程。 创建 Socket:使用 Socket 类的 Socket 方法可以创建一个新的 Socket 对象。 绑定端口:使用 Bind 方法将端口与 Socket 关联起来。 开始监听:使用…

    C# 2023年5月15日
    00
  • Asp.Net中文本换行

    让我来给您讲解”Asp.Net中文本换行”的完整攻略吧。 1.使用Html的<br>标签 在Asp.Net中,我们可以使用Html的<br>标签来实现文本换行,这个标签可以在Razor视图中或在代码中使用。以下是使用<br>标签的示例: <p> 第一行文本<br> 第二行文本<br> 第…

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