草庐IT

socket_handle

全部标签

sockets - 断开连接后尽快断开流式 HTTP 连接

因此,我们正在努力实现的目标是维持从移动设备到我们的ErlangHTTP服务器的大量并发连接。移动设备当然可以有非常间歇性的连接,所以我们希望尽快丢弃死连接以避免它们的开销。现在,我不确定我们应该在哪个级别检测死连接。TCP有keepalive数据包,需要ACK。所以理想情况下,我们每15秒发送一个keepalive数据包,如果我们在接下来的15秒内没有收到ACK,那么我们将断开连接。但是,我不知道这在Erlang中是否可行。此外,我认为某些NAT、wi-fi路由器和移动网络可能会在一定时间内确认keepalive,如果我错了请纠正我。是这样吗?如果是这样,是否有任何TCP级别的替代方

Java Socket - 如何在 3 点之间发送和接收信息?

在我的应用程序中,多台PC将连接到服务器。服务器将接收消息然后发送到系统。系统可能会向服务器发回一条消息,而这条消息应该由服务器发送给PC。基本上是这样的:PC0------------------>服务器---->向系统发送PC消息。系统------>发送消息到PC0服务器---->PC0与PC1、2、3等相同...但是我该怎么做呢?我已经可以将PC消息发送到服务器和服务器发送到系统,如下所示:这是从ServerThread运行的:try{Socketsocket=serverSocket.accept();if(socket!=null){clientList.add(newCli

java - 与 Java 服务器的 PHP tcp 连接在 socket_read() 上挂起

我正在尝试创建一个PHP客户端来连接到一个简单的Java服务器,发送一些数据,然后接收返回的响应。Java服务器在与用Java编码的简单客户端交互时响应良好,但是一旦从PHP客户端发送请求,它就会在调用socket_read()时无限期挂起。如果这一行被注释掉,数据就可以正常到达,但如果没有注释掉,就好像Java服务器根本没有接收到数据。这与之前提出的问题非常相似:SimpleJavaTCPServerandPHPClientProblems但据我所知,我的代码在操作上与给出的解决方案几乎相同。Java服务器是多线程的,用于程序的其他部分,我不认为这是导致问题的原因。php脚本有一个U

java - Netty socket.shutdownOutput() 等同于避免 TCP RST?

我想知道是否有一种方法可以避免在Netty中关闭连接时设置TCPRST标志而不是TCPFIN标志,因为TCP接收缓冲区中仍有输入数据。用例是:客户端(用C语言编写)发送包含很多字段的数据包。服务器读取数据包,在早期字段上遇到错误,抛出异常。异常处理程序捕获异常,写入错误消息,并将关闭写入回调添加到写入future。问题是:接收缓冲区中的剩余数据导致Linux(或Java..)使用RST标志标记TCP数据包。这可以防止客户端读取数据,因为当它开始尝试时发现由于套接字关闭而导致读取错误。对于直接的Java套接字,我相信解决方案是在关闭之前调用socket.shutdownOutput()。

java.net.Socket > outputStream > BufferedOutputStream flush() 确认

有没有办法知道BufferedOutputStream线程的flush()方法何时或是否成功完成?在我的例子中,我使用它通过java.net.Socket发送一个简单的字符串。在下面的代码中,flush()方法与BufferedReader.read()方法并行运行,套接字输出立即被输入读取阻塞,从而导致类似于死锁的情况。我想做的是等待输出结束,然后开始读取输入。Socketsk=newSocket("192.168.0.112",3000);BufferedOutputStreambo=newBufferedOutputStream(sk.getOutputStream());bo.

Java:如何使用 ServerSocket 和 Socket 正确关闭套接字连接

我目前有一个简单的即时消息程序,它使用Java的Socket和ServerSocket类。它按预期运行,但是当我尝试关闭连接时,它没有使用4次握手TCP拆卸来关闭连接。相反,它使用RST数据包突然关闭连接。我关闭连接的方式是从客户端向服务器发送一个字符串,服务器会将其识别为关闭连接的命令。然后,我在服务器上使用ServerSocket.close()方法,在客户端上使用Socket.close()方法。使用这些类正确关闭TCP连接的正确方法和/或事件顺序是什么?客户端断开代码://Disconnectsfromremoteserver//Returnstrueonsuccess,fal

sockets - 是重用连接更好,还是为了频繁发送数据而更新连接?

我有一个TCP服务器应用程序,它监听来自客户端的连接,这些客户端以相当小的间隔(大约20秒)频繁发送“心跳”数据包。这样的客户有几百个,最多1000个。它以前已经实现(不是由我实现),以便为每个心跳建立一个新的TCP连接,然后关闭它。在我看来,保持连接打开并重用它进行通信会更好,但我不确定。重新建立连接是在浪费时间和带宽,而保持几百个打开的连接(在服务器的情况下)不是问题,或者相反,不关闭它们是对资源的巨大浪费吗? 最佳答案 最佳选择取决于您拥有的内存量、连接延迟和心跳频率:每个TCP连接需要1xRTT时间来建立,因此每次创建一个新

Java TCP-Sockets 传输大于 4gb 的文件

这个问题在这里已经有了答案:Javamultiplefiletransferoversocket(3个答案)关闭4年前。我正在尝试使用JavaSocketsAPI传输大于4gb的文件。我已经通过InputStreams读取它并通过OutputStreams写入它。然而,在Wireshark中分析传输的数据包,我意识到TCP数据包的序列号随着数据包的字节长度增加,似乎是1440字节。这导致当我尝试发送大于4gb的文件时,超过了TCP的Sequence-Number字段的总大小,导致很多错误包,但在Java中没有错误。我的传输代码目前如下所示:DataOutputStreamfileTra

c++ - Boost::ASIO:在多线程上使用 tcp::socket

所以我有一个TCP服务器,它在特定端口上等待客户端连接。如果有一个客户端连接,我会构造一个带有一些asio::io_service的tcp::socket对象,然后我接受那个套接字。示例:voidGateway::server(boost::asio::io_service&io_service,unsignedshortport){tcp::acceptora(io_service,tcp::endpoint(tcp::v4(),port));boolUARTToWiFiGatewayStarted=false;for(;;){tcp::socketsock(io_service);

sockets - Android 中实时多人游戏的套接字编程与 WebSocket 对比

我正在使用Android(java)开发实时多人游戏,我将双向连接的选择范围缩小到WebSocket和Socket编程我的要求是:快速react高频发送和接收小负载稳定的连接安全连接图像和音频传输在应用聊天中根据这些要求,我想知道哪个更合适。谢谢。 最佳答案 WebSocket是一个常规的TCP套接字连接:主要是它在Web浏览器中受支持,因此可以从Javascript使用它们。作为HTTP连接启动,允许它轻松地跨越代理和防火墙,并利用HTTP机制,如cookie和OriginHTTPheader等。因此,例如,Websocket连接