- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
又是初学者问题:有点像我不久前提出的问题的跟进。
我正在尝试理解这个同步套接字教程 http://msdn.microsoft.com/en-us/library/6y0e13d3.aspx ,尤其是下面代码中的一行。
问题:我想确保我正确理解程序流程。 什么时候 handler.Receive(bytes) 返回?当它“溢出”并接收到超过 1024 字节时,它是否返回并存储接收到的字节数在 int bytesRec** 中? **如果是这样的话,这听起来可能很愚蠢,如果在 *data* 变量中存储 1024 个字节而不是监听更多字节时到达更多字节会发生什么那可能会在那个时候到达?还是我不应该担心,让 .net 来处理?
Socket handler = listener.Accept();
data = null;
// An incoming connection needs to be processed.
while (true) {
bytes = new byte[1024];
int bytesRec = handler.Receive(bytes);
// My question is WHEN does the following line
// get to be executed
data += Encoding.ASCII.GetString(bytes,0,bytesRec);
if (data.IndexOf("<EOF>") > -1) {
break;
}
}
最佳答案
When does handler.Receive(bytes) return?
文档:
If no data is available for reading, the Receive method will block until data is available, unless a time-out value was set by using Socket.ReceiveTimeout. If the time-out value was exceeded, the Receive call will throw a SocketException. If you are in non-blocking mode, and there is no data available in the in the protocol stack buffer, the Receive method will complete immediately and throw a SocketException. You can use the Available property to determine if data is available for reading. When Available is non-zero, retry the receive operation.
Does it return and store the number of bytes received in int bytesRec when it "overflows" and has received more than 1024 bytes?
不,它总是返回已读取的字节数。如果没有,您怎么知道 bytes
的哪些部分包含有意义的数据以及哪些部分未被使用?
了解套接字的典型工作方式非常重要:字节可能以数据包的形式到达,但就接收方而言,每个字节都应独立考虑。这意味着不能保证您将获得发送方发送的 block 中的字节,当然也不能保证有足够的数据来填满您的缓冲区。
如果您只想处理 1024 字节 block 中的传入数据,您有责任继续调用 Receive
直到它向您释放总共 1024 字节。
And if that is so, and this might sound silly, what happens if MORE bytes arrive as it is storing the 1024 bytes in the variable and not listening for more bytes that might be arriving at that time?
让我们重申,Receive
不会在缓冲区中存储 1024 字节,因为那是缓冲区的大小。它将存储最多 1024 字节。
如果网络堆栈内部缓冲的数据多于您的缓冲区可以容纳的数据,那么 1024 字节将返回给您,其余的将保留在网络堆栈的缓冲区中,直到您再次调用 Receive
.如果 Receive
已经开始将数据复制到您的缓冲区,并且此时从网络接收到更多数据,那么很可能会发生的情况是这些数据必须等待下一个 Receive
调用。
毕竟,在任何时候都没有人保证 Receive
会为您提供所有它所能提供的数据(尽管这当然是可取的,而且确实发生了大多数时候)。
关于c# - Socket.Receive 什么时候返回数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15523976/
初学者 android 问题。好的,我已经成功写入文件。例如。 //获取文件名 String filename = getResources().getString(R.string.filename
我已经将相同的图像保存到/data/data/mypackage/img/中,现在我想显示这个全屏,我曾尝试使用 ACTION_VIEW 来显示 android 标准程序,但它不是从/data/dat
我正在使用Xcode 9,Swift 4。 我正在尝试使用以下代码从URL在ImageView中显示图像: func getImageFromUrl(sourceUrl: String) -> UII
我的 Ubuntu 安装 genymotion 有问题。主要是我无法调试我的数据库,因为通过 eclipse 中的 DBMS 和 shell 中的 adb 我无法查看/data/文件夹的内容。没有显示
我正在尝试用 PHP 发布一些 JSON 数据。但是出了点问题。 这是我的 html -- {% for x in sets %}
我观察到两种方法的结果不同。为什么是这样?我知道 lm 上发生了什么,但无法弄清楚 tslm 上发生了什么。 > library(forecast) > set.seed(2) > tts lm(t
我不确定为什么会这样!我有一个由 spring data elasticsearch 和 spring data jpa 使用的类,但是当我尝试运行我的应用程序时出现错误。 Error creatin
在 this vega 图表,如果我下载并转换 flare-dependencies.json使用以下 jq 到 csv命令, jq -r '(map(keys) | add | unique) as
我正在提交一个项目,我必须在其中创建一个带有表的 mysql 数据库。一切都在我这边进行,所以我只想检查如何将我所有的压缩文件发送给使用不同计算机的人。基本上,我如何为另一台计算机创建我的数据库文件,
我有一个应用程序可以将文本文件写入内部存储。我想仔细看看我的电脑。 我运行了 Toast.makeText 来显示路径,它说:/数据/数据/我的包 但是当我转到 Android Studio 的 An
我喜欢使用 Genymotion 模拟器以如此出色的速度加载 Android。它有非常好的速度,但仍然有一些不稳定的性能。 如何从 Eclipse 中的文件资源管理器访问 Genymotion 模拟器
我需要更改 Silverlight 中文本框的格式。数据通过 MVVM 绑定(bind)。 例如,有一个 int 属性,我将 1 添加到 setter 中的值并调用 OnPropertyChanged
我想向 Youtube Data API 提出请求,但我不需要访问任何用户信息。我只想浏览公共(public)视频并根据搜索词显示视频。 我可以在未经授权的情况下这样做吗? 最佳答案 YouTube
我已经设置了一个 Twilio 应用程序,我想向人们发送更新,但我不想回复单个文本。我只是想让他们在有问题时打电话。我一切正常,但我想在发送文本时显示传入文本,以确保我不会错过任何问题。我正在使用 p
我有一个带有表单的网站(目前它是纯 HTML,但我们正在切换到 JQuery)。流程是这样的: 接受用户的输入 --- 5 个整数 通过 REST 调用网络服务 在服务器端运行一些计算...并生成一个
假设我们有一个名为 configuration.js 的文件,当我们查看内部时,我们会看到: 'use strict'; var profile = { "project": "%Projec
这部分是对 Previous Question 的扩展我的: 我现在可以从我的 CI Controller 成功返回 JSON 数据,它返回: {"results":[{"id":"1","Sourc
有什么有效的方法可以删除 ios 中 CBL 的所有文档存储?我对此有疑问,或者,如果有人知道如何从本质上使该应用程序像刚刚安装一样,那也会非常有帮助。我们正在努力确保我们的注销实际上将应用程序设置为
我有一个 Rails 应用程序,它与其他 Rails 应用程序通信以进行数据插入。我使用 jQuery $.post 方法进行数据插入。对于插入,我的其他 Rails 应用程序显示 200 OK。但在
我正在为服务于发布请求的 API 调用运行单元测试。我正在传递请求正文,并且必须将响应作为帐户数据返回。但我只收到断言错误 注意:数据是从 Azure 中获取的 spec.js const accou
我是一名优秀的程序员,十分优秀!