C# Socket的TCP通讯的实例代码

我们来详细讲解一下“C# Socket的TCP通讯的实例代码”的完整攻略。

1. 引言

Socket 是实现网络通信协议的一种方法,可以实现不同计算机之间的数据交互。而 TCP 是面向连接的、可靠的、基于字节流的传输控制协议。在 C# 中,可以使用 Socket 类实现 TCP 协议的通讯。下面我们将介绍如何实现一个简单的 TCP 通讯程序。

2. 步骤

2.1 建立服务器端

服务器端需要监听端口,等待客户端的连接请求,并且在接受到客户端请求时,创建新的连接用于通讯。以下是服务器端的代码示例:

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

class Server {
    public static void Main() {
        IPAddress ipAddress = IPAddress.Parse("127.0.0.1");
        int port = 8001;
        TcpListener tcpListener = new TcpListener(ipAddress, port);
        tcpListener.Start();
        Console.WriteLine("服务器已启动,等待客户端连接...");
        while (true) {
            TcpClient tcpClient = tcpListener.AcceptTcpClient();
            Console.WriteLine("客户端已连接:" + tcpClient.Client.RemoteEndPoint.ToString());
            // 开启一个线程进行通讯
        }
    }
}

2.2 建立客户端

客户端需要连接服务器,并且在连接成功后,可以使用 Socket 进行通讯。以下是客户端的代码示例:

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

class Client {
    public static void Main() {
        IPAddress ipAddress = IPAddress.Parse("127.0.0.1");
        int port = 8001;
        TcpClient tcpClient = new TcpClient();
        tcpClient.Connect(ipAddress, port);
        Console.WriteLine("已连接服务器:" + tcpClient.Client.RemoteEndPoint.ToString());
        // 开启一个线程进行通讯
    }
}

2.3 进行通讯

在建立好服务器端和客户端之后,需要在服务器端和客户端均开启一个线程进行通讯,以保证可以同时进行多个连接的通讯。以下是服务器端和客户端通讯的代码示例:

// 服务器端
TcpClient tcpClient = tcpListener.AcceptTcpClient();
Console.WriteLine("客户端已连接:" + tcpClient.Client.RemoteEndPoint.ToString());
NetworkStream networkStream = tcpClient.GetStream();
while (true) {
    byte[] bytes = new byte[1024];
    int bytesRead = networkStream.Read(bytes, 0, bytes.Length);
    if (bytesRead > 0) {
        string data = Encoding.Default.GetString(bytes, 0, bytesRead);
        Console.WriteLine("收到客户端的消息:" + data);
        // 回复消息
        byte[] replyBytes = Encoding.Default.GetBytes("已收到消息:" + data);
        networkStream.Write(replyBytes, 0, replyBytes.Length);
    }
}

// 客户端
TcpClient tcpClient = new TcpClient();
tcpClient.Connect(ipAddress, port);
Console.WriteLine("已连接服务器:" + tcpClient.Client.RemoteEndPoint.ToString());
NetworkStream networkStream = tcpClient.GetStream();
while (true) {
    Console.WriteLine("请输入要发送的消息:");
    string message = Console.ReadLine();
    byte[] data = Encoding.Default.GetBytes(message);
    networkStream.Write(data, 0, data.Length);
    // 接收服务器端回复的消息
    byte[] bytes = new byte[1024];
    int bytesRead = networkStream.Read(bytes, 0, bytes.Length);
    if (bytesRead > 0) {
        string reply = Encoding.Default.GetString(bytes, 0, bytesRead);
        Console.WriteLine("收到回复:" + reply);
    }
}

3. 总结

本文主要介绍了如何使用 C# 中的 Socket 类实现 TCP 协议的通讯,并且提供了建立服务器端和客户端的示例代码。在实际应用中,需要注意数据的编码和解码,以及服务器端和客户端的并发性和安全性等问题。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C# Socket的TCP通讯的实例代码 - Python技术站

(0)
上一篇 2023年5月31日
下一篇 2023年5月31日

