nanoframework.System.Net.Sockets.TcpClient 1.1.83

前缀已保留
dotnet add package nanoframework.System.Net.Sockets.TcpClient --version 1.1.83                
NuGet\Install-Package nanoframework.System.Net.Sockets.TcpClient -Version 1.1.83                
此命令旨在在 Visual Studio 的包管理器控制台中使用,因为它使用了 NuGet 模块的 Install-Package 版本。
<PackageReference Include="nanoframework.System.Net.Sockets.TcpClient" Version="1.1.83" />                
对于支持 PackageReference 的项目,将此 XML 节点复制到项目文件中以引用包。
paket add nanoframework.System.Net.Sockets.TcpClient --version 1.1.83                
#r "nuget: nanoframework.System.Net.Sockets.TcpClient, 1.1.83"                
#r 指令可用于 F# Interactive 和 Polyglot Notebooks。将此复制到交互式工具或脚本的源代码中以引用包。
// Install nanoframework.System.Net.Sockets.TcpClient as a Cake Addin
#addin nuget:?package=nanoframework.System.Net.Sockets.TcpClient&version=1.1.83

// Install nanoframework.System.Net.Sockets.TcpClient as a Cake Tool
#tool nuget:?package=nanoframework.System.Net.Sockets.TcpClient&version=1.1.83                

Quality Gate Status Reliability Rating License NuGet #yourfirstpr Discord

nanoFramework logo


欢迎访问 .NET nanoFramework System.Net.Sockets.TcpClient

此 API 实现了与官方 .NET 相似的 TcpListener 和 TcpClient 类模式。 System.NET.Sockets.TcpClient.

这些是用于 TCP 连接的 Socket 的包装类。nanoframework 实现的 TcpClient 不包括异步方法和 Connected 属性。

构建状态

组件 构建状态 NuGet 包
nanoFramework.System.Net.Sockets.TcpClient Build Status NuGet

使用方法

重要: 显然这需要一个正常工作的网络连接。请检查有关如何连接到网络的示例,例如参阅 Networking 示例包

TcpListener 类提供了创建监听套接字以接受传入的 TCP 连接的简单方法,而 TcpClient 则提供了连接和进行 TCP 连接通信的方法。

示例

TcpListenerTcpClient 的示例可以在 nanoFramework 示例仓库中找到。

监听传入连接

以下代码展示如何设置监听套接字并在 1234 端口上作为 TcpClient 接受连接。

TcpListener listener = new TcpListener(IPAddress.Any, 1234);

// Start listening for incoming connections
listener.Start();
while (true)
{
    try
    {
        // Wait for incoming connections
        TcpClient client = listener.AcceptTcpClient();

        NetworkStream stream = client.GetStream();

        Byte[] bytes = new Byte[256];        
        int i;

        // Wait for incoming data and echo back
        while((i = stream.Read(bytes, 0, bytes.Length))!=0)
        {
            // Do something with data ?

            stream.Write(bytes, 0, i);
        }

        // Shutdown connection
        client.Close();
    }
    catch(Exception ex)
    {
        Debug.WriteLine($"Exception:-{ex.Message}");
    }
}

如果您想处理一个以上的同时连接,则可以启动一个单独的工作线程。

TcpListener listener = new TcpListener(IPAddress.Any, 1234);

// Start listening for incoming connections with backlog
listener.Start(2);

while (true)
{
    try
    {
        // Wait for incoming connections
        TcpClient client = listener.AcceptTcpClient();

        // Start thread to handle connection
        Thread worker = new Thread(() => WorkerThread(client));
        worker.Start();
    }
    catch(Exception ex)
    {
        Debug.WriteLine($"Exception:-{ex.Message}");
    }
}

TcpListener 示例中用于处理TcpClient连接的工作线程。

