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# 如何用lock解决缓存击穿

    当系统中缓存访问热点集中,且其中某些key的缓存失效时间过短,导致大量的请求直接访问DB,从而在DB上产生很大的压力,遇到高并发情况下往往会导致系统崩溃。这种情况就被称为“缓存击穿”。 C#语言提供了一种避免缓存击穿的方法,就是使用lock关键字,将可能产生高并发的代码块锁住,这样系统中只有一个线程能够访问这段代码,从而避免了缓存击穿的情况。 下面是使用lo…

    C# 2023年6月1日
    00
  • C#实体对象序列化成Json并让字段的首字母小写的两种解决方法

    将C#实体对象序列化成Json并将字段的首字母小写有两种解决方法,一种是通过在类定义中使用DataMember属性,另一种是通过创建一个包含转换规则的自定义JsonConverter类。 1. 使用DataMember属性 我们可以在类定义中使用[DataContract]和[DataMember]特性,这样在序列化时会自动将所有被标记的属性转为小写。 us…

    C# 2023年5月31日
    00
  • 基于C#实现一个最简单的HTTP服务器实例

    基于C#实现一个最简单的HTTP服务器实例 介绍 HTTP服务器通常用于向客户端提供Web应用程序或网站的内容。本教程将演示如何使用C#构建一个最简单的HTTP服务器实例。 步骤 第一步:创建一个新的C#控制台应用程序 首先,打开Visual Studio并创建一个新的C#控制台应用程序。 第二步:创建HTTPServer类 我们需要创建一个名为HTTPSe…

    C# 2023年6月7日
    00
  • 一个可逆加密的类(使用3DES加密)

    下面是对 “一个可逆加密的类(使用3DES加密)” 的详细讲解。 1. 什么是可逆加密 可逆加密是一种加密方式,在加密后可以通过解密算法将密文还原成明文。常见的可逆加密算法有DES、3DES、AES等。 2. 使用3DES加密的类 3DES是一种对称加密算法,它使用3条56位的密钥,加密时分为三次进行加密操作,每次加密使用不同的密钥,因此也称为“三重DES”…

    C# 2023年6月7日
    00
  • .NET Core自定义配置文件

    在本攻略中,我们将详细讲解.NET Core自定义配置文件的实现方法,并提供两个示例说明。 创建配置文件:首先,我们需要创建一个配置文件。我们可以使用JSON、XML或INI等格式来创建配置文件。例如,我们可以创建一个名为appsettings.json的JSON格式的配置文件,内容如下: { "MyConfig": { "Na…

    C# 2023年5月16日
    00
  • .net core并发请求发送HttpWebRequest的坑解决

    针对“.net core并发请求发送HttpWebRequest的坑解决”这个问题,我们可以进行以下操作: 问题描述 在使用.NET Core进行并发请求发送HttpWebRequest时,会出现一些并发请求异常和内存泄漏等问题。但是究竟是什么原因导致的呢?以下是一些原因的总结: HttpWebRequest与KeepAlive的冲突。 缺少正确的限制请求并…

    C# 2023年6月3日
    00
  • Entity Framework模型优先与实体对象查询

    Entity Framework是一个开源的ORM(Object Relational Mapping)框架,它允许我们通过使用.Net语言进行开发工作,同时又隐藏了底层ORM Query语言的操作,从而大大减轻了我们的工作负担。 在EF中,有两种常见的开发模式:数据库优先和模型优先。其中,模型优先的方式作为一种高效、简化开发过程的策略,更加广泛使用。在EF…

    C# 2023年6月3日
    00
  • C#快速实现IList非泛型类接口的自定义类作为数据源

    要快速实现IList非泛型类接口的自定义类作为数据源,可以按照以下步骤进行: 在自定义类中添加IList接口实现 public class MyList : IList { // 实现IList接口需要的属性和方法 // … } 实现IList接口需要的属性和方法 IList接口需要实现的属性和方法比较多,包括索引器、Add、Clear、Contains…

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