今天下午學習了群聊伺服器的程式設計,因為群聊伺服器需要同步執行,所以理所當然的運用到了多執行緒。
把接受服務的客戶端封裝到乙個客戶端類裡面去,就可以實現群聊了。
然後就是登陸操作-------> 客戶端---伺服器 互動
就是伺服器的輸出send()和接收get()。
這裡再一次體現了類的封裝性,可以把send()、get()方法封裝到乙個工具類裡面去。
廢話少說,上**:
serversocket ss;
try
這是重新編寫伺服器類的**
public void run()
str = str.trim();//去掉字串前後的空格和回車符
system.out.println(username+":"+str);
}}catch(exception e)
};}.start();
//接收訊息
scanner scanner = new scanner(system.in);
while(true)
}else
}catch(exception e)
}
這是客戶端接收伺服器服務後的登陸**(run方法進行包裝),其中send()、get()方法在工具類裡面。
public class tool catch (ioexception e)
} /**
* 伺服器獲取客戶端輸入的資料
* @param ins
* @return
*/public static string get(inputstream ins)
msg = msg.trim();
}catch(exception e)
return msg;
} //檢測使用者名稱和密碼
/*** 檢測使用者名稱和密碼是否正確
* @param username
* @param password
* @return
*/public static boolean check(string username,string password)
} return false;
}}
工具類,用於封裝工具方法。包括了伺服器的接收傳送還有檢測使用者名稱方法。
至於使用者名稱密碼的檢測,則是用hashmap鍵值對容器來充當資料庫的角色存放使用者名稱密碼,用static靜態變數定義,像工具類的工具方法一樣,這樣就可以直接用類名來引用了。
為了方便檢測,我先不編寫註冊的**,而是用static{}**塊來初始化使用者名稱和密碼。
static{}**塊是在載入類的時候執行的,而**塊{}則是在建立物件的時候執行的。(如果我沒記錯)
**如下:
public static hashmapdata = new hashmap();
static
}
好了,這就是今天學到的伺服器群聊。
上圖:
洗洗睡,明天早上得去上課。
手寫微信群聊伺服器
1.能夠連線多個客戶端 2.客戶端長時間未響應能夠斷開節省資源 3.能夠 乙個使用者發來一條訊息,所有客戶端都可以接收 直接使用socket.socket類就可以實現,但是這樣的話我們需要自己手動寫監聽,寫accept,把accept單獨放入乙個執行緒,每連入乙個執行緒就新開闢乙個執行緒。這裡我們選...
集群聊天伺服器整體梳理 登入業務
驗證登入資訊 int id js id get int string pwd js password user user usermodel.query id if user.getid id user.getpwd pwd 裡面的相關方法如下 根據使用者號碼查詢使用者資訊 user usermod...
伺服器程式設計 伺服器程式設計實現邏輯和超級服務
前言 前面介紹邏輯和服務,原始碼在後面github給出。上回戰況 上回,主要確定了伺服器的控制邏輯 乙個總程序 執行緒關係圖 最新戰況 下面,從一些主要邏輯 講解。在程序池中的子程序中,我使用了epoll wait在等待請求的到來,如果是外界訊號 來自父程序的資訊 新的連線請求 那就處理 accep...