初用SOCKET做聊天室程式後所想到的…… (轉)

worldblog發表於2007-12-05
初用SOCKET做聊天室程式後所想到的…… (轉)[@more@]  很早的文章了,是我初學WINSOCKET時寫的。裡面對WINSOCKET是如何使用並沒講到什麼,只是一個很簡單的。適合我們菜鳥們看看;)    初學WinSocket,看了原來從網上一直沒時間看的幾篇文章。受益菲淺,一時興起,就邊學邊寫了這個小型的。因為是用的CSocket類做的,用的是的,所以可以在裝了TCP/IP服務協議並聯通了的機器之間使用(如、Inte網 - 沒試過,應該可以的)。
  程式其實不難,可是引起了我的一些想法,拿出來與大家共享!既然兩個機器之間可以相互傳送資訊,這樣的話,如果在 Client 的程式裡實現開關機、螢幕抓圖等功能的話。然後隨時判斷 Server方的資訊,並在接收了指定的的資訊後相應的動作。如: Sever對Client說:“親愛的關機吧” 然後Client方收到訊息,判斷!如果
Server說的是 “親愛的關機吧”,那麼就 -> 關機。諸如此類,則可如 BO 或 NEYSPY 一樣,只是要Client程式做得隱蔽一點。
  大家都在用OICQ或ICQ在網上聊天吧!米2 :)忽然想到其實我也可以做到哦。如果花時間再改進一下,則 Client 要做一些修改。如加上一個 TreeCtrl 用來顯示上線的好友名單。然後像 Server 那樣判斷是在向誰傳送資訊,然後在傳送的資訊里加上一特徵說明是發給誰的,還是發給 Server ,Server一看,哦!給某某啊,好的。再將此資訊發給某某。 而 Server 這邊要加入對的操作,首先記錄所有的,隨時記錄線上的使用者,根據剛上線的使用者的 ID 來列出此 ID 的好友名單,將其中線上的過濾出來轉發給此使用者以告知線上好友名單。
  呼呼~~~一口氣說這麼多可把我累壞了。如果你仔細看,再加上你對Winsock有一定的理解的話。會覺得做一個OICQ也不難嗎!哈,其實要做一個完美的 OICQ like 的東東是不容易的,要考慮到很多,如堵塞等情況的處理。不過基本道理了解以後,加上CSocket又是如此地方便,我們也可以做出我們自己的聊天室!!!
 其實我想做一個 OICQ like 的真正能用的東東,可俺自知能力有限,學 Winsock 時間也不長。所以能夠找到志同道和的哥們一起做是最好不過的了,如果你看到這兒並且也有興趣的話就to:tlovexyj@yeah.net">俺吧!我的想法是隻收錄程式設計師,所有使用者分類別, 分、VC、VB等幾個。然後可檢視所有註冊了的程式設計師名單,這樣可以讓programmer們更方便地交流,不是嗎。還有一些新功能的加入,一定讓我們的這個本世紀最具創意的 OICQ like 像 Half of life 一樣比 Quake 更出色。

給出下載: /Server.zip">Server 44K

次日...
無意中在BBS上看到一篇介紹怎麼做聊天室的文章。仔細看了一下,發現我的想法和他基本一致,當然他描述得的比較詳細。
不敢獨享,特粘過來與大家同享:

程式中端所起的作用。
  從圖示中可以看到伺服器端的兩個winsock之間並不存在直接的通訊,同時sckServer1和sckClient2及sckServer2和sckClient1
之間是不能直接通訊的。這也即是說若 sckClient1向sckClient2發出資訊,資訊首先被sckServer1接受,sckServer1再將資訊 傳給程式
的資訊處理部分,資訊處理部分再將處理好的資訊傳給sckServer2,再由sckS erver2傳給sckClient2。反之亦然。那麼伺服器端的資訊
處理部分又進行什麼工作呢?
  1. 對通訊的通道數作一些限制。
  2. 對使用後已關閉的通道,必須能夠重新使用以節省資源。
  3. 必須對所傳遞的資料包資訊作甑別,從而作出不同的處理。 透過解開資料的包頭就可區分不同的資訊。

  網上聊天有兩種方式:第一種,以廣播方式;第二種,以點對點的方式。廣播方式 即所有客戶都能收到某一客戶發出的資訊。點對點的方式即想說“悄悄話”的一對客戶專門開闢了一間談話的“小屋”,別的客戶不能“聽”到他們的談話。點對點方式資料的包頭為“PT”,廣播方式則無包頭。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-988573/,如需轉載,請註明出處,否則將追究法律責任。

相關文章