2013-08-28 2 views
0

TCP처럼 NetworkStream을 가질 수 있습니까?UDP는 TCP와 유사합니까?

나는 UDP가 검사를 허용하지 않는다는 것을 알고 있습니다.

하지만 가능하면 바이트 배열을 수동으로 패키지에 맞는 크기로 나누는 대신 스트림에 쓸 수 있습니다.

나는 이것을 테스트하고 실험 해 보는 것이 좋을 것이라고 생각하고있다.

+0

경계가 어디에 있는지 알지 못하는 경우 패킷이 잘못 도착할 수 있다는 사실을 실감 할 수 있습니까? –

+0

시험용입니다. 그렇습니다. – Zerowalker

답변

0

문제는 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); 

:

+0

믿을 수는 없지만 어떻게 스트림으로 처리 할 수 ​​있습니까? – Zerowalker

1

나는 보통이 작업을 수행

var bytes = _udpClient.Receive(ref remoteEP); 
var packetString = new ASCIIEncoding().GetString(bytes); 
var reader = new StringReader(packetString); 
reader.ReadLine(); // Stuff! 
reader.ReadLine(); // Things! 

정확히 스트리밍되지 않음 (콘텐츠 많은 경우에 메모리 바이트 배열 빨아 수 있습니다) 그러나 이것은 작은 패킷으로 나를 위해 일했습니다.

패킷이 손실되거나 잘못된 순서로 도착하면 내 응용 프로그램에서 완벽하게 정상적으로 작동합니다. 이것은 응용 프로그램을 위해서도 그러해야합니다. 그렇지 않으면 UDP가 당신을위한 것이 아닙니다. 콘텐츠를 '스트리밍'으로 생각한다는 사실은 보내는 모든 콘텐츠를 동일한 순서로 받아야 함을 의미합니다.

관련 문제