C#基于Socket套接字的网络通信封装

C#基于Socket套接字的网络通信封装

本文将介绍如何使用C#基于Socket套接字的网络通信封装进行网络编程,包括创建Socket、连接服务器、传输数据等操作。

创建Socket

在C#中,使用Socket类来创建Socket。其中SocketType指定了Socket的类型(StreamDgramRaw等),ProtocolType指定了使用的协议(TCPUDP等)。

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

AddressFamily.InterNetwork表示IP v4地址族,即IPv4;SocketType.Stream表示流类型,即面向连接的socket,需要使用TCP协议。如果使用UDP协议,需要将ProtocolType参数设置为SocketType.Dgram

连接服务器

使用Connect方法连接目标服务器。要连接远程服务器,需要指定服务器的IP地址和端口号。

IPAddress ip = IPAddress.Parse("127.0.0.1");
IPEndPoint endPoint = new IPEndPoint(ip, 5000);
socket.Connect(endPoint);

其中IPAddress.Parse("127.0.0.1")指定了服务器的IP地址,该地址为本地主机地址(即localhost)。IPEndPoint结构体指定了服务器的IP地址和端口号。

发送数据

使用Send方法可以向服务器发送数据。SendMessage为自定义方法,用于将字符串转换为字节数组并发送至服务器。

string message = "Hello, Server";
byte[] data = Encoding.ASCII.GetBytes(message);
int sentLength = socket.Send(data);

接收数据

使用Receive方法可以从服务器接收数据。ReceiveMessage为自定义方法,用于接收数据并将字节数组转换为字符串。

byte[] buffer = new byte[1024];
int receivedLength = socket.Receive(buffer);
string message = Encoding.ASCII.GetString(buffer, 0, receivedLength);
Console.WriteLine($"Received message: {message}");

示例说明

以下是两个示例,分别为服务器端和客户端的代码。

服务器端示例

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

namespace SocketServer
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                IPAddress ip = IPAddress.Parse("127.0.0.1");
                IPEndPoint endPoint = new IPEndPoint(ip, 5000);
                Socket listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                listener.Bind(endPoint);
                listener.Listen(10);
                Console.WriteLine("Server started...");

                while (true)
                {
                    Socket socket = listener.Accept();
                    Console.WriteLine($"New client connected: {socket.RemoteEndPoint}");

                    byte[] buffer = new byte[1024];
                    int receivedLength = socket.Receive(buffer);
                    string message = Encoding.ASCII.GetString(buffer, 0, receivedLength);
                    Console.WriteLine($"Received message from client {socket.RemoteEndPoint}: {message}");

                    message = $"Server received your message '{message}'";
                    byte[] data = Encoding.ASCII.GetBytes(message);
                    int sentLength = socket.Send(data);
                    Console.WriteLine($"Sent message to client {socket.RemoteEndPoint}: {message}");

                    socket.Shutdown(SocketShutdown.Both);
                    socket.Close();
                    Console.WriteLine($"Client disconnected: {socket.RemoteEndPoint}");
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }
    }
}

客户端示例

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

namespace SocketClient
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                IPAddress ip = IPAddress.Parse("127.0.0.1");
                IPEndPoint endPoint = new IPEndPoint(ip, 5000);
                Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                socket.Connect(endPoint);

                string message = "Hello, Server";
                byte[] data = Encoding.ASCII.GetBytes(message);
                int sentLength = socket.Send(data);
                Console.WriteLine($"Sent message to server: {message}");

                byte[] buffer = new byte[1024];
                int receivedLength = socket.Receive(buffer);
                message = Encoding.ASCII.GetString(buffer, 0, receivedLength);
                Console.WriteLine($"Received message from server: {message}");

                socket.Shutdown(SocketShutdown.Both);
                socket.Close();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }
    }
}

以上为基于Socket套接字的网络通信封装的完整攻略和示例说明。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#基于Socket套接字的网络通信封装 - Python技术站

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