private static void WorkerThread(TcpClient client)
{
    try
    {
        NetworkStream stream = client.GetStream();

        Byte[] bytes = new Byte[256];        
        int i;

        // Loop reading data until connection closed
        while((i = stream.Read(bytes, 0, bytes.Length))!=0)
        {
            // Do something with data ?

            // Write back received data bytes to stream
            stream.Write(bytes, 0, i);
        }
    }
    catch(Exception ex)
    {
        Debug.WriteLine($"Exception:-{ex.Message}");
    }
    finally
    {
        // Shutdown connection
        client.Close();
    } 
}

TcpClient

TcpClient 还可以使用主机名/端口或 IPEndPoint 来发起连接。例如连接到另一个监听连接的 nanoFramework 设备。

TcpClient client = new TcpClient()

try
{
    client.Connect(hostname, port)

    NetworkStream stream = client.GetStream();

    // Write / Read data on stream

    // for example Write 'ABC' and wait for response
    byte[] writeData = new byte[] { 0x41, 0x42, 0x43 };  
    stream.Write(writeData, 0, writeData.Length);

    // Read reply and close
    byte[] buffer = new byte[1024];
    int bytesRead = stream.Read(buffer, 0, buffer.Length);

    // Process read data ?
}
catch(SocketException sx)
{
    Console.WriteLine($"Socket error:{sx.ErrorCode} exception:{sx.Message}");
}
finally
{
    client.Close();
}

对于安全连接,可以使用 SslStream

client.Connect(HostName, 443);

// Create SSlStream from underlying SOcket
SslStream stream = new SslStream(client.Client);

// Don't verify Server certificate for this sample code
stream.SslVerification = SslVerification.NoVerification;
stream.AuthenticateAsClient(HostName, SslProtocols.Tls12);

// stream.Write() or stream.Read()

反馈和文档

有关文档、提供反馈、问题以及了解如何贡献,请参阅 主页仓库

加入我们的 Discord 社区 这里

鸣谢

此项目的贡献者列表可在 CONTRIBUTORS 中找到。

许可协议

nanoframework 类库采用 MIT 许可协议

行为准则

本项目采纳了贡献者公约定义的行为准则,以明确我们社区中预期的行为。有关更多信息,请参阅 .NET Foundation 行为准则

.NET Foundation

此项目由 .NET Foundation 支持。

产品 兼容和附加计算的靶框架版本。
.NET 框架 net 是兼容的。
兼容的靶框架
包含的靶框架(在包中)
了解更多关于 靶框架.NET 标准化的信息。

NuGet 包

此包未使用任何 NuGet 包。

GitHub 仓库

此包未使用任何流行的 GitHub 仓库。

版本 下载 最后更新
1.1.83 57 7/29/2024
1.1.77 101 5/13/2024
1.1.74 127 4/8/2024
1.1.72 87 4/3/2024
1.1.69 140 1/29/2024
1.1.67 86 1/26/2024
1.1.64 231 11/10/2023
1.1.62 103 11/9/2023
1.1.59 99 11/9/2023
1.1.52 475 12/28/2022
1.1.50 295 12/28/2022
1.1.48 287 12/27/2022
1.1.45 289 12/23/2022
1.1.37 532 10/26/2022
1.1.35 360 10/26/2022
1.1.33 387 10/26/2022
1.1.31 363 10/25/2022
1.1.29 356 10/24/2022
1.1.27 392 10/24/2022
1.1.25 382 10/23/2022
1.1.23 386 10/23/2022
1.1.20 407 10/8/2022
1.1.17 415 9/22/2022
1.1.15 434 9/22/2022
1.1.13 425 9/15/2022
1.1.8 384 8/4/2022
1.1.6 387 8/4/2022
1.1.4 390 8/3/2022
1.1.2 385 8/3/2022
1.0.0.23 417 7/20/2022
1.0.0.21 425 6/13/2022
1.0.0.19 417 6/8/2022
1.0.0.14 412 5/26/2022
1.0.0.12 407 5/18/2022
1.0.0.10 402 5/3/2022
1.0.0 436 3/29/2022
1.0.0-preview.12 120 3/29/2022
1.0.0-preview.9 117 3/17/2022
1.0.0-preview.7 108 3/14/2022
1.0.0-preview.5 111 3/14/2022
1.0.0-preview.3 117 2/23/2022