C#实现Socket通信的解决方法

C#实现Socket通信的解决方法,可以分为以下几个步骤:

步骤一:创建Socket对象

首先,需要使用C#提供的System.Net命名空间下的Socket类创建一个Socket对象,可以使用以下代码:

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

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

其中,AddressFamily.InterNetwork表示使用IPv4地址族,SocketType.Stream表示使用流协议,ProtocolType.Tcp表示使用TCP协议。

步骤二:建立连接

接下来的步骤是建立Socket连接。可以使用以下代码:

IPAddress ipAddress = IPAddress.Parse("127.0.0.1");
int port = 8080;

IPEndPoint remoteEP = new IPEndPoint(ipAddress, port);

socket.Connect(remoteEP);

其中,ipAddress表示要连接的远程主机的IP地址,port表示要连接的远程主机的端口号,IPEndPoint表示远程主机的网络端点。

步骤三:发送和接收数据

连接建立完成后,可以使用Socket对象的Send()方法来发送数据,使用Receive()方法来接收数据。以下是一个发送和接收数据的示例:

// 发送数据
string msg = "Hello, World!";
byte[] msgBytes = Encoding.ASCII.GetBytes(msg);
socket.Send(msgBytes, msgBytes.Length, SocketFlags.None);

// 接收数据
byte[] buffer = new byte[1024];
int bytesRec = socket.Receive(buffer, SocketFlags.None);
string receivedMsg = Encoding.ASCII.GetString(buffer, 0, bytesRec);

Console.WriteLine(receivedMsg);

其中,socket.Send(msgBytes, msgBytes.Length, SocketFlags.None)表示发送数据,buffer表示接收数据的缓冲区,socket.Receive(buffer, SocketFlags.None)表示接收数据,string receivedMsg = Encoding.ASCII.GetString(buffer, 0, bytesRec)将接收到的字节数据转换为字符串。

示例1:简单的Socket服务器

下面是一个简单的Socket服务器示例:

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

class Program
{
    static void Main(string[] args)
    {
        TcpListener server = null;
        try
        {
            IPAddress ipAddress = IPAddress.Parse("127.0.0.1");
            int port = 8080;

            server = new TcpListener(ipAddress, port);
            server.Start();

            byte[] bytes = new byte[1024];
            string data = null;

            while (true)
            {
                Console.WriteLine("等待客户端连接...");

                TcpClient client = server.AcceptTcpClient();
                Console.WriteLine("客户端已连接!");

                data = null;

                NetworkStream stream = client.GetStream();

                int i;

                while ((i = stream.Read(bytes, 0, bytes.Length)) != 0)
                {
                    data = Encoding.ASCII.GetString(bytes, 0, i);
                    Console.WriteLine("接收到消息:{0}", data);

                    byte[] msg = Encoding.ASCII.GetBytes(data);

                    stream.Write(msg, 0, msg.Length);
                    Console.WriteLine("回复消息:{0}", data);
                }

                client.Close();
            }
        }

        catch (Exception e)
        {
            Console.WriteLine(e.ToString());
        }

        finally
        {
            server.Stop();
        }

        Console.ReadLine();
    }
}

这个服务器程序会监听本地IP地址的8080端口,并等待客户端连接。一旦客户端连接成功,它就会接收客户端发送的消息,并将它们发送回客户端。

示例2:简单的Socket客户端

下面是一个简单的Socket客户端示例:

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

class Program
{
    static void Main(string[] args)
    {
        try
        {
            IPAddress ipAddress = IPAddress.Parse("127.0.0.1");
            int port = 8080;

            TcpClient client = new TcpClient(ipAddress.ToString(), port);

            byte[] bytes = new byte[1024];
            string data = null;

            while (true)
            {
                Console.WriteLine("请输入要发送的消息:");

                data = Console.ReadLine();

                if (data == "exit")
                {
                    break;
                }

                NetworkStream stream = client.GetStream();

                byte[] msg = Encoding.ASCII.GetBytes(data);

                stream.Write(msg, 0, msg.Length);

                Console.WriteLine("消息已发送:{0}", data);

                int i;

                bytes = new byte[1024];
                while ((i = stream.Read(bytes, 0, bytes.Length)) != 0)
                {
                    data = Encoding.ASCII.GetString(bytes, 0, i);
                    Console.WriteLine("接收到的消息:{0}", data);
                }
            }

            client.Close();
        }
        catch (Exception e)
        {
            Console.WriteLine("连接出错: {0}", e.ToString());
        }

        Console.ReadLine();
    }
}

