問題描述其實問題來源是我在進行搭建簡易服務器的時候出現的,在調試過程中我發現每一次訪問url,通過client = server.accept();都會接收到除了正常連接進來的外,一個沒有數據傳輸的客戶端socket,對上面接收到的socket,進行下面操作為結果為空。client.getInputStream()這里請求url的方式用的是postman,不是用的瀏覽器,所有可以排除掉瀏覽器對各種css,js,favicon.ico的請求,如下圖,是我發起的一個/login請求:這里訪問的是我上面提到的簡易服務器,服務器采用的是BIO模式實現的短連接,并且在檢查到client.getInputStream()==null后關閉了客戶機的socket。如上圖中,深色區域內客戶機端口號為32623的報文段,就是我指的未知的TCP連接,未標深色的端口號為:32624就是正常的訪問/login的TCP請求。可以看到這個特殊的socket,沒有傳輸任何數據,而且連接后立即關閉了(這里我在服務端確實在判斷了其輸入流為空后對其socket進行了close操作,但是報文端顯示它卻是從客戶端先發起的,所以現在也不確定它是我在服務端造成立即關閉,還是客戶端造成的)然后我考慮到是否是由于我服務器代碼的某個bug造成的,然后我測試了本機的一個JavaWeb項目,以Tomcat作為服務器,我再次進行抓包,得到如下結果:上圖發現,還是有這么一個特殊的TCP連接,這似乎存在著共性,并且特殊請求的端口和正常請求的端口號是相連的。所有我考慮這難道是什么來自協議或者什么的約束? 哎,學淺!查了一些資料,未果。于是尋求各路大俠幫助!答疑解惑,感謝!
- 2 回答
- 0 關注
- 1284 瀏覽
添加回答
舉報
0/150
提交
取消