我很欣赏一些帮助/方向,我遇到了一个问题。我希望开发一个应用程序,它可以提供从.NET程序到Windows 10 UWP(.NETCore)程序的桌面内容流。
我已按照以下逻辑将此应用程序创建为普通的Windows窗体:
客户端:
服务器:
我想将服务器端重新创建为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 :(得分:1)
我建议设计协议。该协议将像API一样运行。例如,在发送位图之前,您将发送位图的大小。像这样:
private byte[] GetDesktopAsBytes()
{
return serialize(GetDesktopAsBitmap()); // choose some way of getting bytes
}
private void send(byte[] data)
{
// this should be a byte array length = sizeof(int)
var dataSize = System.BitConverter.GetBytes(data.Length)
// send dataSize first
// then send data
}
private byte[] receive()
{
var dataSizeRaw = /* receive 4 bytes from tcp conn */ ;
var dataSize = System.BitConverter.ToInt32(dataSizeRaw,0);
var data = new byte[dataSize];
// use tcp conn to fill data.
return data;
}
// send(GetDesktopAsBytes());
这个基本协议允许两端发送不同大小的内容,并始终发送/接收任何内容。通过网络,您确实需要考虑要发送和接收的数据以及如何确保它从A到B完整地进行。我使协议类似于API的原因是因为它就像合同一样。 “如果我发送这些数据,我应该将其作为回应”。然后当某些东西破坏协议时,您可以允许连接持续存在,并希望下次它会遵循协议。或者,您可以终止连接。
我建议的另一件事是使用专用的send
和receive
方法。如果您需要使用套接字发送除位图之外的其他内容。
希望这有帮助!