簡體   English   中英

C# 通過Socket同時發送字符串和視頻 stream

[英]C# Send string and video stream at the same time over Socket

我在 C# 中使用 Sockets 通過網絡發送字符串。 我正在發送沒有任何問題的字符串,但我正在嘗試同時將字節數組中的 stream 視頻與字符串一起發送。 換句話說,我想將兩個字節 Arrays 作為一條消息發送。

為什么我需要它? 我需要它到 stream 給特定用戶,我這樣做的方式是在字符串中指定應該接收視頻的用戶名,第二個字節數組將被該用戶接受,其他任何人都不會接受。

我使用以下代碼發送字符串:

public static void Send(string text) //Send String to the Server
    {
        try
        {
            byte[] buffer = Encoding.UTF32.GetBytes(text);
            Main.AppControls.ClientSocket.Send(buffer, 0, buffer.Length, SocketFlags.None);
        }
        catch (Exception ex)
        {
            MessageBox.Show("Error: " + ex);
        }
    }

我想知道是否有可能做這樣的事情來使一個發送 function 的人不是分開而是作為一個發送。

public static void Send(string text) //Send String to the Server
    {
        try
        {
            byte[] buffer = Encoding.UTF32.GetBytes(text, byteVideoStream); <---- THIS IS WHAT I NEED
            Main.AppControls.ClientSocket.Send(buffer, 0, buffer.Length, SocketFlags.None);
        }
        catch (Exception ex)
        {
            MessageBox.Show("Error: " + ex);
        }
    }

顯然,如果我 stream 只有一個字節數組,視頻 stream 並在服務器端接收它,我將無法指定接收它的人。 但是,如果使用字符串它有第二個字節數組,我可以導航到將接收它的用戶。

更新我已經在發送者和接收者之間建立了協議當服務器接收到一個字符串字節數組時,它將讀取第一個單詞,如果它包含例如“連接”,那么服務器將其傳遞給所有客戶端:

if (_function== "Connect") // Client Sending Connection
   {
   foreach (Socket _connectedUsers in Server.clientSockets) //Send message back to everyone but accepts only this user.
           {
             byte[] data = Encoding.UTF32.GetBytes("Connected" + "-" + "UserName"); //Passing Message to Other Clients from where specific client will pick it up
             Socket socket = (Socket)_connectedUsers;
             socket.Send(data);
           }

    }

您可以通過套接字發送任何您想要的原始字節。

由接收端了解您發送的數據並適當地解釋它。

您需要解決的問題是在發送方和接收方之間建立協議,以了解字符串的結束位置以及視頻 stream 的開始位置。 例如,您可以通過使用不屬於普通消息的一部分的 UTF32 字符終止每個字符串或發送固定長度的字符串來執行此操作。

如果我 stream 只有一個字節數組,視頻 stream 並在服務器端接收它,我將無法指定接收它的人

我不確定你的意思。 打開的套接字已經連接到另一端的特定設備。 如果您的接收代碼以某種方式將視頻 stream 路由/代理到另一台設備,例如,您可以使用字符串部分指定視頻 stream 的最終接收者,並讓您的接收器打開一個新套接字到最終接收者並復制你的 stream 到那個新的插座。

暫無
暫無

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

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