问题标签 [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.
c# - 在 TCPClient 中发送多个命令
我正在尝试使用
在课堂上,每次我发送类似LIST
, RETR
,的命令时STOR
,我都会在执行命令和获得响应的特定时间锁定 TCPClient。
现在,当我在执行之间发送另一个命令时,它无法再次锁定该 tcpclient 实例。
当一个命令正在执行时,我应该如何发送另一个命令。对于我需要锁定 TCPClient 的所有命令,我无法更改。
java - 如何保持多个 Java HttpConnections 对同一个目的地打开
我们经常使用 HttpURLConnection API 向同一个提供者调用 REST API(一种聚合用例)。我们希望保持 5 个连接池始终对提供者主机开放(始终使用相同的 IP)。
什么是正确的解决方案?这是我们尝试过的:
此时我们读取输入流,直到 BufferedReader 不再返回字节。如果我们想重用与提供者的底层连接,那么在那之后我们该怎么做?我们的印象是,如果输入流被完全读取,连接就会被添加回池中。
它已经以这种方式工作了几个星期,但今天它停止工作产生这个异常:java.net.SocketException: Too many open files
我们发现许多处于 CLOSE_WAIT 状态的套接字(通过运行lsof
):
java 1814 root 97u IPv6 844702 TCP colinux:58517->123.123.254.205:www (CLOSE_WAIT)
conn.getInputStream().close() 或 conn.disconnect() 不会完全关闭连接并将其从池中删除吗?
tcp - 哪个超时值决定空闲 TCP 连接将关闭多长时间?
建立连接后,双方没有通信,哪个超时值决定了空闲连接被关闭?
.net - NetworkStream.Read 延迟.Net
我有一个继承自 TcpClient 的类。在该课程中,我有一种处理响应的方法。在我调用的那个方法中,我使用 MyBase.GetStream 获取 NetworkStream 并在其上调用 Read。
这很好用,除了第一次调用读取块的时间太长。太长了,我的意思是套接字已经接收到大量数据,但在达到任意限制之前不会读取它。我可以看到它使用数据包嗅探器 WireShark 收到了大量数据。
我已将接收缓冲区设置为少量,并且非常少量(例如只有几个字节)无济于事。我对传递给 read 方法的缓冲区字节数组做了同样的事情,但它仍然延迟。
或者换一种说法。我下载600k。下载需要 5 秒(与服务器的连接速度略高于 100k/秒,这是有道理的)。初始读取调用需要 2-3 秒,并告诉我只有 256 个字节可用(256 是接收缓冲区和我读入的数组的大小)。然后神奇地,其他几十万字节可以在 256 字节块中读取,每个块只需几个进程滴答。使用数据包嗅探器,我知道在最初的 2-3 秒内,套接字收到的不仅仅是 256 个字节。我的连接在 3 秒内不是 0.25k/秒,在 2 秒内不是 400k。
当它们进入时,如何从套接字中获取字节?
.net - 当另一端在.NET中关闭时如何关闭TcpClient?
我有一个处理 TcpClients 的类。班级应该做的是:
因为我不知道其他客户端何时会发送请求,所以我无法在设置超时的情况下进行读取,所以到目前为止我所拥有的是:
这种方法的问题是我永远不知道客户端何时对 Close() 进行了远程调用。
有没有办法解决这个问题?
multithreading - 读取时的 TcpClient 和 StreamReader 块
这是我的情况:
我正在编写一个聊天客户端来连接到聊天服务器。我使用 TcpClient 创建连接并从中获取 NetworkStream 对象。我使用 StreamReader 和 StreamWriter 来回读取和写入数据。
这是我读到的样子:
这工作得很好,花花公子。在我的主程序中,我创建了一个线程,该线程不断调用此 Read 方法以查看是否有数据。下面是一个例子。
这工作得很好。当我想关闭应用程序时,问题就来了。我收到来自 UI 的关闭命令,并告诉侦听线程停止侦听(即停止调用此读取函数)。我调用 Join 并等待这个子线程停止运行。像这样:
问题是它永远不会停止运行!我进入了代码,监听线程被阻塞了,因为 Read() 方法被阻塞了。Read() 只是坐在那里不返回。因此,线程永远不会有机会休眠 1 毫秒然后被中断。
我敢肯定,如果我让它坐得足够长,我会得到另一个数据包并有机会让线程休眠(如果它是一个活动的聊天室或从服务器获得一个 ping)。但我不想依赖那个。如果用户说关闭我想关闭它!
我发现的一种替代方法是使用 NetworkStream 的DataAvailable方法,这样我就可以在调用 StreamReader.Read() 之前对其进行检查。这不起作用,因为它不可靠,并且在从服务器读取数据包时丢失了数据。(因为我无法正确登录等等)
关于如何优雅地关闭这个线程的任何想法?我不想在监听线程上调用 Abort() ......
c# - 表示远程主机已关闭连接的 NetworkStream.Read 的替代方案?
关于使用该类处理 TCP/IP 连接,除了等待方法返回 0TcpClient
之外,还有其他方法可以检查远程主机是否关闭了连接?NetworkStream.Read
c# - 我是否应该总是调用 TcpClient.EndConnect (即使连接失败?)
C# 有几个用于网络任务的有用类,例如 TcpClient 和 WebClient。两者都有 BeginX 方法(分别为 BeginConnect 和 BeginGetResponse),根据 MSDN,应该始终跟随 EndX。两者都接受操作完成后调用的委托。
但是,假设我们无法建立连接,因此调用这些方法会引发异常。我应该仍然调用各自的 EndX 方法,还是应该先检查连接是否建立,然后才调用它们?
或者,在以下示例中,我应该使用 OnSocketConnected1 还是 OnSocketConnected2?
谢谢
c# - 在 C# 中指定与 TCPClient / Socket 一起使用的传出 IP 地址
我有一个分配给网络适配器的多个 IP 地址的服务器。
该服务器上有一个客户端应用程序,用于通过 TCPClient 连接到另一个服务器应用程序。对于所有传出通信,我的服务器都使用默认 IP 地址,但是对于这个应用程序,我希望将传出通信发送到另一个本地 IP 地址。
向外通信时是否可以指定另一个本地分配的 IP?
我试图让远程服务器应用程序认为它来自另一个 IP,因此它将通过防火墙等......
提前致谢
c# - 如果我已经连接到服务器。那么我如何显示异常说它已经连接
如果用户在未输入任何输入的情况下单击连接,如何添加显示必须输入的异常?如果用户在不输入名称、IP 和端口的情况下单击连接按钮,我希望显示一个消息框。[解决了]