C# socket networkstream 接收数据

问题描述

C# socket networkstream 接收数据
最近在做c/s,客户端用C#的Socket进行通信。接收数据开单独的接收线程使用networkstream进行接收
接收的方法大体上跟网上流传的一样
do
{
int readSize = mNetworkstream.Read(bytes 0 1024);
if (readSize > 0)
{
//do sth
}
}while(mNetworkstream.DataAvailable)

这样接收局内网或者单机没问题,但是放到外网测试网络不稳定就接收不全。
搜集很多资料,也试过在发送Socket包之前加个包大小,然后在while中增加判断是否读到包的大小,可是一样接不全,中间好像掺杂了一些没用的数据?

我一个包很容易超过byte[10240],而且要整个包接收完才能处理数据。
请问C# Socket使用networkstream怎样才能接收完全呢?

ps:也有听说过异步networkstream.beginread接收。鉴于网上一大抄,各种人贴各种代码片段根本就没用。有些有用但只能接收一次。。。

如果有beginread相关代码也希望大牛们贴出来参考一下,不要贴代码片段。。。

谢谢了~

解决方案

将数据包拆小,编号,收到以后再组包。

解决方案二:
C#不懂,但 Socket 通讯基本上需要分包,与重发机制,这样才能解决接收数据不全的问题。

解决方案三:
有两种方案:一是规定每次包的容量的最大值,大数据就分成多个包传送,在as端组合起来;另一种方法是在大数据包的包头附加包长内容,通过解析包头判定是否丢包,如果丢包则重发。

时间: 2024-08-01 10:14:38

C# socket networkstream 接收数据的相关文章

java nio socket 异步接收数据

问题描述 nio socket 异步接收数据,如何确定收接的数据,就是发送的返回的?有谁研究过没. 问题补充:如果不用id,nio客户端是否可以同步接收数据呢?是把socketChannel.configureBlocking(true)吗? 解决方案 在消息中增加UUID,在调用端记录UUID,并将UUID和消息一起发送到服务端,服务端的回传消息附件上UUID,调用端根据收到的消息包含的UUID确定给哪个调用者.解决方案二:异步调用的常见问题.因为没有办法实施返回,只有打标志了.要你把通信协议

socket UDP接收数据问题!

问题描述 有个问题请教大家一下,socketUDP不是无连接的吗,为什么写了一个demo,客户端向服务器发送数据,收到后又发送答复数据回客户端,但有一点很奇怪,我写的服务器发送后,手动点击客户端上面的接收,也就说接收在服务器发送之后,为什么还是可以收到?这种不应该就是丢包么?应该是先循环接收,然后阻塞到接收方法,服务器发送过来才可以收到吧,而我是先发送,然后在手动点击进入接收方法,还是可以收到,奇了怪了 解决方案 解决方案二:socket有接收缓存,你客户端的UDP不是已经开始服务了吗?解决方案

Socket服务器端接收数据怎么只接收第一次,后面就不接收了

问题描述 各位大神,现在我做的一个winform控制系统,从测试客户端发送数据到服务器端,为什么只是第一次能够接收到数据后面就没反应了,这个问题苦恼了我很久,请帮我看一下,服务器端界面设计和代码如下所示,测试客户端是一个测试工具.usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Linq;usingSyste

Socket发送接收数据实例

网上经常有关于Socket的问题~教程~可是都非常官方,其实代码我们都知道(F1帮助文档里就有),只是由于没有可测试用的Socket服务器..一直不能做测试跟进一步的研究.闪吧新社区+MT:G,{,P+?B7z 今天打开已经很久没用的<易语言>,了一个简单的socket服务器..其实我不知道算不算是socket服务器,只是监听端口,接收来自客户端的数据,发送数据到客户端等等.不过在flash的socket例程下连接并发送接收成功,所以应该也算是吧..(ps:易语言,一个中文的编程软件,别笑我,

Java Socket通信(一)之客户端程序 发送和接收数据_java

网络应用分为客户端和服务端两部分,而Socket类是负责处理客户端通信的Java类.通过这个类可以连接到指定IP或域名的服务器上,并且可以和服务器互相发送和接受数据. 对于Socket通信简述,服务端往Socket的输出流里面写东西,客户端就可以通过Socket的输入流读取对应的内容.Socket与Socket之间是双向连通的,所以客户端也可以往对应的Socket输出流里面写东西,然后服务端对应的Socket的输入流就可以读出对应的内容. 例1:客户端的简略写法(一). Socket clien

Asp.net Socket客户端(远程发送和接收数据)_实用技巧

复制代码 代码如下: /*************************************** * 对象名称: SocketObj * 功能说明: 远程发送与接收 * 试用示例: * using EC; //引用空间名 * string url = "218.75.111.74"; // URL也可以是(http://www.baidu.com/)这种形式 * int port = 8000; //端口 * string SendStr = "domainname\n

Java网络编程从入门到精通(13):使用Socket类接收和发送数据

网络应用分为客户端和服务端两部分,而Socket类是负责处理客户端通信的Java类.通过这个类可以连接到指定IP或域名的服务器上,并且可以和服务器互相发送和接受数据.在本文及后面的数篇文章中将详细讨论Socket类的使用,内容包括Socket类基础.各式各样的连接方式.get和set方法.连接过程中的超时以及关闭网络连接等. 在本文中,我们将讨论使用Socket类的基本步骤和方法.一般网络客户端程序在连接服务程序时要进行以下三步操作. 1.连接服务器 2.发送和接收数据 3.关闭网络连接 一.连

socket发送大量数据时如何接收?

问题描述 小弟在做一个项目是用java的socket发文件的同时也想发送聊天信息.1.对于socket的接收专门由一个线程A来处理,对于socket的发送也专门由一个线程B来处理2.发送和接收都有各自的缓冲区3.专门由一个线程使用监听来检测接收缓冲区的内容,并进行处理显示.问题出现在:当甲向乙发大量的连续的数据时(比如是文件,100M的文件我拆成1000片连续发送),若同时乙要发一条聊天消息则甲不能够即可收到该消息(该消息只能等到甲将文件发送完成后才能收到聊天消息),而若此时甲向乙发聊天消息则能

客户端Socket接收数据问题,跪求,谢谢,只要帮忙解决问题,可以付费的

问题描述 C#代码如下,客户端并发大概几百,以下代码会造成数据丢失吗?怎么呢保证完整接收数据呢,服务器端要求按照4个字节接收,按照我自己写的代码,循坏次数太多导致效率低下,怎么修改代码呢?List<byte> listByte = new List<byte>();//装载接收到的数据byte[] bytes;if (listByte.Count != 0){  listByte.Clear(); } while (true) {  bytes = new byte[1024];