dotNet 之网络TCP

这篇具有很好参考价值的文章主要介绍了dotNet 之网络TCP。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

 **硬件支持型号  点击 查看 硬件支持 详情**

DTU701 产品详情

DTU702 产品详情

DTU801 产品详情

DTU802 产品详情

DTU902 产品详情

G5501 产品详情

ARM dotnet 编程文章来源地址https://www.toymoban.com/news/detail-632386.html

dotNet使用TCP,可以使用Socket和TcpClient 、TcpListener类 2种,对于高级用户,建议使用Socket类,可以获得更大控制和性能。TcpClientTcpListener 内部都依赖于 Socket 类。

这里使用TcpClient 和 TcpListener,编写一个客户端和服务端程序,客户端发送数据服务端接收并显示,服务端发送数据,每一个客户都接收到数据并显示:dotNet 之网络TCP,windows,网络,dotnet,tcp,编程

Socket编程可能会需要用到IPEndPoint、Dns、IPAddress等类,再往上TCP相关有TcpListener、TcpClient、NetworkStream,再往上就是大家熟悉的HttpClient等。

服务端代码如下:

using System.Net;
using System.Net.Sockets;
using System.Text;
​
namespace hwapp
{
    class Program
    {
        /// 创建 TcpListener
        /// TcpListener 类型用于监视 TCP 端口上的传入请求,然后创建一个 Socket 或 TcpClient 来管理与客户端的连接。 
        static TcpListener tcpListener;
        static List<NetworkStream> networkStreams = new List<NetworkStream>();
        static void Main(string[] args) 
        {
            ///开启监听
            tcpListener = new TcpListener(IPAddress.Parse("127.0.0.1"), 9999);
            
            ///Start 方法可使用侦听,而 Stop 方法禁用端口上的侦听。
            tcpListener.Start(10); // 最多 同时 接收10个用户连接
            Console.WriteLine("启动服务(IP:127.0.0.1 端口:9999),等待客户端连接!");
            
            ///开启一个线程,循环等待客户端的连接
            Task.Run(() => { Accept(); });
​
            while(true)
            {
                /// 使用 NetworkStream 将数据写入连接的客户端
                var msg = Console.ReadLine();
                foreach (var item in networkStreams)
                {
                    item.Write(Encoding.UTF8.GetBytes(msg));
                }
            }
        }
​
        static void Accept()
        {
            while (true)
            {
                ///【阻塞】等待客户端的连接
                /// AcceptTcpClientAsync 方法接受传入的连接请求并创建 TcpClient 来处理请求
                TcpClient tcpClient = tcpListener.AcceptTcpClient();
                NetworkStream networkStream = tcpClient.GetStream();
                Console.WriteLine($"{tcpClient.Client.RemoteEndPoint}上线");
                networkStreams.Add(networkStream);
                ///开启一个新的线程 等待新的消息
                Task.Run(() => { Read(networkStream, tcpClient); });
            }
        }
​
        /// <summary>
        /// 接收消息
        /// </summary>
        /// <param name="networkStream"></param>
        static void Read(NetworkStream networkStream, TcpClient tcpClient)
        {
            while (true)
            {
                try
                {
                    byte[] buffer = new byte[1024 * 1024];
                    /// 【阻塞】等待接收新的消息
                    var readLen = networkStream.Read(buffer, 0, buffer.Length);
                    if (readLen == 0)
                    {
                        Console.WriteLine($"{tcpClient.Client.RemoteEndPoint}下线");
                        networkStreams.Remove(networkStream);
                        networkStream.Close();
                        tcpClient.Close();
                        return;
                    }
                    Console.WriteLine(tcpClient.Client.RemoteEndPoint + ":" + Encoding.UTF8.GetString(buffer, 0, readLen));
                }
                catch (Exception) { }
            }
        }
    }
}
​

客户端代码如下:

namespace IOTtcpClient
{
    class Program
    {
        /// 创建客户端套接字
        static TcpClient tcpClient;
        static NetworkStream networkStream;
        static void Main(string[] args)
        {
            Console.WriteLine("TCP tcp Client");
​
            var ipEndPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 9999);
​
            tcpClient = new TcpClient();
            try
            {
                /// 连接到服务器
                tcpClient.Connect(ipEndPoint);
                Console.WriteLine("连接成功");
                /// 创建 NetworkStream 以发送和接收数据
                /// 需要使用 GetStream() 方法实例化 NetworkStream,以便能够发送和接收数据
                networkStream = tcpClient.GetStream();
​
                //读取
                Task.Run(() => { Read(); });
​
                Console.WriteLine("=======");
                while (true)
                {
                    Console.Write("->");
                    var msg = Console.ReadLine();
                    /// 发送消息到服务端
                    networkStream.Write(Encoding.UTF8.GetBytes(msg));
                }
            }
            catch (Exception) {
                Console.WriteLine("连接失败");
            }
        }
​
        /// <summary>
        /// 接收数据
        /// </summary>
        static void Read()
        {
            while (networkStream.CanRead)
            {
                try
                {
                    byte[] buffer = new byte[1024 * 1024];
                    ///【阻塞】等待接收新的消息
                    var readLen = networkStream.Read(buffer, 0, buffer.Length);
                    if (readLen == 0)   ///客户端断开连接
                    {
                        Console.WriteLine("强行断开连接");
                        networkStream.Close();
                        return;
                    }
                    Console.WriteLine("<-" + Encoding.UTF8.GetString(buffer, 0, readLen));
                }
                catch (Exception) { }
            }
        }
    }
}

