相关文章
更多最近更新
更多HttpservletResponse写数据时客户端断开
2019-03-25 13:45|来源: 网路
我在写一程序,客户端用HTTP向服务器请求文件,服务器返回文件数据
OutputStream out = response.getOutputStream();
out.write(buf);
如果客户端断开(网卡禁用),write直接阻塞了,不抛出异常,怎么回事呀?
测试时,用java写客户端测试,网卡禁用或读的过程中关闭程序,服务器都会抛出异常,但用C++,网卡禁用了,write就阻塞了
OutputStream out = response.getOutputStream();
out.write(buf);
如果客户端断开(网卡禁用),write直接阻塞了,不抛出异常,怎么回事呀?
测试时,用java写客户端测试,网卡禁用或读的过程中关闭程序,服务器都会抛出异常,但用C++,网卡禁用了,write就阻塞了
相关问答
更多-
像每个数据库一样:MongoDB不支持这样的功能。 在客户端使用消息队列,并将更新请求作为生成器提供给队列,并添加一些消费者与MongoDB通话,从队列中提取数据。 Like every database: MongoDB does not support such a functionality. Use a message queue on the client side and feed your update requests as producer into the queue and add s ...
-
我认为你正在使用vanilla gen_tcp来实现你的服务器。 在这种情况下,当套接字从客户端关闭时,acceptor进程(传递Socket的进程)将收到{tcp_closed,Socket}消息。 来自erlang gen_tcp文档的示例代码。 start(LPort) -> case gen_tcp:listen(LPort,[{active, false},{packet,2}]) of {ok, ListenSock} -> spawn(fun() ...
-
处理弹出的实际逻辑的代码部分对客户端状态一无所知。 Redis不会等待响应发送完成以完成处理命令。 如果它像这样等待它会非常慢,特别是单线程。 您可以查看处理BLPOP的代码部分,看看这是如何发生的: // here is where redis actually pops from the list robj *value = listTypePop(o,where); serverAssert(value != NULL); // now it ads the reply to ...
-
服务器在接收1个数据包字符串时断开客户端,但不是另一个(Server disconnecting client when receiving 1 packet string, but not another)[2022-12-11]
我建议在服务器的except块中使用sys.exc_info()来查找有关异常的更多信息。 I suggest using sys.exc_info() in the except block in the server to find more about the exception. -
如何在WCF服务返回数据之前确定客户端是否断开连接?(How to find out if a client gets disconnected before a WCF service returns data?)[2023-09-21]
我不知道这是否仅适用于双工通道,但您可以订阅该通道的客户端关闭事件。 看看OperationContext.Current.Channel.Closed。 下面列出的博客文章有更多信息http://www.rcs-solutions.com/blog/2008/09/24/HandlingDisconnectsWithWCF.aspx I don't know if this only works for duplex channel but you could subscribe to the clien ... -
我找到了解决方案。这里的问题是数据大小。 Web套接字协议有其对邮件大小的限制。 在实施之前更好地遵循RFC标准。 这里解释rfc6455#section-5.2 I found solution to this.The problem here is with the data size. Web socket protocol has its limitation on message size. Better follow RFC standards before implementation. Ex ...
-
目前尚不清楚是否意味着断开连接,因为会话已经结束(即:所有内容都已成功完成)或断开连接是因为某些网络问题(或客户端取消了请求)。 如果这是第一种情况,那么很容易:您正在使用的协议(您自己的,或http,或其他)负责定义如何确定对话已结束。 如果出现这种情况,那么您只需关闭套接字即可。 如果是第二种情况,那么您必须有一个算法来确定是否必须关闭连接。 例如,通过实现超时或慢读阈值。 看一下Socket的javadoc ,了解如何设置超时。 值得注意的是,当你想要练习或学习某些东西时,可以创建自己的服务器,但是你 ...
-
没有任何东西专门发送到“屏幕”,它完全取决于请求的来源。 如果单击链接,浏览器将启动请求,浏览器将收到response并处理要显示的输出。 在这种情况下, request将来自您的ajax调用,因此ajax调用将处理请求,并且内容将在响应的.requestText属性中接收。 您可能希望确保HttpServletResponse对象的响应内容类型设置为“text / html”,但是因为您要使用ajax,所以您也可以考虑使用JSON的一个步骤。 Nothing gets sent to the "scree ...
-
您是否考虑过在服务器启动时为所有已启用的用户查询数据库,然后缓存这些结果? 这样您就可以避免查询每个用户连接。 您可以将授权用户存储在Dictionary或其他样式的查找表中。 Have you considered initially querying the database for all enabled users when the server starts then caching those results? this way you can avoid having to query on ...
-
您可以使用NetworkStream.Socket属性获取底层套接字,并使用它的Receive方法进行读取。 与NetworkStream.Read不同, Socket.Receive的链接重载将一直阻塞,直到读取了指定的字节数,并且只有在远程主机关闭TCP连接时才会返回零。 更新: @ jrh的注释是正确的, NetworkStream.Socket是受保护的属性,在此上下文中无法访问。 为了获取客户端Socket ,您可以使用TcpListener.AcceptSocket方法,该方法返回与新建立的连接 ...