聊天室(Socket)嘗試中所遇到的問題

2021-06-16 11:41:56 字數 702 閱讀 4891

首先,由於由於socket的輸入流以及輸出流一旦關閉,socket也會隨之關閉,起先沒注意到這一點,所以就各種報錯。

後來又發覺在聊天室傳送的資料在服務端根本收不到,輸入到了控制台也看不到資訊,後來才發覺socket的輸入和輸出流是有帶緩衝區的,把緩衝區的大小列印出來了,才發覺有9000多,而我在測試的時候可能只傳送了一條資訊,導致了誤以為資訊傳送失敗了。解決的辦法也很簡單,socket有帶設定緩衝區大小的方法,呼叫此方法進行合理設定就行。

再者,解決完上面的問題後,又發現讀取還是有問題,資訊還是照樣讀不出來,檢查了一下讀取的**,發覺讀取的時候用的是bufferedread的readline()方法,而我設計的聊天室暫時只監聽了傳送按鈕,這樣子就導致了乙個問題,readline()讀取資料的時候是以結束標記或者換行符為準的,所以資訊就一直堵在那裡讀不出來。

最後,上面的問題都解決後,程式也能正常執行了,不過看了下cpu的利用率發覺飈得老高了,重新看了一下**,發覺在伺服器端由於要一直檢查有沒有資訊,所以放接受資訊的**放在乙個while(true)的死迴圈內了,這樣子即使是沒有資訊,也要一直跑while迴圈,cpu就大部分時間被占用了。解決辦法就是每跑一次迴圈體就讓處理資訊的執行緒睡眠一下,睡眠時間最好是在500-1000,因為如果有資訊的話,睡眠時間太久了的話,會導致資訊的延遲。

總結了一下,發覺其實還有很多更好的方法去代替上面那一堆挫挫的東西,自己還是很爛啊,這樣子的**都不敢見人了。重新優化調整後再貼**。

Socket程式設計之聊天室

1.單執行緒模式 建立服務端 第一步,準備位址和埠 第二步,建立乙個serversocket物件 第三步,等待客戶端連線 最後一步,資料接收和傳送。public class singlethreadserver catch ioexception e public class singlethrea...

炫麗的Socket聊天室

今天我編寫了乙個聊天室,主要強調了介面上的渲染,實現了 的切換。下面我介紹下聊天室開發的注意事項 服務端 對於服務端而言,乙個執行良好的服務端對於網路程式設計來講至關重要,為了使我們的服務端不產生堵塞,我們採用常規的多執行緒程式設計,為每乙個客戶端開乙個執行緒,用乙個socket連線客戶端,並獲取資...

Linux下socket多人聊天室

四 功能模組流程圖 五 實驗截圖 六 問題及解決 七 參考文獻 附錄由於疫情原因,在家上了一學期的課,本次作業是作為 linux程式設計 的期末考核而布置的,代替了原本的線上答題考試,對於我這種比較喜歡動手的菜雞來說,還是很舒服的。1.服務端功能模組圖 圖3.1 服務端功能模組圖 服務端主要完成的工...