2011-10-31 95 views
8

我目前是C#的新手,我需要理解簡單的服務器 - 客戶端體系結構!C#初學者的簡單網絡編程?

我目前正在嘗試編寫一個簡單的服務器/客戶端程序,其中基本上客戶端可以將變量發送到服務器,並且服務器可以將其發送給另一個客戶端。問題在於我對此非常盲目,因爲我對C#仍然很陌生,儘管我對Java有一些經驗(但還沒有與網絡聯繫)。

我的問題是:

  1. 我多少個文件將不得不寫?
  2. 任何人都可以很好地爲我提供這樣的程序框架或例子嗎?
  3. 什麼是TCP服務器?

這是爲了一個在線遊戲。一個客戶端將擲骰子,服務器必須向所有其他客戶端顯示這是第一個客戶端滾動的值。

任何幫助將不勝感激!

+4

提示:不要相信客戶端。通常,客戶端應該要求服務器擲骰子,服務器會將滾動值發送給所有客戶端。 –

+1

我建議你看看WCF。 WCF初學者的好書是[WCF Step By Step](http://shop.oreilly.com/product/0790145302403.do)。如果您想要詳細瞭解您正在嘗試執行的操作,可以閱讀聊天客戶端示例。 Wcf還將簡化認證授權流程。 – Garvin

回答

3

1)文件的數量將取決於特定的實現。您可以創建此架構,只需要1個服務器類和1個客戶端類(您可以在一個文件中有多個類)。根據您在設計過程中所做的複雜性和選擇,您可以包含多個文件或僅包含幾個文件。

2)良好的教程一個簡單的TCP客戶端/服務器可以發現here

3)TCP服務器是等待來自TCP客戶端的連接的處理。 TCP代表傳輸控制協議。從Wikipedia:TCP提供從一臺計算機上的程序到另一臺計算機上的另一程序的可靠的有序字節流傳送。

4

由於您正在規劃TCP(因爲您想要州),您需要制定一項戰略。您將獲得大量關於建立連接和來回移動某些數據的信息。谷歌會給你比你能處理的更多。如果沒有做所有的工作,這裏有幾個步驟來讓你面向你。

1)連接註冊 - 當客戶端上網並想與服務器通信時,首先需要說的是「嘿,我在這裏,想要扮演一些骰子。」這個初始握手可以是用於心跳和/或交易的連接ID。如果服務器打開,服務器將使用它來標識數據和相應的線程。

2)心跳 - 現在客戶已經註冊了服務器,客戶負責提供心跳,說它仍然存在,並且仍然計劃繼續工作。通常每3到10秒就好。

3)開發請求/響應協議 - 對於「每個命令」,將會有一個正式的過程。這個正式的過程將包括連接標識,但也包括一個請求標識。客戶端將不會接受響應,除非它收到相應的請求ID。此外,每個請求都需要成功或失敗響應來確定它是否符合API或不符合要求。在請求內將執行命令或操作。有些人使用int來分派命令id,然後在id上使用開關來調用入口點方法(cmd id = 1是connect(),cmd id = 2是rolldice()等)。您可能包含額外的有效負載,用於識別命令的結果。

總之,1是握手,2是保持活動,3是來回傳遞數據。

現在無論使用套接字還是WCF,我都建議對TcpClient編程有一個基本的瞭解,然後使用WCF運行。你會驚訝於簡單的套接字編程是如何的,但開銷是一個殺手。沒有什麼可以被嚇倒的。協調調用,線程以及更不用說安全性是很多工作。另一方面,WCF確實減少了一些開銷。

我想看看這個問題...

How to use socket based client with WCF (net.tcp) service?