相关文章

  • asp.net得到本机数据库实例的两种方法代码

    下面我将详细讲解如何在ASP.NET中得到本机数据库实例的两种方法代码。 方法一:使用LocalDB连接数据库 1. 安装LocalDB 首先,我们需要在本机安装LocalDB。可以在微软的官方网站上下载并安装:https://www.microsoft.com/en-us/sql-server/sql-server-downloads 2. 创建数据库 安…

    C# 2023年5月31日
    00
  • C#设置MDI子窗体只能弹出一个的方法

    要实现C#中的MDI子窗体只能弹出一个的功能,可以通过以下步骤来实现: 首先,需要在程序启动时禁用MDI窗体的自动创建子窗体的功能,以便手动创建并管理子窗体。可以通过设置IsMdiContainer属性为false实现。 this.IsMdiContainer = false; 在需要弹出子窗体的地方,先检查当前是否已经存在同类型的子窗体,如果存在则不再弹出…

    C# 2023年5月15日
    00
  • timespan使用方法详解

    TimeSpan使用方法详解 什么是TimeSpan? TimeSpan是.NET Framework中表示时间间隔的一个结构体,它用于表示两个时间点之间的时间间隔,或一段时间的持续时间。 TimeSpan包括天数、小时数、分钟数、秒数和毫秒数,可以使用各种方式构造TimeSpan实例。TimeSpan在.NET平台中被广泛用于处理时间。 在代码中创建Tim…

    C# 2023年6月1日
    00
  • C#中动态数组用法实例

    C#中动态数组用法实例 什么是动态数组 在C#中,数组是一种固定长度的数据结构,一旦确定长度就无法改变。而动态数组则是一种长度可以随着数据的增加自动扩容的数组。 C#中实现动态数组的常用方式是使用List类,该类可以随时添加或删除元素,而不需要手动管理数组容量。 使用List类 创建一个List对象 List<int> myList = new …

    C# 2023年5月31日
    00
  • 详解WCF服务中的svc文件

    当我们创建一个WCF服务时,会自动在项目中生成一个.svc文件,这个文件是我们用来定义服务的元数据信息以及服务终结点的文件。在本次攻略中,我们将详细讲解svc文件的作用,以及如何正确配置svc文件来使服务正常运行。 什么是svc文件 .svc文件是WCF服务中的元数据信息文件,它用于定义服务的元数据信息和终结点信息。服务的元数据信息主要包括服务契约(Serv…

    C# 2023年5月15日
    00
  • CommunityToolkit.Mvvm8.1 IOC依赖注入控制反转(5)

      本系列文章导航 https://www.cnblogs.com/aierong/p/17300066.html https://github.com/aierong/WpfDemo (自我Demo地址) 希望提到的知识对您有所提示,同时欢迎交流和指正 作者:aierong出处:https://www.cnblogs.com/aierong     说明 …

    C# 2023年4月22日
    00
  • C# Linq的Join()方法 – 将两个序列中的元素联接在一起

    C#中的Linq提供了Join()方法来实现两个数据源之间的连接。Join()方法接受四个参数,可以在连接过程中指定连接的条件以及返回的结果类型等信息。接下来,我将为您提供一个完整的攻略来详细讲解C# Linq的Join()方法。 Join()方法的基本语法 下面是Join()方法的基本语法: var result = from s in source1 j…

    C# 2023年4月19日
    00
  • ASP.NET CORE WEBAPI 登录 JWT 鉴权 ,接口权限验证

    JWT的简单使用 介绍 当今Web开发中,API的使用越来越广泛,而API的安全性也变得越来越重要。其中,JWT(JSON Web Token)鉴权和授权是一种常见的解决方案。 本篇文章将会介绍JWT鉴权和授权的原理、实现方式以及注意事项。 什么是JWT? JWT是一种基于JSON格式的开放标准(RFC7519),用于在网络上传递声明信息的一种简洁、自包含的…

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