[英]Why does SignalR client ConnectionState not change when I shut down the site and then restart?
[英]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.