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

yizhihongxing

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日

相关文章

  • C#实现百分比转小数的方法

    C#实现百分比转小数的方法 概述 在实际编码中,常常会遇到需要将百分数转换为小数的情况。本文将介绍C#中实现该功能的方法。 实现方法 方法一 使用数学计算方法将百分数转换为小数。 在C#中,我们可以使用除法将百分数转换为小数,具体方法如下: double percentage = 80.5; // 假设这是80.5% double decimalNumber…

    C# 2023年6月7日
    00
  • c# 类型转换

    下面是关于”c#类型转换”的完整攻略。 什么是类型转换? C#的类型转换是将一种数据类型的变量转换为另一种数据类型的变量。在C#中,类型转换有两种形式:隐式转换和显式转换。 隐式转换(Implicit Cast):是从小的数据类型向大的数据类型转换的,不需要进行任何特殊处理。C#程序员无需编写任何代码来实现隐式类型转换,开发环境会自动帮助我们实现。 显式转换…

    C# 2023年5月31日
    00
  • Unity UI实现循环播放序列图

    一、前言 在Unity中,UI组件可以说是比较常用的一个功能,其中序列图也是一种非常常见的UI组件。本文主要解决循环播放序列图的问题,其中的技术方案就是使用Unity的UGUI来实现。 二、方案 实现循环播放序列图,可以参考以下步骤: 创建一个空的Image对象,命名为SequenceImage。 创建一个Sprite数组,用于存储序列图的所有帧。 创建一个…

    C# 2023年6月3日
    00
  • .net开发:为程式码加上行号的方法详解

    为程式码加上行号一般是在编写代码时为了方便阅读和调试而进行的。下面给出两种在.NET开发中为程序代码加上行号的方法详解。 方法一 步骤一:添加代码 在你想要添加行号的代码处新增以下代码: string[] lines = textBox1.Text.Split(‘\n’); for (int i = 0; i < lines.Length; i++) …

    C# 2023年5月31日
    00
  • asp.net JSONHelper JSON帮助类

    ASP.NET JSONHelper JSON帮助类攻略 什么是JSONHelper JSON帮助类? JSONHelper JSON帮助类是一个为处理JSON数据而设计的类,可以简化JSON数据的生成、解析和转换。在ASP.NET应用程序中,JSONHelper JSON帮助类可以极大地简化编程工作,并提高代码的可读性和可维护性。 如何使用JSONHelp…

    C# 2023年5月31日
    00
  • C#使用JavaScriptSerializer序列化时的时间类型处理

    说明:本文主要介绍在 C# 中使用 JavaScriptSerializer 序列化时,如何处理时间类型。提供两种示例说明。 问题 在使用 C# 中的 JavaScriptSerializer 序列化对象时,如果包含时间类型,会遇到时间格式序列化异常的问题。而我们通常需要使用特定格式来序列化时间类型,例如 ISO 格式或自定义格式。 解决方法 方法一:通过自…

    C# 2023年5月31日
    00
  • ASP.NET Core中的Http缓存使用

    ASP.NET Core中的Http缓存使用攻略 在 ASP.NET Core 中,我们可以使用 HTTP 缓存来提高应用程序的性能和响应速度。本攻略将介绍如何在 ASP.NET Core 中使用 HTTP 缓存。 步骤 以下是使用 HTTP 缓存的步骤: 在 Startup.cs 文件中启用缓存。 在 Startup.cs 文件中的 ConfigureSe…

    C# 2023年5月17日
    00
  • Unity实现物体左右移动效果

    Unity是一款流行的游戏开发引擎,它可以实现许多游戏功能包括制作物体左右移动效果。下面将详细讲解Unity实现物体左右移动效果的完整攻略。 实现方式 在Unity中实现物体左右移动的基本方式是通过脚本在Update函数中改变物体的位置。因此,我们需要找到需要移动的对象,创建一个用于移动的脚本,并在脚本的Update函数中修改物体的位置。 1. 创建控制脚本…

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