问题标签 [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 投票
2 回答
2803 浏览

java - Java SocketChannel 吃掉我的字节

我为远程服务器创建了一个 SocketChannel,以在 Tomcat 上发送和接收消息。为了从远程计算机接收消息,我使用了一个专用于任务的线程(只有这个线程将从套接字读取,没有别的)。

当 SocketChannel 接收到一些字节时(我一直在非阻塞模式下轮询 SocketChannel 以获取新数据),我首先读取 4 个字节以获取下一条消息的长度,然后从 SocketChannel 分配并读取 x 个字节,即然后解码并重建成一条消息。

下面是我的接收线程代码:

我从 SocketChannel 收到的第一个字节很好,我成功解码了消息。但是,下次我从 SocketChannel 读取时,套接字向前跳过了大约 100 个字节,这导致读取错误的字节并将其解释为长度,从而导致所有内容都损坏。

代码有什么问题?没有其他线程正在从 SocketChannel 读取。

0 投票
1 回答
1854 浏览

c# - 使用 TCPClient 和 RAW FTP 来检索文件

尝试使用 TCPClient 和 RAW FTP 检索文件时,我收到以下消息:

425 建立连接失败。

我连接使用:

然后我使用USER ****and登录到服务器PASS ***。我设法使用 更改到正确的目录CWD /**/**,如前所述,这一切正常,我得到了预期的响应消息。

但是,当下面的代码执行时,上面提到的消息就是我收到的全部信息。

我对 C#.NET 相当陌生,并且被专门要求使用这种连接方法而不是 httpWebRequest。

我尝试接收的文件是一个文本文件,仅包含“获取此消息”,但使用时会更大。任何帮助深表感谢。

0 投票
2 回答
1033 浏览

c# - C# 发现 LocalEndPoint AddressFamily 端口号

当我使用 TcpClient 类建立到服务器的 tcp 连接时,有没有办法找出这个连接的源端口?我正在尝试实现 exec 协议,而 stderr 端口似乎总是源端口 + 1。

0 投票
2 回答
2373 浏览

c# - 从 ip 和端口接收数据的线程

我想编写一个程序来使用 tcpClient 从指定的 ip 和端口号接收一些数据。我第一次使用 while(true)。我的朋友告诉我使用线程而不是 while 循环。于是我照他说的做了。

工作正常,但不如我希望的那么好。当我运行我的程序并向它发送例如“Hello world”字符串时,它会接收它,然后完成工作并退出。我想保持线程以获取更多传入数据,但我不知道该怎么做。也许有人知道我该怎么做?

使用这个发送数据我

0 投票
3 回答
1799 浏览

network-programming - 创建 802.11 发射器并从 WiFi 路由器读取数据

这个问题有两个部分。也可以随意给我文章的 URL 或推荐书籍,因为答案可能有点深入,以便快速论坛回复。

1) 我需要感应流过一对电线的功率并通过 802.11 传输有关它的数据。我想涉及到一个微控制器,但我不知道从哪里开始。不需要安全。我只希望发射器定期广播数据(例如,每秒 1 帧)。

2) 我需要从我的 802.11 路由器中获取步骤 1 中的数据广播。我希望能够在第 1 步中对任意数量的发射器执行此操作。第 1 步中的每个发射器是否具有可以从我的 802.11 路由器中查找的特殊 ID?我什至不知道如何在我的路由器上获得一个“句柄”来查看它正在接收什么数据。所以,首先,我如何获得我的路由器,然后我如何在步骤 1 中看到来自我的发射器的这些可能的多个数据流。

谢谢,杰

0 投票
1 回答
3387 浏览

c# - .Net C# TcpClient / Socket HTTP 客户端性能/效率

我正在使用 .Net TcpClient / Sockets 编写一个 HTTP 客户端。

到目前为止,客户端通过遍历 NetworkStream 响应(在向 TcpClient 写入 GET 请求之后)、解析标头并检索相关的消息正文字节/分块字节来处理 Content-Length 和分块响应。为此,它使用 NetworkStream ReadByte 方法。

这一切都很好,但性能是应用程序的一个关键考虑因素,所以我想让它尽可能快速和高效。

