草庐IT

java - ObjectInputStream.readObject() 断开连接时不抛出异常

我在TCP连接上使用ObjectStream将数据从客户端发送到服务器。有时,客户端在服务器仍在等待新数据时终止。在这些情况下,readObject()一直处于阻塞状态,没有抛出异常,我的计算就停止了。如何确定ObjectStream是否已断开连接或仅在等待更多数据?由于通信之间的长时间延迟,使用超时很困难。 最佳答案 唯一安全的方法是使用超时。我怀疑您在检测断开连接时看到的长时间延迟是由于您拥有的网络的性质造成的。如果死连接的计算已经停止,这真的是个问题吗?这可能会在短时间内浪费资源,但您应该在几分钟内检测到故障并清理资源。

c# - 如何处理 TcpClient 从 TcpListener 断开连接

我有一个使用TcpClient的客户端和一个使用TcpListener的服务器。当客户端与服务器断开连接时,我该如何处理?如果程序崩溃了,我该如何处理断开连接? 最佳答案 如果您的程序崩溃,操作系统中的所有当前连接都将关闭。使用TCPClient,您可以将其分配给您自己的类(在构造函数等中),并从您的类中发出一个用于断开连接的事件。然后在连接到达时在您的监听器中创建您的类,在某处(列表、字典等)添加对该类的引用。附上事件,愉快进行。如果你想在套接字级别处理服务器连接断开,通常只有当你想“写入”到套接字时,你才能真正检测到它不再连接到

c - TCP 在达到默认的 15 次尝试之前停止重传(物理断开连接后)

我有一个客户端/服务器程序,我可以在其中从服务器向客户端发送可变数量的数据包。/proc/sys/net/ipv4/tcp_retries2设置为默认值15,但是当我拔下以太网电缆时,服务器在放弃之前只发送7或8次(它会有所不同)重传,然后是连续的ARPwho-has要求..有人向我提出的一个建议是TCP在7-8次重传后停止的原因是该路由的ARP表条目在服务器达到适当的重试次数之前到期。我试图通过更改来解决这个问题/ipv4/route/cg_timeout为1500(从300开始),但程序行为没有明显差异..如果有人能阐明或提供替代解释,我们将不胜感激..

c# - TCP 连接断开/或无法通过 TCP 接收数据

我有一台客户端PC使用我编写的TCP_client程序通过TCP向我发送数据。基本上,我正在向服务器发送一条“HelloMessage”。classProgram{constintourPort=9090;staticIPEndPointserverEndPoint=newIPEndPoint(IPAddress.Parse("192.168.1.10"),3000);staticASCIIEncodingencoder=newASCIIEncoding();staticSystem.Timers.TimeraTimer;staticvoidMain(string[]args){aTi

Python Socket - 处理客户端断开连接

我对在Python中使用Sockets类进行了大量研究,但我很难理解如何实现我的问题的解决方案。我还要明确一点,我完全没有使用Python语言的经验。我拼凑的代码来自其他几个示例。它主要有效,我只需要解决最后一个错误。想法是这个脚本将在树莓派上运行,这将是树莓派的唯一目的。通过TCP,您将请求一个图像编号,Pi将全屏显示该特定图像。很简单,对吧?同样,一切正常,除非与客户端的以太网连接断开,或者客户端关闭连接。然后脚本进入一个糟糕的无限循环,CPU使用率达到最大值,我别无选择,只能物理地重启Pi。我需要一种方法来确保这种情况不会发生,并让客户端能够在发生断开连接/网络故障等情况下重新建

node.js - 客户端在连接到 Node js TCP 服务器后立即断开连接

这是我第一次使用nodejs。我试图让客户端连接到服务器并保持连接而不关闭。这一切都托管在virtualbox中托管的ubuntu服务器版本中。我已经检查过服务器实际上正在使用5000端口监听netstat-antWebsockets也可以在我的浏览器上使用。我得到以下错误输出Echoserverdotcome192.168.1.107node.js:134throwe;//process.nextTickerror,or'error'eventonfirsttick^Error:EPIPE,BrokenpipeatSocket._writeImpl(net.js:159:14)atS

java - 当客户端断开连接时,服务器不会删除/断开套接字

我一直在开发聊天室。多线程服务器接受客户端btnConnect.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEventarg0){try{intport=2345;ServerSocketserver=newServerSocket(port);System.out.println("Waitingforclients");Threadthread=newThread(){publicvoidrun(){while(true){Socketsocket;try{socket=server.a

c - 客户端断开连接后第一次调用 'send' 时未获得 sigpipe

我正在开发一个TCP服务器端应用程序,它将数据转发到客户端。我面临的问题是,如果我的客户端断开连接,我会尝试在我的服务器端应用程序中找出哪些数据已发送,哪些未发送。我的研究表明,基本上有两种方法可以找出答案:1)从socket读取并检查FIN信号是否返回2)在发送调用中等待sigpipe信号第一个解决方案对我来说似乎不可靠,因为我不能保证客户端不会发送任何随机数据,因此即使它不应该使我的测试成功。第二个解决方案的问题是,我仅在调用send之后的X之后获得sigpipe,因此无法保证哪些数据真正被发送,哪些没有。我在SO和其他网站上读到,sigpipe只应该在第二次调用send之后出现,

tcp - C#检测TCP客户端断开连接

我正在使用C#窗口应用程序在TCP多线程服务器上工作,我正在尝试检测客户端机器是否关闭并与服务器断开连接。我已经阅读了一些帖子并有了一些想法:Howtodetermineifthetcpisconnectedornot?Instantlydetectclientdisconnectionfromserversocket但我不确定在哪里调用函数IsConnected我的代码如下:publicBindingListtabletList=newBindingList();privateSocketsocket_Server=null;privateThreadmyThread=null;pr

delphi - Indy 服务器 TIdTCPServer.OnExecute 在客户端断开连接后连续调用

我知道我希望从客户端获得多少字节(在此代码中为100)。如果客户端不给我100,我根本不需要这个数据包,因为它已损坏。我遇到客户端提供少于100个字节并断开连接的情况。在这种情况下,我正在捕获异常并且一切都会好起来的,除了在这个异常之后我的ServerTCPExecute被不连续地调用了很多次。没有任何其他客户端连接。为什么会这样?如果我执行TIdYarnOfThread(AContext.Yarn).Thread.Terminate;一切正常。但我不确定这是好的解决方案。procedureForm1.ServerTCPExecute(AContext:TIdContext);begi