Делаю программу для трансляции экрана, но столкнулся с проблемой, что фото или размер фото не получаються корректно. Если это рассинхрон, тогда как его убрать?
Код сервера:
private void StreamScreen()
{
Socket listener = new(IpAddress.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
listener.Bind(streamScreenEndPoint);
listener.Listen(10);
while (true)
{
Socket handler = listener.Accept();
Console.WriteLine("Connected");
while (handler.Connected)
{
try
{
byte[] buffer = Screenshot.MakeScreenshot();
handler.Send(Encoding.ASCII.GetBytes(buffer.Length.ToString()));
handler.Send(buffer, buffer.Length, SocketFlags.None);
}
catch (SocketException)
{
handler.Shutdown(SocketShutdown.Both);
Console.WriteLine("Connection aborted");
}
catch (Exception e)
{
Console.WriteLine($"ERROR: {e}");
byte[] msg = Encoding.UTF8.GetBytes("ERROR");
handler.Send(msg);
}
}
handler.Close();
}
}
Код клиента:
static void Main()
{
IPAddress ipAddress = Dns.GetHostEntry("localhost").AddressList[1];
IPEndPoint endpoint = new IPEndPoint(ipAddress, 50006);
Socket socketSender = new Socket(ipAddress.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
socketSender.Connect(endpoint);
for (int i = 0; i <= 500; i++)
{
byte[] size = new byte[1024];
int received = socketSender.Receive(size);
ulong screenshotSize = ulong.Parse(Encoding.UTF8.GetString(size));
byte[] screenshot = new byte[screenshotSize];
received = socketSender.Receive(screenshot);
File.WriteAllBytes($"D:\\file.jpeg", screenshot);
}
}
Для теста просто записывает в файл, в приложении на WPF эта проблема тоже появляеться.