c# 网络编程之tcp

C# 网络编程之TCP

TCP是传输控制协议,是一种无连接的、可靠的、基于字节流的传输协议,它能够在网络上确保数据的可靠传输。在C#/.NET中,我们可以使用System.Net.Sockets命名空间下的TcpClient和TcpListener类来实现TCP网络编程。

TCP客户端

连接服务器

要建立一个TCP连接,需要指定服务器的IP地址和端口号,并使用TcpClient类创建一个TCP客户端对象。以下是一个连接服务器的示例代码:

using System;
using System.Net.Sockets;

class Program
{
    static void Main(string[] args)
    {
        // 服务器IP地址和端口号
        string serverIP = "192.168.0.1";
        int serverPort = 8888;

        // 创建TCP客户端对象
        TcpClient client = new TcpClient();

        try
        {
            // 连接服务器
            client.Connect(serverIP, serverPort);

            // 连接成功
            Console.WriteLine("连接服务器成功");
        }
        catch (Exception ex)
        {
            // 连接失败
            Console.WriteLine("连接服务器失败:" + ex.Message);
        }
        finally
        {
            // 释放TCP客户端资源
            client.Close();
        }
    }
}

发送数据

连接成功后,可以使用TcpClient对象的GetStream方法获取与服务器通信的网络流,然后使用流的Write方法向服务器发送数据。以下是一个发送数据的示例代码:

using System;
using System.Net.Sockets;

class Program
{
    static void Main(string[] args)
    {
        // 服务器IP地址和端口号
        string serverIP = "192.168.0.1";
        int serverPort = 8888;

        // 要发送的数据
        string data = "Hello World";

        // 创建TCP客户端对象
        TcpClient client = new TcpClient();

        try
        {
            // 连接服务器
            client.Connect(serverIP, serverPort);

            // 连接成功,发送数据
            NetworkStream stream = client.GetStream();

            byte[] buffer = System.Text.Encoding.UTF8.GetBytes(data);
            stream.Write(buffer, 0, buffer.Length);

            Console.WriteLine("已向服务器发送数据");
        }
        catch (Exception ex)
        {
            // 连接或发送失败
            Console.WriteLine("操作失败:" + ex.Message);
        }
        finally
        {
            // 释放TCP客户端资源
            client.Close();
        }
    }
}

TCP服务器

监听端口

要创建一个TCP服务器,需要使用TcpListener类监听指定的端口,并等待客户端的连接。以下是一个监听端口的示例代码:

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

class Program
{
    static void Main(string[] args)
    {
        // 本地IP地址和端口号
        string localIP = "127.0.0.1";
        int localPort = 8888;

        // 创建TCP服务器对象
        TcpListener server = new TcpListener(IPAddress.Parse(localIP), localPort);

        try
        {
            // 开始监听
            server.Start();

            Console.WriteLine("服务器已启动,等待客户端连接");

            // 接收客户端连接
            TcpClient client = server.AcceptTcpClient();

            Console.WriteLine("客户端已连接");
        }
        catch (Exception ex)
        {
            Console.WriteLine("操作失败:" + ex.Message);
        }
        finally
        {
            // 停止监听
            server.Stop();
        }
    }
}

接收数据

连接成功后,可以使用TcpClient对象的GetStream方法获取与客户端通信的网络流,然后使用流的Read方法接收客户端发送的数据。以下是一个接收数据的示例代码:

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

class Program
{
    static void Main(string[] args)
    {
        // 本地IP地址和端口号
        string localIP = "127.0.0.1";
        int localPort = 8888;

        // 创建TCP服务器对象
        TcpListener server = new TcpListener(IPAddress.Parse(localIP), localPort);

        try
        {
            // 开始监听
            server.Start();

            Console.WriteLine("服务器已启动,等待客户端连接");

            // 接收客户端连接
            TcpClient client = server.AcceptTcpClient();

            Console.WriteLine("客户端已连接");

            // 接收客户端发送的数据
            NetworkStream stream = client.GetStream();

            byte[] buffer = new byte[1024];
            int bytesRead = stream.Read(buffer, 0, buffer.Length);
            string data = System.Text.Encoding.UTF8.GetString(buffer, 0, bytesRead);

            Console.WriteLine("已接收到客户端发送的数据:" + data);
        }
        catch (Exception ex)
        {
            Console.WriteLine("操作失败:" + ex.Message);
        }
        finally
        {
            // 停止监听
            server.Stop();
        }
    }
}

