问题标签 [tcpclient]

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 投票
1 回答
735 浏览

.net - TcpClient.Receive - 截断数据

这是一个“页面”的割礼(没有结尾)数据。如果在“/ / 1”和“/ / 2”之间写入System.Threading.Thread.Sleep(100),则一切正常。

0 投票
2 回答
1746 浏览

c# - WM6 的 C# TCP 客户端

我正在尝试使用 Windows Mobile 6 Professional 为 PDA 制作 TCP 客户端应用程序。我试图首先在我的笔记本电脑上制作它并且它有效。“智能设备”的代码完全相同,但它不起作用。

这是代码:

“readLine()”方法调用引发异常。我无法收到消息,否则我会收到类似“未安装此异常消息,您必须安装 NETCFv35.messages.en.cab”的信息。我已经安装了那个 .cab 但我得到了同样的信息。

出了什么问题?为什么此代码适用于我的笔记本电脑(WinForms 应用程序/NET3.5)而不适用于 PDA(智能设备/NETCF3.5)?有什么建议吗?

提前致谢!

0 投票
3 回答
4257 浏览

c# - 如何确定 HTTP 响应是否完整

我正在构建一个简单的代理,它将记录通过它传递的某些请求。代理不需要干扰通过它的流量(在项目的这一点),所以我试图在这个过程中尽可能少地解析原始请求/响应(请求和响应被推送关闭到要在代理之外记录的队列)。

我的示例工作正常,除了无法可靠地判断“响应”何时完成,因此我的连接打开时间超过了需要。相关代码如下:

我的问题是是否有一种简单的方法可以在不解析标头的情况下判断响应是否完整。鉴于此响应可以是任何东西(编码、加密、gzip 等),我不想解码实际响应来获取长度并确定是否可以断开我的套接字。

0 投票
2 回答
5728 浏览

c# - 通过 tcp 读取 xml 数据

我正在开发一个应用程序,它正在侦听 tcp 以获取来自其他设备的一些 xml 数据。我正在使用嗅探 c# 代码,我可以嗅探所有数据包。我的问题是,在每个数据包中,我都可以在每个数据包中找到一段数据。像这样:

真实数据如下所示:

我希望能够像真实数据一样获取字符串中的数据,而不是碎片。.net 中是否有可以做到这一点的方法或库?

0 投票
2 回答
2832 浏览

c# - C# TCP重连客户端的正确实现

我必须写一个TCP Client能够重新连接到服务器的东西。由于网络连接质量差或某些维护问题,服务器可能不可用。我正在寻找该领域的优质解决方案。

我目前的解决方案如下:

  • 在 ConnectionState 枚举中保持连接状态 {Offline, Online, Connecting}
  • TcpClient用类创建客户端。
  • 创建两个名为ConnectionCheckTimer, 和ReconnectTimer
  • 连接到服务器
  • 启动阅读器线程和连接检查计时器
  • 使用 tcpClient.GetStream() 执行读取,然后从此流中读取
  • 当在 readerLoop 中捕获异常时,客户端状态更改为脱机并启动 ReconnectTimer
  • ConnectionCheckTimer定期检查 lastMessageTimestamp 并将其与当前时间进行比较,如果间隔大于它启动的 maxValueReconnectTimer

目前我对这个解决方案不满意,因为它仍然会在 TcpClient.NetworkStream 上生成 ObjectDisposedException 等异常。我正在寻找一些干净且可重用的 Tcp 重新连接客户端实现,它能够处理在连接、断开连接、读取数据期间可能发生的所有套接字问题。

0 投票
2 回答
12018 浏览

asynchronous - BeginReceive / BeginRead 超时

我正在使用 NetworkStream 和 TcpClient 使用 BeginRead 异步接收数据。我需要对此操作应用超时,这样在指定的时间后读取将被中止。

据我所知,NetworkStream 或 TcpClient 不支持此功能-有一个 ReceiveTimeout 属性,但这似乎仅适用于同步等效项-“读取”。

甚至底层的 Socket 类似乎也不支持其 BeginReceive 方法中的超时。

我已经搜索过这个问题,我看到的唯一建议的解决方案是设置另一个后台线程来取消操作,如果它没有在超时期限内完成。这似乎是一个可怕的黑客攻击。肯定有更好的方法吗?

0 投票
1 回答
2631 浏览

c# - 另一端关闭时套接字未注册

我正在开发一个客户端/服务器应用程序,其中从客户端到服务器的连接保持打开状态,直到客户端应用程序关闭。

如果服务器应用程序意外关闭,而客户端正在读取数据,我希望客户端将此视为异常,然后捕获异常并引发以异常为参数的事件。

我编写了一个测试,我认为应该测试该系统是否正常工作,但我正在测试的对象似乎没有注册套接字已关闭,除非我输入一个断点然后继续。

测试的重要部分如下所示:

TcpListener对象listener正在侦听环回地址。

StreamingMonitor启用时开始侦听要检索的数据的长度。始终假定数据的长度适合带符号的 32 位整数。

当收到消息长度时,调用此方法。

该方法从网络流中读取数据,直到它读取了指定的字节数。如果远程连接关闭,那么它应该引发套接字异常。

但是,单元测试陷入了一个无限循环,等待错误发生,因为其中的套接字StreamingMonitor永远不会意识到另一端已经关闭。

我怎样才能SteamingMonitor意识到服务器已经消失了?

这可能在环回地址上吗?

对不起所有的代码,我想不出如何减少方法。

0 投票
3 回答
17737 浏览

.net - VB.NET 使用 system.net.tcpclient 编写 telnet 客户端

当我连接到我的 solaris 盒子时,这对我不起作用

服务器正在发回

??%

有谁知道我做错了什么

0 投票
1 回答
549 浏览

c# - 如何持续监控新的 TCP 客户端?

我有一个 TCP 服务器,它持续异步监视新的传入客户端并将它们添加到客户端列表中:

但是,这段代码有两个问题。

第一个是StartMonitoring()调用HandleNewClient()。没有它,服务器将只接受一个传入连接并忽略任何其他连接。我想做的是让它不断地监控新客户,但我现在的做法让我觉得有些不对劲。有没有更好的方法来做到这一点?

第二个是_isMonitoring国旗。我不知道如何阻止异步回调激活并阻止它循环。关于如何改进的任何建议?我想坚持使用异步回调,避免手动创建新线程来运行其中包含while (true)循环的方法。

0 投票
2 回答
3918 浏览

c# - 通过 TCP 发送大对象:“在解析完成之前遇到流结束”

SerializationException每当我尝试从 a 反序列化双打列表时,我都会得到a NetworkStream

在解析完成之前遇到流结束

我有一个简单的客户端服务器架构:我TcpTransportClient包装了 a 的功能,TcpClient并使用了两种基本方法:(Send发送消息)和Receive(阻塞直到收到消息)。

Send函数接受 a Message,使用 a 对其进行序列化,BinaryFormatter并通过NetworkStream.

接收函数从 读取字节到缓冲区NetworkStream,然后使用 反序列化消息BinaryFormatter

我有一个基本的发送线程:

和一个接收线程,只要 aTcpClient被接受就会启动:

当我尝试在Receivemy 的方法中反序列化消息时总是会发生异常TcpTransportClient,但只有在我将一些数据放入数据集中时才会出现问题。通过网络发送值列表并在接收端成功反序列化它们的正确方法是什么?

PS我在一个几乎相同的问题中尝试了该解决方案,但没有奏效:我仍然遇到同样的异常。