最初,这将涉及将 ReadByte 交换为 Read 以获取消息正文(基于 Content-Length)或分块消息正文字节检索到适当大小的缓冲区,在所有其他区域使用 ReadByte(例如读取标头、块大小等)。

我很想知道关于更好/不同方法来实现最佳性能的想法?显然,HTTP 的主要问题是不知道响应流的长度,除非在检索时对其进行解析。

我没有为此使用更多抽象类(例如HttpWebRequest)有一个特定的原因(我需要在套接字级别进行更好的控制)。

非常感谢,

克里斯

0 投票
4 回答
6264 浏览

c# - 无法从远程机器连接

我有一些问题,我无法在家里检查它是否工作。这是代码

我也有一个简单的程序来连接到它,然后发送一个带有数据的字符串。它在本地主机上运行良好,但是当我尝试连接不同的计算机时出现问题。

我什至关闭了我的 PC 和路由器上的防火墙,就像我在朋友的笔记本电脑上所做的那样。每次我尝试连接时,他的电脑都拒绝连接。也许我做错了什么?

当然,ipAddress现在是一个本地地址,因为它目前只使用它。有什么建议该怎么做吗?

0 投票
2 回答
17020 浏览

c# - 在 C# 中接收和发送数据

我还在努力改进我之前写的东西。现在我遇到了接收数据的问题。我有一个程序,我用它使用 tcpClient 将字符串发送到我正在侦听指定端口的程序。它工作正常,所以我决定再发送一次数据

有时它工作得很好,但更多时候,我们称它为接收器,无法得到我试图发送的东西。我真的不知道它有什么问题。看起来发送方法可能有问题。这是接收器输出的示例

0 投票
4 回答
1193 浏览

c# - C#:在 TCP 处理程序线程中处理终止信号?

我在 C# 中使用 TcpClient 类。

每次有新的 tcp 连接请求时,通常的做法是创建一个新线程来处理它。并且主线程应该可以随时终止这些处理程序线程。

我对每个处理程序线程的解决方案如下:

这种轮询方法的问题在于,所有这些处理程序线程都将占用大量的处理器资源,尤其是在这些线程数量巨大的情况下。这使得它非常低效。

有没有更好的方法来做到这一点?

0 投票
2 回答
10039 浏览

sockets - 在使用 NetworkStream 类时检测客户端 TCP 断开连接

有朋友来找我的一个问题:在连接的服务器端使用NetworkStream类时,如果客户端断开连接,NetworkStream检测不到。

精简后,他的 C# 代码如下所示:

该代码有效,因为客户端可以成功连接并且服务器可以读取发送给它的数据。但是,如果远程客户端调用 tcpClient.Close(),服务器不会检测到断开连接 - client.Connected 保持为真,而 ns.DataAvailable 为假。

对 Stack Overflow 的搜索提供了一个答案——因为没有调用 Socket.Receive,所以套接字没有检测到断开连接。很公平。我们可以解决这个问题:

(为简洁起见,我省略了异常处理代码。)

此代码有效,但是,我不会将此解决方案称为“优雅”。我知道的问题的另一个优雅解决方案是为每个 TcpClient 生成一个线程,并允许 BinaryFormatter.Deserialize (née NetworkStream.Read) 调用阻塞,这将正确检测断开连接。但是,这确实会产生为每个客户端创建和维护线程的开销。

我觉得我错过了一些秘密的、很棒的答案,它会保留原始代码的清晰度,但避免使用额外的线程来执行异步读取。虽然,也许 NetworkStream 类从来没有为这种用途而设计。任何人都可以解释一下吗?

更新:只是想澄清一下,我有兴趣看看 .NET 框架是否有一个解决方案,涵盖了 NetworkStream 的这种使用(即轮询避免阻塞)——显然可以做到;NetworkStream 可以很容易地包装在提供该功能的支持类中。看起来很奇怪,该框架本质上要求您使用线程来避免阻塞 NetworkStream.Read,或者窥视套接字本身以检查断开连接 - 几乎就像它是一个错误。或者可能缺少某个功能。;)