2017-01-03 10 views
1

私は問題を抱えています。私は、.NETプログラムからWindows 10 UWP(.NETCore)プログラムへの私のデスクトップコンテンツのストリームを提供するアプリケーションを開発したいと考えています。Bitmap Stream TCPClientからStreamSocketListenerへ

私はこのロジックに従うことによって、通常のWindowsフォームとして、このアプリケーションを作成しました:

クライアント:デスクトップをつかむために使用

  • Bitmapオブジェクト。
  • ビットマップをシリアル化するBinaryFormatter。
  • TCPClientはTCP経由でデータを送信します。

サーバー:

  • TCPListenerがデータを受信します。
  • ストリームはBinaryFormatterを使用して逆シリアル化されます。
  • ビットマップはイメージボックスに表示されます。

私はUWPとしてサーバー側を再作成したいと考えています。私は問題なくStreamSocketListenerを使用してTCP接続を成功させることができましたが、UWPのBinaryFormatterの置き換え方法はわかりません。私の現在のアプローチは、DataReaderを使用してバイトストリームを読み込むことですが、ビットマップイメージ全体を受信するというコンセプトを把握できないため、再度組み立てることはできません。これについてのヒントをいただければ幸いです。私は、クライアント/サーバースニペットを含めました以下:

クライアント:

private void SendDeskTopImageOverTCP() 
{ 
    BinaryFormatter binFormatter = new BinaryFormatter(); 
    mainStream = client.GetStream(); 

    // Get Desktop bitmap and send over TCP Stream. 
    binFormatter.Serialize(mainStream, GetDesktopBitmap()); 
} 

サーバー:

// What do we do when a connection is made? 
private async void OnConnection(StreamSocketListener sender, StreamSocketListenerConnectionReceivedEventArgs args) 
{ 
    // Indicate Connection Received! 
    Debug.WriteLine("Connection Received!"); 

    // Data Stream Reader 
    DataReader reader = new DataReader(args.Socket.InputStream); 

    // Wait until one or more bytes available 
    reader.InputStreamOptions = InputStreamOptions.Partial; 

    // Load data from the input stream 
    await reader.LoadAsync(200); 

    while (reader.UnconsumedBufferLength > 0) 
    { 
     await reader.LoadAsync(200); 

     //View byte stream?? 
     Debug.WriteLine(reader.ReadByte()); 

    } 

私の謝罪これは単純な問題であれば、私はに私の最善を試してみましたドキュメントに従って、私はこれを遭遇していない似たような問題について遠くて広い検索した。だから、どんな助けもありがとう。

+0

これはまだ問題ですか? – czifro

答えて

1

プロトコルの設計をお勧めします。プロトコルはAPIのように動作します。たとえば、ビットマップを送信する前に、ビットマップのサイズを送信します。同様に、

この基本的なプロトコルでは、両端でさまざまなサイズのものを送信でき、常にその全体を送受信できます。ネットワーキングでは、送受信しているデータと、そのデータがAからBに完全に伝達されるようにする方法について考える必要があります。私がAPIに類似したプロトコルを作ったのは、それが契約のように動作するからです。 「私がこのデータを送るなら、私はこれを応答として得なければならない」次に何かがプロトコルを破ると、接続を維持して、次にプロトコルに従うことを望むことができます。または、接続を終了できます。

私がお勧めする別のものは、専用のsendreceiveメソッドを持つことです。場合は、ビットマップ以外のものを送信するためにソケットを使用する必要があります。

希望すると便利です。

関連する問題