我有一个罕见的错误似乎发生在读取套接字.
看来,在读取数据时,有时我只得到1-3个大于此数据包的字节.
正如我从管道编程中学到的那样,只要发送方提供足够的数据,我总是得到至少512个字节.
此外,我的发送者在传输任何内容的时候至少传输> = 4字节 - 所以我认为在传输的开始(!!)中一次只能接收4个字节.
在99.9%的情况下,我的假设似乎有......但是当收到的字节少于4个字节时,确实很少见.在我看来,为什么网络系统应该这样做呢?
有人知道更多吗?
这是我使用的阅读代码:
mySock, addr = masterSock.accept()
mySock.settimeout(10.0)
result = mySock.recv(BUFSIZE)
# 4 bytes are needed here ...
...
# read remainder of datagram
...
Run Code Online (Sandbox Code Playgroud)
发送方通过一次发送调用发送完整的数据报.
编辑:整个过程都在localhost上工作 - 因此不涉及复杂的网络应用程序(路由器等).BUFSIZE至少为512,发送方至少发送4个字节.
我知道这是一个奇怪的问题,但我想知道是否有办法向我知道 IP 地址的 PC 发送短信。
例如,我正在通过 torrent 从网络上的 PC 下载文件。
通过 torrent 我可以知道这台电脑的 IP 地址,我想给拥有这台电脑的人发送一条短信。
这可能吗?
考虑使用10 Mbps链路的单个TCP(Reno)连接.假设此链接不缓冲数据,并且接收器的接收缓冲区远大于拥塞窗口.假设每个TCP段的大小为1500字节,发送器和接收器之间的连接的双向传播延迟为200毫秒.此外,假设TCP连接始终处于拥塞避免阶段(忽略慢启动).
此TCP连接可以实现的段中的最大窗口大小是多少?
所以我们知道连接的吞吐量和延迟,我认为我们应该能够操作以下公式,以便我们能够找到窗口大小.
吞吐量=窗口大小/ RTT
吞吐量*RTT =窗口大小
10 Mbps*200毫秒=窗口大小
我不确定这是否正确.我很难找到除了这个公式之外找到窗口大小的任何其他内容.
离开http似乎使它使用HTTP进行连接,但我没有启用HTTPS的站点来测试它是否也适用于HTTPS.
使用//www.example.com/test.js是否会根据主文档的协议自动选择协议?
我目前正在研究Kademlia对等协议,并且很好奇是否有人知道有效广播信息/消息的技术或方法吗?
有一篇论文介绍了结构化P2P网络中的有效广播,它描述了Chord中的一种广播方式。他们的想法是将网络分为两个部分,并将广播消息发送到每个分区中的第一个节点。被联系的节点再次划分其“子网”并执行相同的操作。使用此技术,您可以通过网络在生成树上广播消息。但是,由于难以可靠地划分Kademlia网络,因此在将其应用于Kademlia时遇到了问题。
是否有人知道如何实现这一目标或存在其他替代方法?
我不想大量泛洪网络,因为这会对网络负载产生严重影响,并导致大量冗余流量。
当 SWF 托管在 HTTPS 环境中(通过 SSL)时,有没有办法让 SWF 执行跨协议(这是正确的术语吗?)HTTP 请求?
HTTP 数据包的最大大小是多少?我对 HTTP GET 请求的响应大小感兴趣(不是这个!这个问题是关于请求大小的)。有大小吗?如果我下载了一个 1GiB 的文件,那么它最终会成为 1 个 HTTP GET 请求吗?(直觉上,我不认为会发生这种情况 - 此外,部分下载/多线程下载器将不起作用)。
我知道 IP 数据包和 TCP 数据包的最大长度大于跨多个 IP 数据包分段的长度。HTTP 也会发生这样的事情吗?我正在寻找这个问题的答案的原因是为了弄清楚收取 1c / 10K get 请求的 AWS S3 计费方案。那么有多少 GET 请求开始为 1GiB 提供服务。
我目前正在尝试实现单向TCP,我只想澄清一下TCP发送器/接收器窗口和接收缓冲区的行为.
我对窗口化过程的理解如下:
窗口大小表示发送方可以一次发送的最大未确认字节数.
此尺寸在连接期间达成一致.
TCP发送方应该跟踪具有较低序列号的ACK,并且还在接收到ACK时将分组标记为已确认.如果最低序列号(它正在跟踪)与当前窗口中的第一个字节匹配,则向右滑动窗口.
现在,我对接收缓冲区的理解......
当数据包无序到达时使用.数据被放入缓冲区,接收器不会对其进行确认,而是继续确认在最早的无序数据包之前收到的最后一个数据包.这使得发送方在重复的ACK号之后"快速"重新发送下一个分组.
这是对这两个概念的正确理解,如果没有,请澄清.
谢谢!
我正在尝试构建一个应用程序,为用户提供有关其网络使用情况的统计信息,
从3G/Wifi冲浪到应用网络使用.
我正在寻找的主要重要数据是网络呼叫的网址.
我有下一个代码,找到浏览器历史记录:
private void getBrowserHistory()
{
String[] proj = new String[]{Browser.BookmarkColumns.TITLE, Browser.BookmarkColumns.URL};
String sel = Browser.BookmarkColumns.BOOKMARK + " = 0"; // 0 = history, 1 = bookmark
Cursor mCur = this.managedQuery(Browser.BOOKMARKS_URI, proj, sel, null, null);
this.startManagingCursor(mCur);
mCur.moveToFirst();
if (mCur.moveToFirst() && mCur.getCount() > 0)
{
while (mCur.isAfterLast() == false)
{
String title = mCur.getString(mCur.getColumnIndex(Browser.BookmarkColumns.TITLE));
String url = mCur.getString(mCur.getColumnIndex(Browser.BookmarkColumns.URL));
Log.d(LOG_TAG, "Site title: " + title);
Log.d(LOG_TAG, "Site url: " + url);
mCur.moveToNext();
}
}
}
Run Code Online (Sandbox Code Playgroud)
但要找到应用程序网络使用情况,我需要更像WireShark的东西
我认为该问题的最终解决方案很复杂,但欢迎任何建议.
我怀疑的是 - 一个端口是合乎逻辑的,为什么这样的限制呢?为什么我不能有9924593的端口或类似的东西?