어떻게 작은 부분으로 패킷을 분할 한 다음 보낼 수 있습니까? 현재 저는 이미지 (예 : 이미지)를 매우 수동으로 시도했습니다.패킷에 맞게 분할 C# UDP
나는 2 개의 udp 클라이언트가 있고, 800x600이라고하는 이미지가있다. 800x300의 udp 클라이언트와 800x300의 udp 클라이언트를 보냅니다.
그런 다음 병합하십시오.
하지만 더 좋은 방법이 있어야한다고 생각합니다. 어떤 종류의 기능입니까? 큰 패키지에서는 매우 어려워지기 때문에 10 개 이상의 udpclients를 만들어야합니다.
private void Initialize()
{
Bitmap holder = new Bitmap(640, 480);
pictureBox1.Size = new System.Drawing.Size(1920, 1200);
EndPoint ourEP = new IPEndPoint(IPAddress.Any, 0);
EndPoint remoteEP = (EndPoint)(new IPEndPoint(IPAddress.Any, 1700));
EndPoint remoteEP2 = (EndPoint)(new IPEndPoint(IPAddress.Any, 1701));
udpcap = new UdpClient();
udpcap1 = new UdpClient();
udpcap.Client.Bind(remoteEP);
udpcap1.Client.Bind(remoteEP2);
}
private void Listen()
{
while (checkBox1.Checked)
{
byte[] data = udpcap.Receive(ref adress);
byte[] data2 = udpcap1.Receive(ref adress);
Bitmap bitmap = new Bitmap(byteArrayToImage(data).Width + byteArrayToImage(data2).Width, Math.Max(byteArrayToImage(data).Height, byteArrayToImage(data2).Height));
using (Graphics g = Graphics.FromImage(bitmap))
{
g.DrawImage(byteArrayToImage(data), 0, 0);
g.DrawImage(byteArrayToImage(data2), byteArrayToImage(data).Width, 0);
}
pictureBox1.BackgroundImage = bitmap;
}
}
private static Image cropImage(Image img, Rectangle cropArea)
{
Bitmap bmpImage = new Bitmap(img);
Bitmap bmpCrop = bmpImage.Clone(cropArea, bmpImage.PixelFormat);
return (Image)(bmpCrop);
}
private void Send()
{
bool p = true;
while (capcon == true)
{
Rectangle h = new Rectangle(0, 0, 320, 480);
Bitmap holder = new Bitmap(640, 480);
Graphics graphics = Graphics.FromImage(holder);
graphics.CopyFromScreen(0, 0, 0, 0, new Size(1920, 1200), CopyPixelOperation.SourceCopy);
byte[] u = imageToByteArray(cropImage(holder, h));
udpcap.Send(u, u.Length, adress.Address.ToString(), 1700);
h = new Rectangle(320, 0, 320, 480);
byte[] u1 = imageToByteArray(cropImage(holder, h));
udpcap1.Send(u1, u1.Length, adress.Address.ToString(), 1701);
}
}
여기 코드는 간단합니다. 바탕 화면의 스크린 샷을 만듭니다. 640x480 비트 맵으로 배치하십시오 (데스크톱 크기보다 훨씬 작음).
사진 2 개로 패키지 2 개를 보냅니다.
데이터를 수신하여 결합하고 배경으로 배치하십시오.
이제는 640x480에서 매우 작습니다.
이제 내가 더 높은 무언가로하고 싶다면 극히 많은 패키지를 만들어야합니다. 그래서 좀 더 자동적으로 가질 수 있는지 궁금합니다.
왜 나는 패키지를 분할하고 많은 클라이언트를 사용하는 이유는 버퍼 (65kb)보다 큰 것을 보내는 방법을 모르는 것이기 때문에 검색을 시도했지만 이해가 안됩니다.
동시에 여러 클라이언트를 지원해야하는 경우, 이것 좀보세요 : http://social.msdn.microsoft.com/Forums/en-US/d9e4bcbc-3149- 4817-8d7c-37cdb29f8be0/tcp-server-with-multiple-clients – maxim1500
TCP를 테스트하고 싶지만 어떻게 작동하는지 이해할 수 없으며 UDP가 훨씬 쉽습니다 (여기서는 프로그래밍으로 noob). 여기서 대기 시간은 매우 중요합니다. Andi가 알고 싶습니다. 언제 UDP 패킷이 도착하지 않을까요? 은 글로벌 인터넷에서만 가능합니다 (라우터 등에서 뛰어 다니는 동안 사라질 수 있음을 의미)? 만약 그렇다면, 그것은 나에게 중요하지 않다. 나는 그것을 독특한 상황에 사용하고 있기 때문에 LAN과 비교할 수있다. 많은 클라이언트를 사용하는 이유는 허용 된 버퍼 (65kb)보다 더 큰 내용을 보내는 방법을 알지 못하기 때문입니다. – Zerowalker
글쎄, 어떻게 작동하는지 이해하는 데 도움이되는 흥미로운 예제에 몇 개의 URL을 넣었다.잃어버린 패킷에 대해서도 특정 순간에 처리 할 패킷이 너무 많거나 네트워크에 결함이있는 경우 LAN에서 발생할 수 있습니다. – maxim1500