大家好,今天小编关注到一个比较有意思的话题,就是关于socket连接能保持多久的问题,于是小编就整理了3个相关介绍的解答,让我们一起看看吧。
vb.netsocket如何保持连接?
长连接一般用于异步通讯处理,短连接一般用于同步通讯处理。要保持长连接,只要连接上以后,不调用Shutdown和Close就不会断,如果断了,检查你的代码。
如何实现socket的长连接?
现编这个就是个多线程服务器,只要在client不释放连接,服务器端的run里边写while(TRUE)循环,那么就可以长期连接。class ConnectionThread extends Thread{Socket client;int counter;public ConnectionThread(Socket cl,int c){client = cl;counter= c;}@Overridepublic void run(){try{String destIP=client.getInetAddress().toString()
;int destport =client.getPort()
;PrintStream outstream=new PrintStream(client.getOutputStream())
;DataInputStream instream=new DataInputStream(client.getInputStream())
; String inline=instream.readLine();}//trycatch(IOException e){System.out.println(e);}}//run
socket超时什么意思?
你好,这分为两种情况。Socket.connect连接超时有二种情况:
1.由于网络的问题,TCP/IP三次握手时间>timeout的设置时间。
这在国外访问weibo时,并且网络环境极差的情况下有可能发生。解决的办法:调大socket.connect方法中的timeout参数值,比如50s,linux默认最高是70s,如果超过70s没有意义,linux会***用70s.但是当调大之后,发现不到10s就报timeout exception。
通过国外的机器ping api.weibo.com发现unreachable。说明客户端在传输层之下的网络层就发现连个Syn的报文都发不出去,更不用说三次握手了,客户端直接失败并抛timeout exception。经验:在connection timeout诊断的第一步应该是ping一下确认网络层没有问题。注:客户端设置了timeout,但并不会等到超时才返回异常。客户端只要第一时间发现连接失败,就会抛timeout exception。
2.如果timeout设置的时间足够,但是由于服务器端的处理能力较差,比如缓冲连接队列较小,而应用层的处理能力没有连接缓冲快,导致缓冲连接占满,而拒绝新的连接。
在服务端因为连接队列占满而拒绝服务的期间,客户端的通过TCP协议重试三次。每次的时间翻倍。
如果三次时间的累加
socket.setSoTimeout(inttimeout);恩。应该能实现你的要求首先socket不是一个阻塞方法,它不会自动去连serverSocket,而是你connect一次它就去连一次,socket本身不存在什么连接server端超时,所以客户端的连接超时是由你的程序去控制的,比如用线程。其次,恶意连接这个问题,其实我已经给你解决了,在server端拿到socket后,不就能用socket.setSoTimeout()来设置连接时间了么?
到此,以上就是小编对于socket 连接后多久会自动断开的问题就介绍到这了,希望介绍的3点解答对大家有用。