从服务端接收数组_C# 三种方式实现Socket数据接收(经典)

本文探讨了在C#中使用Socket接收服务端数据时遇到的问题,特别是使用Stream.Read方法时可能会丢数据。为了解决这个问题,文章提出了在while循环中进行数据接收的解决方案,并分享了三种有效实现数据正常接收的代码示例。
摘要由CSDN通过智能技术生成

Stream.Read 方法

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

语法

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

参数

  • buffer: 字节数组。此方法返回时,该缓冲区包含指定的字符数组,该数组的 offset 和 (offset + count -1) 之间的值由从当前源中读取的字节替换。

  • offsetbuffer 中的从零开始的字节偏移量,从此处开始存储从当前流中读取的数据。

  • 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();                                                                                                                                  thi
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值