更多信息 请查看 dotNet基础知识.pdf

DTU系列 说明

dotNet 之网络TCP,windows,网络,dotnet,tcp,编程

 **硬件支持型号  点击 查看 硬件支持 详情**

DTU701 产品详情

DTU702 产品详情

DTU801 产品详情

DTU802 产品详情

DTU902 产品详情

G5501 产品详情

ARM dotnet 编程

到了这里,关于dotNet 之网络TCP的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 网络编程——TCP编程

    在C语言中进行TCP编程的一般步骤如下: (1) 包含头文件: 在代码中包含必要的头文件,以便使用TCP编程所需的函数和数据类型。通常情况下,你需要包含 sys/socket.h、netinet/in.h 和 arpa/inet.h。 (2) 创建套接字: 使用 socket() 函数创建一个套接字,该套接字将用于网络通信。

    2024年02月05日
    浏览(30)
  • 【网络编程】TCP Socket编程

    流套接字: 使用传输层TCP协议 TCP: 即Transmission Control Protocol(传输控制协议),传输层协议。 TCP的特点: 有连接 可靠传输 面向字节流 有接收缓冲区,也有发送缓冲区 大小不限 ServerSocket 是 创建TCP服务端Socket 的API。 注意: ServerSocket 只能用于 服务器端。 构造方法: 方法签名

    2024年02月07日
    浏览(41)
  • 网络编程 p4 TCP编程

    基本介绍 基于客户端——服务端的网络通信; 底层使用的是TCP/IP协议; 应用场景举例:客户端发送数据,服务端接收并显示在控制台; 基于Socket的TCP编程; 示意图 netstat指令 netstat -an 可以查看当前主机网络情况,包括 端口监听 情况和 网络连接 情况; netstat -an|more 可以分

    2024年02月17日
    浏览(29)
  • 网络编程 TCP电子网络词库

     电子词典: 要求: 登录注册功能,不能重复登录,重复注册。用户信息也存储在数据库中。 单词查询功能 历史记录功能,存储单词,意思,以及查询时间,存储在数据库 基于TCP,支持多客户端连接 采用数据库保存用户信息与历史记录 将dict.txt的数据导入到数据库中保存。

    2024年02月17日
    浏览(31)
  • 网络编程『简易TCP网络程序』

    🔭个人主页: 北 海 🛜所属专栏: Linux学习之旅、神奇的网络世界 💻操作环境: CentOS 7.6 阿里云远程服务器 随着数字时代的来临,TCP网络程序已成为程序员不可或缺的技术领域。本博客将带领读者深入研究,从最基础的字符串回响开始,逐步探索至多进程、多线程服务器

    2024年02月04日
    浏览(36)
  • 网络编程 -- 简易TCP网络程序

      字符串回响程序类似于 echo 指令,客户端向服务器发送消息,服务器在收到消息后会将消息发送给客户端,该程序实现起来比较简单,同时能很好的体现 socket 套接字编程的流程。      这个程序我们已经基于 UDP 协议实现过了,换成 TCP 协议实现时,程序的结构是没有变化

    2024年04月25日
    浏览(32)
  • 【网络编程】TCP流套接字编程(TCP实现回显服务器)

    Socket(既能给客户端使用,也能给服务器使用) 构造方法 基本方法: ServerSocket(只能给服务器使用) 构造方法: 基本方法: 客户端代码示例: 服务器代码示例: 运行结果: 代码执行流程: 服务器启动,阻塞在accept,等待客户端建立连接. 客户端启动.这里的new操作会触发和服务器之间建立连

    2024年04月25日
    浏览(54)
  • 3.网络编程-TCP

    目录 TCP 建立连接的过程是怎样的 TCP为什么是三次握手 TCP 断开连接的过程是怎样的 TCP挥手为什么需要四次 为什么TIME_WAIT等待的时间是2MSL TCP详解之滑动窗口 TCP 半连接队列和全连接队列是什么 TCP粘包,拆包是怎么发生的,如何解决 TCP是如何保证可靠性的 浏览器地址栏输

    2024年04月29日
    浏览(14)
  • TCP网络编程

    上期分享了UDP下的网络编程,相信大家对网络通信已经有了自己的一些认知,那么我们本期就进一步来看一下TCP下的网络编程,感受一下TCP和UDP的相同点和不同点,实践证明一切,让我们来看看吧! (1)发送端发送hello world给接收端 (2)接收端进行接收并打印收到的消息

    2024年02月07日
    浏览(20)
  • 【网络编程】TCP

    ✨个人主页:bit me👇 ✨当前专栏:Java EE初阶👇 ServerSocket API ServerSocket 是创建TCP服务端Socket的API。 ServerSocket:是服务器端使用的 Socket ServerSocket 构造方法: 方法签名 方法说明 ServerSocket(int port) 创建一个服务端流套接字Socket,并绑定到指定端口 ServerSocket 方法: 方法签名 方

    2023年04月17日
    浏览(14)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包