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日

相关文章

  • MASAMinimalAPI:创建MinimalAPI项目

    项目准备 1.创建项目,选择webapi。取消勾选使用控制器。创建minimal Api项目 2.创建成功后MinimalAPI的接口直接写在program.cs中 3.引入nuget包:Masa.Contrib.Service.MinimalAPIs MinimalAPI改造 1. 在program.cs中加入以下内容 将原有的 var app = bui…

    C# 2023年5月5日
    00
  • 详解asp.net core封装layui组件示例分享

    详解ASP.NET Core封装Layui组件示例分享 在本攻略中,我们将深入讲解如何在ASP.NET Core中封装Layui组件,并提供两个示例说明。 什么是Layui? Layui是一款轻量级的前端UI框架,具有简单易用、高效快捷、兼容性好等特点。它提供了丰富的UI组件和工具,可以帮助开发人员快速构建美观、易用的Web应用程序。 如何封装Layui组件…

    C# 2023年5月17日
    00
  • Go语言流程控制语句

    Go语言流程控制语句 在Go语言中,流程控制是任何编程语言中都不可避免的一部分。Go语言提供了几种流程控制语句,包括if语句、for循环、switch语句、break语句、continue语句和goto语句。本文将详细介绍这些语句及其使用场景。 if语句 if语句是Go语言中最基本也是最常用的流程控制语句之一,它用于根据一个条件判断来决定是否执行某段代码。i…

    C# 2023年6月7日
    00
  • c#利用Session对象实现购物车的方法示例

    下面就详细讲解如何利用Session对象实现C#购物车的方法。 1. Session对象的介绍 Session对象用于存储在用户访问web应用程序期间的临时数据。在用户访问web浏览器时,Session对象为每个用户创建一个唯一的会话ID。这个ID可以被存储在客户端cookie中,以便它可以被web浏览器发送回服务器来检索Session对象。 2. 创建一个…

    C# 2023年5月31日
    00
  • C#队列Queue用法实例分析

    C#队列Queue用法实例分析 什么是队列? 队列(queue)是一种先进先出(First-In-First-Out,FIFO)的数据结构,和栈(stack)不同,队列的两端分别称为队首(front)和队尾(rear)。在队列中,新元素插入到队尾(rear),而队首的元素一直存在队列中,直到到达队列的结尾。要从队列中删除元素,需要从队首开始,一直到要删除的元…

    C# 2023年6月7日
    00
  • C#生成Word文档代码示例

    下面是关于“C#生成Word文档代码示例”的完整攻略: 第一步:安装和引用必备组件 要使用C#生成Word文档,需要安装Open XML SDK 2.5 for Microsoft Office。这个组件提供了一个C# API,可以在应用程序中使用C#代码创建、读取和编辑Microsoft Office Word文档。 安装完成后,可以在Visual Stu…

    C# 2023年5月31日
    00
  • c# 静态类的使用场景

    下文是关于”C# 静态类的使用场景”的完整攻略。 什么是 C# 静态类 在 C# 中,静态类(Static Class)是指不能被实例化的类,该类中的所有成员都必须是静态的。同时,静态类不能被继承,因此它不能有实例。静态类通常用于封装工具方法,使这些方法可以作为应用程序的公用工具使用。 C# 静态类的使用场景 静态类的主要作用是封装公用的工具方法,以方便其他…

    C# 2023年5月31日
    00
  • C#跨PC远程调用程序并显示UI界面

    下面是详细的攻略。 概述 跨PC远程调用程序并显示UI界面需要使用C#语言,具体实现主要依赖于.NET Remoting和WCF两种技术。 .NET Remoting技术在.NET Framework 4.0之后已经被标记为过时,官方推荐使用WCF进行远程调用和通信。因此,在本文中,我们将主要使用WCF技术进行跨PC远程调用。 步骤 下面是跨PC远程调用程序…

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