關(guān)于socket長連接 新手向 財(cái)富值16?
TCP是一種面向連接的、可靠的、基于字節(jié)流的傳輸層通信協(xié)議,基于TCP的socket應(yīng)該也是長連接;
public static<愛尬聊_頭條百科> void main(String[] args) throws IOException {Socket s = new Socket("127.0.0.1", 8081);}
我不明白一點(diǎn),就是運(yùn)行如上代碼,會得到一個socket(假設(shè)服務(wù)器已開啟),可是為什么我運(yùn)行后程序會自動結(jié)束并關(guān)閉socket呢?我明明沒有調(diào)用s.close(),
請問如何使程序保持長連接,只能用while(true)形式的心跳包嗎?如果是,那在心跳期間我怎么能發(fā)送有效的數(shù)據(jù)(假設(shè)心跳數(shù)據(jù)為無效的)呢?
feng君藍(lán) 2022-09-04 15:54
這個應(yīng)該是main線程退出了,你在后面加一個Thread.sleep(1000000)試一下。
190****950 2022-09-04 16:11
你的代碼可以說明線程結(jié)束回收了socket連接。不知道你說的server是用什么開發(fā)的,如果是原生的socket,好像默認(rèn)情況下并沒有需要心跳包才可以維持連接,如果使用了其他框架并且設(shè)置了idle time,才需要心跳包來維持這個連接,服務(wù)器認(rèn)為你空閑了一段時候后可能就不會再連接了,為了避免浪費(fèi)資源就把你的連接關(guān)閉了。(個人理解)
