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日

相关文章

  • WinForm自定义函数FindControl实现按名称查找控件

    下面就为大家详细讲解WinForm自定义函数FindControl实现按名称查找控件的完整攻略。 一、问题描述 有时候我们需要在WinForm中查找某一个控件,但是因为控件嵌套的层次比较深,需要写很多层级查找的代码,而且这样写不太灵活,每次查找都需要改动代码。因此,我们需要自定义一个函数来实现按名称查找控件,提高效率,降低代码复杂度。如何实现按名称查找控件的…

    C# 2023年5月15日
    00
  • C# 6.0 内插字符串(Interpolated Strings )的使用方法

    当我们需要将表达式嵌入到字符串中时,常规做法是使用字符串拼接。C# 6.0 为我们提供了内插字符串(Interpolated Strings)功能,使得我们可以更方便地将表达式嵌入到字符串中。本文将详细介绍内插字符串的使用方法。 什么是内插字符串? 在 C# 6.0 中,内插字符串是一种新的字符串语法,它允许将变量值或表达式嵌入到字符串中。内插字符串使用 $…

    C# 2023年6月3日
    00
  • C#实现QQ窗口抖动效果

    我将为您提供“C#实现QQ窗口抖动效果”的完整攻略。 1. 实现思路 QQ窗口抖动效果,可以通过定时器控制窗口的位置来实现。具体思路如下: 获取当前窗口的位置 每次定时器触发后,随机生成一个偏移量 根据偏移量计算出新的窗口位置 更新窗口位置 统计抖动的次数,当抖动次数达到预设值后停止抖动 2. 实现步骤 2.1 添加定时器控件 在窗口中添加一个Timer控件…

    C# 2023年6月6日
    00
  • C#实现简单成绩管理系统的完整步骤

    为了让大家更容易理解,我将这个攻略分为以下几个步骤: 步骤一:搭建环境 我们的第一步是搭建C#开发环境。首先需要安装Visual Studio或者其他的C#IDE,比如Rider等。安装完成后,在IDE中创建一个新的控制台应用程序项目。 步骤二:创建数据结构 我们需要为成绩管理系统创建一个数据结构,用于存储学生姓名和成绩。我们可以使用C#中的类来实现这个数据…

    C# 2023年6月6日
    00
  • ThreadLocal 在上下文传值场景实践源码

    ThreadLocal 是 Java 中常用的多线程编程技术之一,它可以在多个线程环境中保存并传递数据,将数据与线程绑定在一起,实现线程的局部变量。在一些上下文传值的场景中,ThreadLocal 可以较为方便的实现参数的传递。接下来,本文将详细讲解 ThreadLocal 在上下文传值场景实践源码的完整攻略。 什么是 ThreadLocal ThreadL…

    C# 2023年6月7日
    00
  • C#中的尾递归与Continuation详解

    C#中的尾递归与Continuation详解 什么是尾递归? 在递归调用中,当一个函数调用自己时,称为递归调用。如果这个递归函数中最后一步就是调用自身,并且这个调用的返回值直接作为当前的函数返回值,那么这个递归就是尾递归。例如下面这个基于斐波那契数列的递归函数: int Fibonacci(int n) { if(n == 0) return 0; if(n…

    C# 2023年6月7日
    00
  • C#程序员统计自己的代码行数

    下面是完整的攻略: C#程序员统计自己的代码行数 背景 当我们参与一个大型的C#项目时,我们可能需要了解我们自己编写的代码行数。通过统计代码行数,不仅可以让我们评估我们的工作量,还可以让我们更好地理解我们在项目中的贡献。在本文中,我们将介绍如何以一种简单的方式统计自己的代码行数。 攻略 下面是一种简单的方法来统计C#代码的行数: 步骤 1:安装cloc cl…

    C# 2023年6月7日
    00
  • C#实现一个简单实用的TXT文本操作及日志框架详解

    C#实现一个简单实用的TXT文本操作及日志框架详解 在C#开发中,文本操作是非常常见的需求,而日志框架则是为了记录程序执行过程中的关键数据和错误信息等,方便开发者进行问题定位和排查。本文将详细讲解如何使用C#实现一个简单实用的TXT文本操作及日志框架。 实现TXT文本操作 实现TXT文本操作需要使用到C#的System.IO命名空间下的File类和Strea…

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