这个客户端程序会连接到一个本地地址和端口号为8080的服务器,并允许用户输入要发送的消息。它也会接收服务器发送的消息,并将它们显示在控制台上。当用户输入"exit"时,程序退出。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#实现Socket通信的解决方法 - Python技术站

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

相关文章

  • ASP.NET 返回随机数实现代码

    ASP.NET 返回随机数实现代码的完整攻略如下: 1. 生成随机数 可以使用 Random 类来生成伪随机数。在 ASP.NET 中,可以使用以下代码来生成一个介于 0 到 10 之间的随机整数: Random rand = new Random(); int randomNumber = rand.Next(0, 11); 这里,我们首先创建了一个 Ra…

    C# 2023年5月31日
    00
  • C# Linq的Distinct()方法 – 返回序列中不同的元素

    当我们需要在C#中从一个集合中筛选出不同的元素,Linq的Distinct()方法就非常适用了。在这里,我将为您提供C#Linq的Distinct()方法的完整攻略,包括定义、返回值、语法、使用方法和示例。 定义 Distinct()方法是Linq用于从集合中返回不同元素的方法之一。该方法基于对象的值,比较并取消重复出现的元素。不同于其他返回元素的方法,Di…

    C# 2023年4月19日
    00
  • C# 如何使用 Index 和 Range 简化集合操作

    C# 8.0 引入了一种新的索引(Index)和范围(Range)语法,这两个语法可以方便地获取集合中的特定元素,从而简化集合的操作。接下来,我将为大家详细讲解如何使用 Index 和 Range 简化集合操作。 Index 和 Range 的语法 Index 和 Range 的语法非常简单,可以用以下两种方式来表示: 使用索引,例如使用“^”符号表示索引的…

    C# 2023年6月6日
    00
  • AutoCAD二次开发系列教程01-如何在AutoCAD中输出Hello World

    目录 01项目环境准备 02代码示例 03输出示例 04总结 05源码地址 01项目环境准备 A.开发使用的软件:AutoCAD2016、VisualStudio2022 B.建立依赖的本地库(提前从AutoCAD软件安装目录拷贝开发时需要使用的库,如:accoremgd.dll) C.创建新的类库(.Net Framework),注意不同AutoCAD版本…

    C# 2023年5月5日
    00
  • wxPython实现文本框基础组件

    下面我会详细讲解“wxPython实现文本框基础组件”的完整攻略。 标题 1. 前言 wxPython 是基于 Python 语言的一种 GUI 工具包。使用 wxPython 可以方便地进行图形用户界面的开发。本文介绍了如何使用 wxPython 实现文本框基础组件。在本示例中,使用 Python 3.x 和 wxPython 4.x 版本进行演示。 2.…

    C# 2023年5月31日
    00
  • C# Clear():从集合中移除所有元素

    C#中的Clear()方法是一个实例方法,通常用于清空某些数据结构中的元素,例如字符串、数组、集合等。以下是C# Clear()的完整攻略,包括用法、示例和注意事项。 用法 Clear()方法是通过.运算符调用的实例方法,该方法不接受参数,返回值为void类型。可以使用Clear()方法来清空String、StringBuilder、List、Diction…

    C# 2023年4月19日
    00
  • ASP.NET 计划任务实现方法(不使用外接程序,.net内部机制实现)

    ASP.NET计划任务是指在后台自动执行一些指定的操作,例如定时清理临时文件、备份数据库等。在ASP.NET中,实现计划任务有多种方式,包括使用第三方外接程序或者利用.NET内部机制。 下面详细讲解如何使用.NET内部机制实现ASP.NET计划任务。 第一步:创建运行时间表达式 .NET内部机制实现计划任务依赖于时间表达式,时间表达式能够指定时、分、秒、月、…

    C# 2023年5月31日
    00
  • C# 中AutoMapper的使用方法

    下面是“C# 中AutoMapper的使用方法”的完整攻略: 1. AutoMapper 简介 AutoMapper 是一个 .NET 框架下的对象映射工具,它的主要任务是通过配置文件自动地映射实体之间的属性,省去繁琐的手工编写属性映射代码。使用 AutoMapper 可以极大地提高代码的复用性以及开发效率。 2. 安装 AutoMapper 使用 NuGe…

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