簡體   English   中英

反序列化僅在我關閉客戶端時完成

[英]Deserialization is done only when I shut down client side

我正在嘗試通過 tcp stream 從客戶端向服務器發送數據包。客戶端連接到服務器並嘗試發送圖像。 但是,只有當我關閉客戶端時,服務器才會獲取圖像。 (服務器在我關閉客戶端的同一時刻獲取圖像)

我使用 ProtoBuf-Net 進行序列化和反序列化。 這是我的相關代碼:

這是我的客戶端代碼:

// Connect to the client
client.Connect(Client.SERVER_IP, 1729);

// Capture screenshot
Bitmap captureBitmap = new Bitmap(Screen.PrimaryScreen.Bounds.Width, 
Screen.PrimaryScreen.Bounds.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
System.Drawing.Rectangle captureRectangle = Screen.PrimaryScreen.Bounds;
Graphics captureGraphics = Graphics.FromImage(captureBitmap);
captureGraphics.CopyFromScreen(captureRectangle.Left, captureRectangle.Top, 0, 0, 
captureRectangle.Size);

// Serialize the screenshot to the socket's stream
ImageConverter img = new ImageConverter();
Packet<byte[]> packet = new Packet<byte[]> { value = (byte[])img.ConvertTo(captureBitmap, typeof(byte[])), type = PacketType.IMAGE });
Serializer.SerializeWithLengthPrefix(stream, packet.GetType().AssemblyQualifiedName, PrefixStyle.Base128);
Serializer.Serialize(stream, packet);

stream.Flush();

這是我的服務器代碼:

ImageConverter imageConverter = new ImageConverter();
// Wait for client to conncet
var client = new ExtendedTcpClient(listener.AcceptTcpClient());
currentClientControlling = client;

// Deserialize type
var typeName = Serializer.DeserializeWithLengthPrefix<string>(stream, PrefixStyle.Base128);
var type = Type.GetType(typeName);

// Register the type
var model = RuntimeTypeModel.Default;
model.Add(type, true);

// Deserialize the data
var bytes = model.Deserialize(stream, null, type);

var image = (Bitmap)imageConverter.ConvertFrom(bytes);

這是我的數據包 model:

public enum PacketType
{
    IMAGE
}

[ProtoContract]
public class Packet<T>
{
    [ProtoMember(1)]
    public PacketType type { get; set; }

    [ProtoMember(2)]
    public T value { get; set; }
}

我沒有弄清楚問題是什么。 但是,我通過替換Serializer.Serialize(stream, packet);解決了這個問題使用Serializer.SerializeWithLengthPrefix(stream, packet, PrefixStyle.Base128);

暫無
暫無

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

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