问题标签 [networkstream]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
387 浏览

vb.net - 需要 NetworkStream.Read 行为的说明

我正在使用阻塞读取从网络流中获取实时数据,如下所示:

看着数据包在 Wireshark 的线路上进来,我看到有时当一个新数据包进来时,.NET 会立即看到它并解除阻塞,让我处理它。其他时候,多个数据包会在 NetworkStream.Read 解除阻塞之前进入线路并一次性返回全部 - 在 NetworkStream 读取解除阻塞之前,我已经看到多达 8 个数据包缓冲区。

这是预期的行为吗?有没有办法在通过网络接收到每个数据包时立即抓取和处理它?异步接收模型在这里会有什么不同吗?还是我只是从根本上误解了 TCP 流的工作方式?

0 投票
1 回答
1024 浏览

c# - 连续发送三个或更多数据包时遇到问题

我正在尝试使用 实现客户端/服务器模型TCpClient,其Networkstream.Write()/Read()函数发送/接收字节数组。

它大部分时间都有效,除非我尝试一个接一个地连续发送三个或更多字节数组。客户端说它全部发送,但服务器只接收前两个。

下面是我用来从客户端编写到服务器的代码。

是巩固他们还是什么?我只是不明白当我发送 2 个而不是 3 个或更多时服务器如何接收不同的数组。如果我将 3 个写入分开,它可以正常工作,但我真的不想这样做。

任何帮助将非常感激。

编辑:

已解决 :) 感谢您的所有帮助。它一次推送 2-3 个数据包,我的系统认为 1 个突发 = 1 个数据包。我刚刚用 TCPClient 重写了我现有的架构来检测多个数据包:) 再次感谢您的帮助!

0 投票
0 回答
720 浏览

c# - 从 gprs 连接接收数据的延迟

我正在用 C# 编写解析器。它接收并发送一个带有 的数据包max length = 100。但是,每个数据包之后(接收和发送)之间的时间超过 2 秒。我不知道这是我的实现问题还是 gprs 方面的问题。

服务器监听:

开始接收数据:

这是一个简单的实现,我收到第一个数据包的 bytesRead 与第二个相比大约是 2s。我觉得太慢了。我怎样才能增加接收时间?我在收到数据和回复后已经检查过了,只用了 1 毫秒。

添加发送部分:

0 投票
3 回答
8382 浏览

c# - 异步读取期间 TcpClient 断开连接

我有几个关于完成 tcp 连接的问题。

  1. 客户端使用 Tcp 连接到我的服务器,在接受客户端后 listener.BeginAcceptTcpClient(ConnectionEstabilishedCallback, null);,我开始使用networkStream.BeginRead(....).
    当我等待消息时客户端断开连接会发生什么?(例如,它失去了电源、互联网等)
    我怎么知道它什么时候发生?

  2. 如果读取成功后,我做一些事情,然后调用networkStream.Close(); client.Close();客户端会看到什么?如何“优雅地”终止连接?

  3. 如果我正在等待读取(使用 BeginRead),然后(在不同的线程上)关闭同一个流,会发生什么?

编辑添加:我在客户端和服务器之间确实有一条乒乓消息。够了吗?如果我没有收到 ping,请终止我的 NetworkStream?肯定有更好的东西。

0 投票
2 回答
18319 浏览

c# - C# - TcpClient - 检测流结束?

我正在尝试将一个古老的网络摄像机连接到我的计算机,但我遇到了一个非常基本的问题——检测流的结束。

我正在使用TcpClient与相机通信,我实际上可以看到它正在传输命令数据,这里没有问题。

读回响应是问题开始的地方。我最初认为像以下代码这样简单的东西会起作用:

但它没有,所以这次我尝试了另一个版本,使用了 ReadByte()。描述指出:

从流中读取一个字节并将流中的位置前移一个字节,如果在流的末尾则返回 -1。

所以我想我可以按照以下方式实现一些东西:

不行,还是不行。我实际上可以看到数据进入并在某个点之后(这并不总是相同,否则我每次都可以简单地读取那么多字节)我开始获取0其余元素的值并且它不会停止直到我手动停止执行。这是它的样子: 数据

所以我的问题是,我在这里缺少一些基本的东西吗?如何检测流的结尾?

非常感谢,

H。

0 投票
2 回答
15073 浏览

c# - NetworkStream.Write 与 Socket.Send

我有一个使用自定义 FTP 库的 ac# 应用程序。现在我使用 Socket.Send 发送数据,但我想知道用套接字启动 NetworkStream 并改用 NetworkStream.Write 是否会更好。

使用其中一个有什么优势吗?

0 投票
1 回答
115 浏览

c# - ParameterInstance.lockObject 的线程锁,它有效吗?

我用谷歌搜索了很多,但没有找到答案。我正在编写我自己的小 Tcp 库以方便自己使用。在服务器上,我有一个“ConnectedClient”对象,它有一个套接字和一个网络流。在服务器静态类上,我有一个发送以长度为前缀的流的发送函数。我希望流是线程安全的,但对于每个客户端。这会为此工作吗?

我希望我说得足够清楚,如果没有,请询​​问更多细节。

0 投票
2 回答
6397 浏览

java - 如何在 Java 中读取网络流数据(协议包)

正在解码某个 gps 设备用于通信的协议。现在,正在分析它发送的第一个数据包。我能够阅读它,但我认为我没有正确阅读它。

这是我到目前为止得到的:

输出:

-INITSESSION-- 监听端口:1954

总包大小:17

确认包:000F

数据包:333532383438303236323631393534

全包:000F333532383438303236323631393534

------闭幕------------

现在,我的问题:

这里发生的是设备发送 [0x00][0x0F]xxxxxxxxxxxxxxx ,其中 xxxxxxx 是它的imei(数据包)。我的问题是数据包上的 3 太多了,所以真正有效的输出是

352848026261954

您可以通过删除 3's 获得。我的问题是:这种行为是否来自我的代码或其协议的一部分?我可以以编程方式更正此问题,但我想知道代码是否有办法导致这些额外的 3 秒。

0 投票
2 回答
10213 浏览

c - 仅使用 MAC 地址在两个系统之间进行通信

我想知道如何使用C 程序(不使用 IP 地址)仅使用 MAC 地址在两个系统之间进行通信。我认为这是原始的以太网通信。我的要求是仅使用 MAC 地址将数据从客户端发送到服务器。可能这可以通过创建我们自己的原始以太网框架来完成。

请帮助我解决这个问题。如果有人用C写过代码,请分享。

这个链接可以帮助你,http://aschauf.landshut.org/fh/linux/udp_vs_raw/ch01s03.html

0 投票
0 回答
524 浏览

c# - XmlReader 在第一次读取后挂起

我正在尝试通过 TcpClient 读取 xml 流:

将流创建为之后

我继续阅读:

这适用于第一个流。我看到数据很好,但它在以下位置挂起并出现以下错误while(r.Read)

无法评估表达式,因为本机框架位于调用堆栈的顶部

有什么建议么?