iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C# Socket数据接收的三种实现方式
  • 228
分享到

C# Socket数据接收的三种实现方式

2024-04-02 19:04:59 228人浏览 八月长安
摘要

Stream.Read 方法 当在派生类中重写时,从当前流读取字节序列,并将此流中的位置提升读取的字节数。 语法: public abstract int Read(byt

Stream.Read 方法

当在派生类中重写时,从当前流读取字节序列,并将此流中的位置提升读取的字节数。

语法

public abstract int Read(byte[] buffer, int offset, int count)

参数

  • buffer: 字节数组。此方法返回时,该缓冲区包含指定的字符数组,该数组的 offset 和 (offset + count -1) 之间的值由从当前源中读取的字节替换。
  • offset: buffer 中的从零开始的字节偏移量,从此处开始存储从当前流中读取的数据。
  • count: 要从当前流中最多读取的字节数。

返回值

读入缓冲区中的总字节数。如果当前可用的字节数没有请求的字节数那么多,则总字节数可能小于请求的字节数,或者如果已到达流的末尾,则为零 (0)。

备注

此方法的实现从当前流中读取最多的 count 个字节,并将它们存储在从 offset 开始的 buffer 中。流中的当前位置提升已读取的字节数;但是,如果出现异常,流中的当前位置保持不变。实现返回已读取的字节数。仅当位置当前位于流的末尾时,返回值才为零。如果没有任何可用的数据,该实现将一直阻塞到至少有一个字节的数据可读为止。仅当流中不再有其他的数据,而且也不再需要更多的数据(如已关闭的套接字或文件尾)时,Read 才返回 0。即使尚未到达流的末尾,实现仍可以随意返回少于所请求的字节。

之前一般采用如下方式进行数据接收:

int recv;//定义接收数据长度变量
            IPEndPoint ipEnd = new IPEndPoint(IPAddress.Parse(textBox1.Text), int.Parse(textBox2.Text));
            //接收端所监听的接口,ip也可以用IPAddress.Any
            Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.tcp);
            //初始化一个Socket对象
            socket.Bind(ipEnd);//绑定套接字到一个IP地址和一个端口上(bind());
            socket.Listen(10);
            while (true)
            {
                byte[] data = new byte[1024];//对data清零
                Socket clientSocket = socket.Accept(); //一旦接受连接,创建一个客户端
                recv = clientSocket.Receive(data);
                if (recv == 0) //如果收到的数据长度小于0,则退出
                    break;
                string stringData = "0x" + BitConverter.ToString(data).Replace("-", " 0x").ToLower();
                                                                                                                  
                this.Invoke((EventHandler)delegate
                {
                    richTextBox1.Text += DateTime.Now.ToString("yy-MM-dd hh:mm:ss")  + stringData + "\n";
                });
            }

之前用的时候没发现什么问题,但是今天在测试金属门数据接收的时候发现会丢数据,金属门每隔十秒给我一次数据,用上面这个差不多60秒才能收到一组数据,针对以上问题,做了如下修改:

将数据接收放到 while (true),数据接收正常

以下分别采用三种方式实现了数据的正常接收,代码如下:

 测试:

 Task.Run(() => {}); 这个可以去掉;

到此这篇关于C# Socket数据接收的三种实现方式的文章就介绍到这了,更多相关C# Socket数据接收内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: C# Socket数据接收的三种实现方式

