2009-12-28 203 views
0

我想創建一個簡單的客戶端/服務器聊天應用程序。在C#中創建客戶端/服務器聊天客戶端

這個想法是,當一個客戶端向服務器發送消息時,服務器通知其他客戶端進行更改。

沒有處理防火牆問題,最好的方法是什麼?

可以使用網絡服務完成http嗎?

回答

1

WCF服務與wsHttpBindingbasicHttpBinding與防火牆很好玩。您將面臨的主要問題是服務器通知客戶端,可能需要修改某些防火牆設置。

0

您可以在服務器上運行HTTP服務器,並在每個客戶端上保留一個連接。

0

你可以做到這一點使用COMET風格的Web服務:

COMET (programming)

如果您使用WCF建立你的服務,你會實現一個具有雙面打印裝訂在80端口上運行的服務。

Duplex Services (MSDN)

1

的服務器需要一個端口上偵聽。該端口需要通過防火牆進行訪問。這兩件事情是不可避免的。通常你會讓你的服務器監聽你組成的端口號(大於1024以避免衝突)。然後,您將讓防火牆將該端口傳遞給您的服務器。

如果你期望普通人能夠託管一臺服務器,那麼事情就會有點棘手。無論您是需要它們在其家庭路由器上啓用端口轉發,還是需要有一箇中央服務器來進行配對。

這就是Skype或Halo的工作原理(Skype將中央服務器稱爲超級節點)。這是一個例子。

C是Skype的中央服務器。 A是Alice和B是bob。愛麗絲想打電話給鮑勃。

Ç監聽某個端口上和C的防火牆允許通過
A登錄到Skype的連接到C
B登錄到Skype的,connecticg到C
A發送消息到C說,他們希望B鍵
C發送一條消息給B(因爲B已經連接好了)這樣說。

呼叫連接後,A和B將所有消息發送給C,C將它們轉發到目的地。