簡易聊天程式教程(四)客戶端基本功能

2021-07-11 16:57:21 字數 1643 閱讀 4953

客戶端的基本功能是根據伺服器給出的介面逐步來實現的。客戶端的設計流程是清晰的。簡化的思考流程如下圖所示:

當然,實現的時候就要考慮比較多的細節,比如在註冊的時候,註冊失敗怎麼辦,登陸的時候,賬號密碼不匹配怎麼辦。但總的流程就是這樣子的。

從上面的流程可以看出了,客戶端的視窗模組分下面幾個(附上動作的解析):

登陸視窗需要提供兩個輸入框,輸入使用者名稱和密碼。在這個模組中需要執行一部分的輸入檢測,比如使用者名稱不能為空,密碼不能為空等。登陸視窗中,還必須要有乙個註冊按鈕,在使用者沒有賬號的時候,。提供註冊的功能,新增使用者。註冊視窗跟登陸視窗之間可以相互切換,方便使用者操作。

登陸視窗的關閉操作比較麻煩。首先,需要判斷,使用者時候登陸成功,登陸成功就只是釋放登陸視窗的資源。如果同時開啟了註冊視窗,這個註冊視窗也必須被關閉。在登陸成功的之後,設定主視窗的使用者名稱,以標誌成功。如果沒有註冊成功,登陸視窗的關閉將會關閉整個程式。

登陸視窗在主視窗執行之前執行,在登陸成功之前,主視窗不能被顯示出來。登陸視窗在獲取了使用者的登陸資訊之後,會將資訊填入請求資訊類中,然後傳送給伺服器處理。成功就開啟主視窗,出錯就彈出資訊框。

登陸視窗應該顯示在螢幕的中間。

註冊視窗中必須要讓使用者填寫所需的所有的必要資訊。目前,只有使用者名稱,密碼,性別這三個必要的資訊。目前這個模組並沒有檢查輸入的功能,在後續有待加入。註冊視窗中必要有乙個取消的按鈕,提供給使用者取消註冊這個動作,改善使用者體驗,同時,關閉註冊視窗也能取消這個動作。

執行完註冊這個動作之後只會在伺服器的資料庫中執行這個動作,並不會執行登陸。因此還需要再次執行登陸操作。

註冊視窗和登陸視窗之間是模態關係,也就說,不關閉註冊視窗,是不能選擇登陸視窗的。

註冊視窗應該顯示在螢幕的中間。

聊天視窗中要有乙個輸入框,和乙個顯示訊息的文字框,和乙個傳送資訊的按鈕。輸入框會自動換行,執行自動換行時,會以乙個單詞為單位來執行換行。顯示訊息的文字框,需要有傳送資訊的傳送者,時間,以新的一行為開始顯示訊息文字。

在按下傳送資訊的按鈕的時候,訊息文字不管有沒傳送成功,都會在傳送方的視窗顯示出來,但不一定會在接收方顯示,因為接收方有可能已經下線了。

當訊息文字或者輸入框超出了文字框的顯示範圍,需要使用滾動條來滾動顯示內容。因為會自動換行,因此只需要垂直滾動條,而不需要水平滾動條。訊息文字框中的訊息應該是不能被使用者修改的。但是可以被使用者複製。輸入文字框中,也有響應的複製,剪下和貼上功能。

主視窗中,第一行顯示自己的狀態資訊,接下來是還有列表,新增好友的按鈕。列表中好友的資訊包括,好友的名字和好友的狀態。每個好友的資訊為一行。雙擊還有的名字就可以開啟對應的聊天視窗。如果一方先傳送資訊過來,主視窗要負責訊息的監聽,在監聽到這類資訊的時候先判斷與這個還有的聊天視窗是否存在,如果存在就將這個視窗顯示在最前,如果不存在就詢問是否要和對方進行聊天,否則進行忽略,確認就新建乙個新的聊天視窗。

對於新增好友的功能,在使用者按下了新增按鈕之後需要彈出乙個對話方塊,使使用者可以輸入想要新增的好友的名字,然後獲取這個好友名字並傳送給伺服器。伺服器在處理這個使用者名稱的時候,如果存在這個使用者,則為他們新增好友關係,如果不存在則返回出錯資訊。

刪除好友功能,應該以右鍵選單的形式出現,當客戶單擊右鍵的時候,被單擊的行要被選中,並且在選擇了刪除之後,好友列表中要刪除這個好友,伺服器端也要刪除這兩個人之間的關係。

ElasticSearch專題 四 客戶端操作

實際開發中,主要有三種方式可以作為elasticsearch服務的客戶端 第一種,elasticsearch head外掛程式 第二種,使用elasticsearch提供的restful介面直接訪問第三種,使用elasticsearch提供的api進行訪問 postman中文版是postman這款強...

簡單的Socket聊天程式(客戶端)

using system using system.windows.forms using system.net using system.net.sockets namespace socketclient stathread public static void main string args...

聊天小程式(五)客戶端退出

需求 客戶端斷開連線後,能保證下次連線正常。解決方法 當客戶端斷開後,服務端從鍊錶中刪除該節點。當客戶端重新連線時,則重新插入到鍊錶中。server.c include include include include include include include include include i...