本文链接: https://www.lsjlt.com/news/164998.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C# 三种方式实现Socket数据接收
    目录Stream.Read 方法将数据接收放到 while (true)Stream.Read 方法 当在派生类中重写时,从当前流读取字节序列,并将此流中的位置提升读取的字节数。 语...
    99+
    2024-04-02
  • C# Socket数据接收的三种实现方式
    Stream.Read 方法 当在派生类中重写时,从当前流读取字节序列,并将此流中的位置提升读取的字节数。 语法: public abstract int Read(byt...
    99+
    2024-04-02
  • Java后端之俯瞰数据接收的三种方式
    目录一、前言二、正文部分第一种方法:第二种方法:第三种方法:三种方法概览图:一、前言 前面我们说了一些网页表单的功能,现在我们先来讲解数据的传输,如何进行前后端的联系 (建议先看完上...
    99+
    2024-04-02
  • C#多态的三种实现方式(小结)
    C#实现多态主要有3种方法,虚方法,抽象类,接口 1 虚方法 在父类的方法前面加关键字virtual, 子类重写该方法时在方法名前面加上override关键字,例如下面的Perso...
    99+
    2024-04-02
  • springboot接收参数的几种方式
    1、四种传参方式 1.1、params 传参格式:?号传参,在地址栏上加参数 http://localhost:8080参数名=值&参数名=值 1.2、body 传参格式:请求体传参 http://l...
    99+
    2023-09-17
    spring boot java spring
  • 数据传输的三种方式
    在通信和计算机网络中,从通信资源的分配角度来看,“交换”就是按照某种方式动态地分配传输线路的资源。常用的数据传输方式有电路交换、报文交换、分组交换。 电路交换 特点: 通信双方独占通信链路 优点: ...
    99+
    2023-09-20
    网络 服务器 运维
  • PHP命令行脚本接收传入参数的三种方式
    目录 一、使用`$argv`和`$argc`参数接收二、使用`getopt`函数(推荐使用这种方法)三、提示用户输入 通常PHP都做http方式请求了,可以使用GET、POST…方式接收参...
    99+
    2023-09-30
    php 开发语言
  • C++中strlen函数的三种实现方法
    目录一、strlen函数是什么二、strlen的三种实现方法1、第一种方法(直接)2、第二种方法(递归)3、第三种方法(指针-指针)四、小结一、strlen函数是什么 我们经常用到s...
    99+
    2024-04-02
  • 三种工厂模式的C++实现
    引出工厂模式的设计问题◆ 1.为了提高内聚(Cohesion)和松耦合(Coupling),我们经常会抽象出一些类的公共接口以形成抽象基类或者接口。这样我们可以通过声明一个指向基类的指针来指向实际的子类实现...
    99+
    2024-04-02
  • C#实现套接字发送接收数据
    本文实例为大家分享了C#实现套接字发送接收数据的具体代码,供大家参考,具体内容如下 服务端 namespace TestServer { public partial ...
    99+
    2024-04-02
  • Pandas提取数据的三种方式
    目录前言Pandas读取数据的几种方式1. read_csv2. read_excel3. read_sql前言 快期末了,数据挖掘的大作业需要用到python的相关知识(这太难为我...
    99+
    2023-01-16
    Pandas 提取数据
  • SpringMVC接收java.util.Date类型数据的2种方式小结
    SpringMVC接收java.util.Date类型数据 在Controller中如下定义方法 public PassQueryRequest trade(@ModelAttr...
    99+
    2024-04-02
  • MySQL删除数据的三种方式
    MySQL删除数据有以下三种方式:1. 使用DELETE语句:使用DELETE语句可以删除表中的一条或多条数据。语法如下:D...
    99+
    2023-09-22
    MySQL
  • java socket接收保证能读完数据的实例
    目录socket接收保证能读完数据socket接收硬件字节数据并解析socket接收保证能读完数据 // private static byte[] readData(In...
    99+
    2024-04-02
  • 浅谈Java 三种方式实现接口校验
    本文介绍了Java 三种方式实现接口校验,主要包括AOP,MVC拦截器,分享给大家,具体如下:方法一:AOP代码如下定义一个权限注解package com.thinkgem.jeesite.common.annotation; impor...
    99+
    2023-05-30
    java 接口 校验
  • SpringBoot调用第三方WebService接口的两种实现方式
    WebService简介 WebService接口的发布通常一般都是使用WSDL(web service descriptive language)文件的样式来发布的,该文档包含了请求的参数信息,返回...
    99+
    2023-09-12
    spring boot java 后端
  • 浅拷贝的三种实现方式
    1、ES6的方法 Object.assign()  作用:将第二个参数及以后的参数合并到第一个对象里。 参数1:target 参数2:对象…… 参数3:对象…. 例:       var obj = {a:{name:”kaiqin”,ag...
    99+
    2023-10-29
    三种 方式
  • docker容器间进行数据共享的三种实现方式
    目录一、Bind Mounts方式共享数据二、Volumes方式数据共享三、Volume container(数据卷容器)方式3.1.创建数据卷容器3.2.使用数据卷容器我们本节为大...
    99+
    2024-04-02
  • Docker 实现挂载的三种方式
    一.为什么有挂载 容器中运行的应用,有可能会产生数据,如果将数据直接存储到容器中,如果删除容器时,容器中的数据会一起被删除,例如: 如果运行的是数据库容器,数据库容器直接保存的数据文件,删除容器时,容易导致数据丢失 为了防止数据丢失,可以把...
    99+
    2023-09-05
    docker 容器 运维 java
  • Python实现列表拼接和去重的三种方式
    目录列表拼接三种方式 方式一:简简单单的“+” 方法二:切片赋值 方式三:列表自带的extend() 列表去重的三种方式 利用集合set的特性 利用字典key的不可重复属性 利用in...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作