Socket 編程(二)

來源:互聯網
上載者:User

以一個簡單聊天室的例子來說明一二。

socket在某種程度猶如C#中的介面,只要實現了介面即可,無需瞭解裡面複雜的TCP/IP包。舉個例子:硬碟壞了,重新買一個得時候,只要買了滿足插線的即可,而不需要知道硬碟的內部構造。

在通訊的過程中,則需要一個伺服器端,來接受用戶端發來的訊息,然後經過處理返回給需要的用戶端。例如:聊天室中,我登入之後,會發送一個訊息告訴伺服器我登入了(如果格式為Join|使用者名稱),然後伺服器會將我的訊息進行處理,System.Text.Encoding.Default.GetString(buffer).Split('|'),其中buffer為byte[]類型,訊息以流的形式發送。 用一個字串數組接受處理之後的資訊acceptMsg[0]=”Join”,acceptMsg[1]=使用者名稱,通過判斷acceptMsg[0]的指令為Join,則會告訴所有使用者,該使用者加入了聊天室。在QQ中,就是告訴他的所有好友,會有提示。

作為一個簡單的聊天室,用戶端會有幾個事件會觸發,也就是發送資訊給伺服器端。

為用戶端介面,會發送訊息的幾個事件分別為:登入,登出,發送(群聊),私聊發送。所以對以上四種訊息分別標記為:

登入:Join|使用者名稱   用join區別開來,目的是讓伺服器好區分開來資訊的類型,從而判斷用戶端的事件類型。

登出:Exit|使用者名稱 

發送:Chat|使用者名稱|聊天內容

私聊:Priv|使用者名稱|私聊接受者|聊天內容

。

當然這些資訊都得需要一個伺服器來監聽。

         

為伺服器介面。

開啟服務之後,伺服器則會一直處於監聽狀態,

當客戶一旦發送訊息,伺服器就會接受到資訊並對其處理。它基本處理這樣的:

主要是利用System.Text.Encoding.Default.GetString(buffer).Split('|')方法來處理接受到得資訊。

acceptMsg[0]==”Join”,則會給所有使用者發送訊息,會有兩種訊息,第一是告訴所有使用者acceptMsg[1]加入了聊天室,第二是給所有使用者發送一個以“List|訊息內容”格式的訊息,來重新重新整理使用者線上列表。同理,用戶端接收到訊息亦要經過處理的。

acceptMsg[0]==”Exit”,伺服器接受到此訊息則會告訴所有使用者acceptMsg[1]離開了聊天室,並結束對該使用者的監聽線程。

acceptMsg[0]==”Chat”,伺服器則會在RichTextBox中顯示資訊accpetMsg[1];

accpetMsg[0]==”Priv”,伺服器則會只把訊息給使用者acceptMsg[2],訊息內容則為:acceptMsg[3];

基本流程圖如下

左為伺服器端,右為用戶端.

作者:餘意
出處:http://cnblogs.com/zabery
本文著作權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文串連,否則保留追究法律責任的權利。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.