TCP처럼 NetworkStream을 가질 수 있습니까?UDP는 TCP와 유사합니까?
나는 UDP가 검사를 허용하지 않는다는 것을 알고 있습니다.
하지만 가능하면 바이트 배열을 수동으로 패키지에 맞는 크기로 나누는 대신 스트림에 쓸 수 있습니다.
나는 이것을 테스트하고 실험 해 보는 것이 좋을 것이라고 생각하고있다.
TCP처럼 NetworkStream을 가질 수 있습니까?UDP는 TCP와 유사합니까?
나는 UDP가 검사를 허용하지 않는다는 것을 알고 있습니다.
하지만 가능하면 바이트 배열을 수동으로 패키지에 맞는 크기로 나누는 대신 스트림에 쓸 수 있습니다.
나는 이것을 테스트하고 실험 해 보는 것이 좋을 것이라고 생각하고있다.
문제는 UPD가 안정적이지 않으므로 일부 데이터가 누락 될 수 있다는 것입니다. UDP는 스트림으로 처리 할 수 있으며 청크에서만 전송됩니다. 당신이 할 수있는 읽기 측면에서
var writer = new StringWriter();
writer.WriteLine("Stuff!");
writer.WriteLine("Things!");
...
var bytes = new ASCIIEncoding().GetBytes(writer.GetStringBuilder().ToString());
_udpClient.Send(bytes, bytes.Length, _host, _port);
:
믿을 수는 없지만 어떻게 스트림으로 처리 할 수 있습니까? – Zerowalker
나는 보통이 작업을 수행
var bytes = _udpClient.Receive(ref remoteEP);
var packetString = new ASCIIEncoding().GetString(bytes);
var reader = new StringReader(packetString);
reader.ReadLine(); // Stuff!
reader.ReadLine(); // Things!
정확히 스트리밍되지 않음 (콘텐츠 많은 경우에 메모리 바이트 배열 빨아 수 있습니다) 그러나 이것은 작은 패킷으로 나를 위해 일했습니다.
패킷이 손실되거나 잘못된 순서로 도착하면 내 응용 프로그램에서 완벽하게 정상적으로 작동합니다. 이것은 응용 프로그램을 위해서도 그러해야합니다. 그렇지 않으면 UDP가 당신을위한 것이 아닙니다. 콘텐츠를 '스트리밍'으로 생각한다는 사실은 보내는 모든 콘텐츠를 동일한 순서로 받아야 함을 의미합니다.
경계가 어디에 있는지 알지 못하는 경우 패킷이 잘못 도착할 수 있다는 사실을 실감 할 수 있습니까? –
시험용입니다. 그렇습니다. – Zerowalker