簡體   English   中英

套接字編程設計問題

[英]Socket Programming design questions

我正在(第一次)在 C# 中使用 Socket 編程,我正在制作一個類似 Skype 的應用程序(視頻通話、IM、文件共享、屏幕共享),我有幾個問題......

1) 套接字應該如何真正工作? 在客戶端,我有一個有效地保持套接字打開的 while 循環,這是正確的嗎? 或者我應該在每次發送/接收后關閉套接字(我使用 BeginSend() 和 BeginRecieve())並創建一個新套接字? 建立連接后調用interact()。 我的代碼:

private static void interact()
    {
        try
        {
            while (true)
            {
                receive(client);
                send(client);
            }
        }
        catch (Exception e)
        {
            Logging.errorDisconnect(client, e);
        }
    }

2) 您將如何通過使用 System.Net.Sockets 中的 BeginSend/BegingRecieve 或創建您自己的 Task 實現來設計健壯的客戶端/服務器應用程序?

3) 是否有關於健壯/可擴展應用程序的客戶端/服務器架構的好教程? 我看過 P2P,但我不完全確定它是我需要的。

另外,我試圖避免使用 3rd 方實現,這樣我就可以了解它是如何自己完成的。

提前致謝..

我假設您想要運行持久連接並偶爾向遠程端發送命令。 這通常意味着雙方必須始終運行讀取循環以接收命令。 讀取和寫入之間的交替對於您在此處沒有的請求/回復模型是有意義的(因為雙方都可以發送請求,您可能會將傳入的請求誤認為是預期的回復)。

循環不會使套接字保持活動狀態。 如果你告訴我你為什么認為我可以澄清。 您可以獨立於任何類型的“循環”來決定連接的生命周期。

您想使用哪種調用方式(同步、APM、TAP)不會影響套接字的行為方式或通過線路傳輸的內容。 您可以自由選擇。 套接字超級難搞定,從同步 IO 開始。 異步 IO 相當困難,在這里可能沒有必要。

通常,您應該盡量避免使用套接字,因為它們很難且級別較低。 嘗試使用一些更高級別的 RPC 機制,例如 WCF 或 HTTP。 如果你堅持自定義線格式protobuf 是一個不錯的選擇。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM