C#基于Sockets类实现TCP通讯

C#基于Sockets类实现TCP通讯攻略

TCP/IP协议是网络编程的基石,它提供了可靠的传输和连接保障。在C#语言中,可以使用Sockets类库进行网络编程。接下来,我们将详细讲解如何基于Sockets类实现TCP通讯。

步骤一:创建套接字

套接字是网络通讯的基础设施,它代表了通讯的终点。在C#中,可以通过Socket类进行套接字的创建和管理。

IPAddress ipAddress = IPAddress.Parse("127.0.0.1");
int port = 12345;
Socket serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
serverSocket.Bind(new IPEndPoint(ipAddress, port));
serverSocket.Listen(10);

Socket clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
clientSocket.Connect(ipAddress, port);

以上代码创建了一个服务端套接字和一个客户端套接字,它们分别绑定了本机的IP地址和端口,并且通过Connect方法连接了服务端的监听端口。

步骤二:发送和接收数据

套接字创建完成后,就可以进行数据的发送和接收了。

发送数据

使用套接字的Send方法可以向远程主机发送数据。以下是一个服务端向客户端发送消息的示例:

string message = "Hello, client!";
byte[] data = Encoding.UTF8.GetBytes(message);
clientSocket.Send(data);

接收数据

使用套接字的Receive方法可以接收来自远程主机的数据。以下是一个客户端接收服务端消息的示例:

byte[] buffer = new byte[1024];
int length = clientSocket.Receive(buffer);
string message = Encoding.UTF8.GetString(buffer, 0, length);
Console.WriteLine(message);

示例一:C# TCP客户端示例

以下是一个使用Sockets类库实现的C# TCP客户端示例:

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

namespace ClientDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            IPAddress ipAddress = IPAddress.Parse("127.0.0.1");
            int port = 12345;
            Socket clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            clientSocket.Connect(ipAddress, port);
            Console.WriteLine("连接服务器成功!");

            while (true)
            {
                Console.Write("请输入要发送的消息:");
                string message = Console.ReadLine();
                byte[] data = Encoding.UTF8.GetBytes(message);
                clientSocket.Send(data);

                byte[] buffer = new byte[1024];
                int length = clientSocket.Receive(buffer);
                message = Encoding.UTF8.GetString(buffer, 0, length);
                Console.WriteLine($"接收到服务器的消息:{message}");
            }
        }
    }
}

示例二:C# TCP服务端示例

以下是一个使用Sockets类库实现的C# TCP服务端示例:

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

namespace ServerDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            IPAddress ipAddress = IPAddress.Parse("127.0.0.1");
            int port = 12345;
            Socket serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            serverSocket.Bind(new IPEndPoint(ipAddress, port));
            serverSocket.Listen(10);
            Console.WriteLine("启动服务端成功,等待客户端连接...");

            while (true)
            {
                Socket clientSocket = serverSocket.Accept();
                Console.WriteLine($"客户端{((IPEndPoint)clientSocket.RemoteEndPoint).Address.ToString()}已连接!");

                byte[] buffer = new byte[1024];
                int length = clientSocket.Receive(buffer);
                string message = Encoding.UTF8.GetString(buffer, 0, length);
                Console.WriteLine($"接收到客户端的消息:{message}");

                message = $"你好,{message}";
                byte[] data = Encoding.UTF8.GetBytes(message);
                clientSocket.Send(data);

                clientSocket.Shutdown(SocketShutdown.Both);
                clientSocket.Close();
            }
        }
    }
}

通过以上两个示例,我们可以清楚地理解基于Sockets类实现TCP通讯的核心思想和过程。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#基于Sockets类实现TCP通讯 - Python技术站

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

相关文章

  • asp.net保存远程图片的代码

    下面是ASP.NET保存远程图片的完整攻略。 1. 核心思路 ASP.NET通过HttpWebRequest对象获取远程图片的数据流,再通过FileStream对象将数据流写入本地文件中。 2. 代码实现 2.1. 方法一 using System; using System.IO; using System.Net; public static bool …

    C# 2023年5月31日
    00
  • C#常用目录文件操作类实例

    C#常用目录文件操作类实例 在C#的编程过程中,我们需要对文件和目录进行操作。为了方便开发,C#提供了一些常用的目录文件操作类。本文将详细介绍这些类的使用方法,并给出两个实例。 目录操作类 Directory类 Directory类提供了很多操作目录的方法,例如创建、删除、复制和移动目录等。 创建目录 创建目录的方法为: Directory.CreateDi…

    C# 2023年5月15日
    00
  • JSONP跨域GET请求解决Ajax跨域访问问题

    JSONP是一种跨域解决方案,它利用<script>标签的跨域性质,通过在客户端动态生成<script>标签来实现跨域访问数据。 实现JSONP的关键在于服务器端需要返回一段函数调用的代码,同时在客户端动态生成<script>标签,并将需要访问的数据作为函数的参数传入。 以下是JSONP的基本格式: callbackFun…

    C# 2023年5月31日
    00
  • C#启动外部程序的几种常用方法汇总

    C#启动外部程序的几种常用方法汇总 在C#开发过程中启动外部程序是一个比较常见的功能需求,下面介绍几种常用的启动外部程序的方法。 使用Process.Start方法启动应用程序 Process.Start 方法可以启动指定路径的应用程序,并可以向该应用程序传递参数。代码示例: using System.Diagnostics; Process.Start(&…

    C# 2023年5月14日
    00
  • C#调用执行外部程序的实现方法

    下面是详细的“C#调用执行外部程序的实现方法”的攻略: 1. 使用Process类调用外部程序 在C#中,我们可以通过Process类来调用执行外部程序。它提供了一些方法和属性,能够让我们轻松地执行外部程序,并且可以获取外部程序的返回值等信息。 以下是调用外部程序的步骤: 步骤一:创建一个Process对象 我们需要使用Process类创建一个对象,这个对象…

    C# 2023年6月6日
    00
  • 轻松学习C#的预定义数据类型

    轻松学习C#的预定义数据类型 什么是预定义数据类型 预定义数据类型是在C#语言中预先定义好的数据类型,通常使用的关键字有int、float、double、char、string等。这些数据类型已经被封装好,可以直接使用,而不需要自己去重新定义。 整型数据类型 整型数据类型用于存储整数。在C#语言中,有4种整型数据类型,分别是byte、short、int和lo…

    C# 2023年6月1日
    00
  • C#运行CGI程序实例

    下面是一份详细的C#运行CGI程序的完整攻略: 简介 CGI(Common Gateway Interface)是Web服务器与应用程序之间通信的一种标准接口。C#作为一种强大的编程语言,可以通过配置IIS来实现运行CGI程序。 配置IIS 首先,在IIS中添加CGI程序的支持。 打开IIS管理器,选择对应的网站,右击“属性”选项,进入“HTTP头”标签。 …

    C# 2023年6月1日
    00
  • 浅析SQL Server中包含事务的存储过程

    浅析SQL Server中包含事务的存储过程 什么是存储过程 存储过程是一组预先编写的可重复使用的SQL语句集合,它们被保存在数据库中,可以通过一个单独的指令调用它们并执行。存储过程可以实现更加复杂的操作,为数据库提供更好的封装性和安全性。 什么是事务 事务是指对数据库进行一组数据操作的过程,这些操作要么全部成功,要么全部失败,不存在只执行了其中一部分操作的…

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