以上是TCP客户端和TCP服务器的基本使用方法,可以根据需要进行修改和扩展,实现更加复杂和高效的网络编程功能。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:c# 网络编程之tcp - Python技术站

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

相关文章

  • C#利用子线程刷新主线程分享教程

    利用子线程刷新主线程是很常见的操作。我将给出一个完整的攻略,以帮助你更好地理解这个过程。 什么是子线程和主线程? 在深入讲解利用子线程刷新主线程前,我们需要先理解子线程和主线程。在计算机中,一个进程可以分为多个线程,每个线程都有独立的执行流程。我们常说的“子线程”是指在主线程之外的线程,而“主线程”则是指操作系统为程序创建的第一个线程。 在图形用户界面(GU…

    C# 2023年6月1日
    00
  • C#用dynamic一行代码实现反射操作

    dynamic简介 dynamic是.NET Framework4.0的新特性。dynamic的出现让C#具有了弱语言类型的特性。编译器在编译的时候不再对类型进行检查,编译时默认dynamic对象支持你想要的任何特性。 dynamic简化反射实现 使用dynamic来简化反射实现是一种比较常见的编程技巧,它可以减少代码的复杂性并提高可读性。下面是一个使用dy…

    C# 2023年4月25日
    00
  • SQL2005CLR函数扩展-繁简转换的实现代码

    SQL2005CLR函数扩展-繁简转换的实现代码的完整攻略如下: 1. 确定需求并搜集资料 首先,我们需要确定我们要实现的是一个繁简转换的函数。繁简转换是指将繁体中文转换为简体中文,或将简体中文转换为繁体中文。为了实现这个功能,我们需要搜集相关的资料,包括繁简转换的算法和实现思路等。 2. 编写CLR函数代码 在了解了繁简转换的实现思路后,我们可以开始编写C…

    C# 2023年6月7日
    00
  • 让Laravel API永远返回JSON格式响应的方法示例

    让我详细讲解一下“让Laravel API永远返回JSON格式响应的方法示例”。 1. 确定默认的响应格式 Laravel框架提供了一个Response类,可以方便的创建许多类型的响应,包括JSON响应。可以通过修改app/Http/Controllers/Controller.php中的构造函数来设置默认的响应格式为JSON。在构造函数中添加如下代码即可:…

    C# 2023年6月1日
    00
  • C#获取所有进程的方法

    关于C#获取所有进程的方法,我们可以通过以下步骤进行实现。 1. 引用命名空间 我们需要在代码中添加System.Diagnostics命名空间,代码如下: using System.Diagnostics; 2. 获取所有进程 我们使用Process类中的静态方法GetProcesses()获取当前运行的所有进程,代码如下: Process[] proce…

    C# 2023年6月6日
    00
  • .NET Core 使用委托实现动态流程组装的思路详解

    .NET Core 使用委托实现动态流程组装的思路详解 在.NET Core应用程序中,我们经常需要根据不同的条件动态组装流程。使用委托可以很好地实现这一目的。本攻略将介绍如何使用委托实现动态流程组装,并提供两个示例说明。 1. 委托的定义 在.NET Core中,委托是一种类型,它可以封装一个或多个方法,并允许将这些方法作为参数传递给其他方法。委托可以用于…

    C# 2023年5月16日
    00
  • C# 线程安全详解

    C#线程安全详解 什么是线程安全 线程安全指的是当多个线程同时访问同一个资源时,能够保证程序不会出现并发问题,不会导致数据的不一致或异常情况。 在 C# 中,线程安全一般涉及到以下几种情况: 多个线程同时访问同一个实例方法 多个线程同时访问静态方法 多个线程同时访问字段、属性或变量 线程安全的解决方法 为了保证线程安全,可以采用以下几种方法: 1.使用锁 锁…

    C# 2023年5月15日
    00
  • C#实现xml文件反序列化读入数据到object的方法

    下面是使用C#实现XML文件反序列化读入数据到Object的方法的完整攻略: 1.定义XML文件 首先,我们需要定义一个XML文件来存储数据。以下是样例代码: <?xml version="1.0" encoding="UTF-8"?> <Root> <Person> <Nam…

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