相关文章

  • .NET 常用功能和代码小结

    .NET 常用功能和代码小结 在 .NET 中,常见的功能和代码小结包括但不限于以下几个方面: 文件操作 文件读取 .NET 提供了 System.IO 命名空间用于文件操作,其中 FileStream 和 StreamReader 是常见的文件读取方式。以下是示例代码: using (var stream = new FileStream("te…

    C# 2023年5月31日
    00
  • KMP算法的C#实现方法

    KMP算法的C#实现方法 概述 KMP算法是一种字符串匹配算法,可以用于快速查找一个字符串是否包含另一个字符串,或者在多个字符串中查找某个子串。该算法的基本思想是尽可能地避免重复匹配。通过预处理模式串的匹配数组,我们可以在匹配过程中跳过已经匹配过的部分,从而提高匹配效率。 算法实现 步骤一:求取模式串的匹配数组 首先,我们需要对模式串进行预处理,求取出模式串…

    C# 2023年6月7日
    00
  • C#数据类型转换(显式转型、隐式转型、强制转型)

    C#中的数据类型转换可以分为三种类型:显式转型、隐式转型和强制转型。 显式转型 显式转型是指将一个较大的数据类型转换为一个较小的数据类型。当进行显式转型时,需要用到强制转型(casting),通过使用强制转型运算符来指定要转换的数据类型。显式转型可能会导致数据出现精度损失或者数据溢出的情况。 下面是两个示例,分别演示了将 double 类型和 decimal…

    C# 2023年5月14日
    00
  • C#设计模式之职责链模式示例详解

    C#设计模式之职责链模式示例详解 什么是职责链模式 职责链模式是一种行为型模式,它能够将一个请求沿着多个对象链状传递,直到有一个对象处理该请求为止。这样的设计模式可以避免请求发送者与接收者之间的耦合,使得多个对象都有可能接收请求并处理它。 职责链模式的结构 这种模式通常包含一个抽象的处理者类,多个具体的处理者类,每个处理者类都包括一个指向下一个处理者的引用,…

    C# 2023年6月3日
    00
  • C# 无限级分类的实现

    C# 无限级分类的实现 什么是无限级分类? 无限级分类又称为多级分类,是指一种基于树状结构的数据分类方法。其特点是可以不断的按照需求无限拓展分类层级。 实现无限级分类的步骤 第一步:建立分类表 首先我们需要建立一个分类表,在分类表中应包含以下几个重要字段: 字段 类型 描述 id int 分类编号,主键 name nvarchar 分类名称 parent_i…

    C# 2023年5月31日
    00
  • C#使用StopWatch获取程序毫秒级执行时间的方法

    我来为您讲解C#使用StopWatch获取程序毫秒级执行时间的方法: 什么是StopWatch类 StopWatch类是.NET Framework中的一个计时器类,可以用来精确地测量一段代码的执行时间。它使用了高精度计数器(比如CPU计时器)来测量时间,因此能够精确到毫秒、微秒和纳秒级别,比使用DateTime.Now等类更加准确。 如何使用StopWat…

    C# 2023年6月1日
    00
  • C#实现DataTable映射成Model的方法(附源码)

    C#实现DataTable映射成Model的方法 简介 在开发中,我们有时候会从数据库中获取DataTable对象,但是DataTable中的数据并不能直接用于操作,需要将DataTable映射成相应的Model对象,这里提供一种比较好用的方法。 实现过程 步骤如下: 定义Model类,具体模型字段需要与DataTable中的列名对应。 csharppubl…

    C# 2023年5月31日
    00
  • HttpWebRequest出错.Section=ResponseHeader Detail=CR

    标题:解决 HttpWebRequest 出错 Section=ResponseHeader,Detail=CR 的攻略 可能出现的错误信息: 当使用 HttpWebRequest 请求 Web 服务器端数据时,有可能会出现 Section=ResponseHeader,Detail=CR 的错误提示,该错误提示可能是由于某些特殊字符在服务器端返回的响应中出…

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