2012-10-12 4 views
2

"WinRT"앱 (Windows 8 용 "Metro"스타일 앱) 개발을 시작했습니다. 앱은 TCP 스트림을 통해 일부 데이터를 읽고 씁니다. 독서는 잘되지만 작문은 효과가 없습니다. 당신이 (작동) 전체 .NET Framework를 사용하는 코드를 찾을 수 아래 : 비교TCP 스트림에 WinRT 쓰기가 작동하지 않습니다.

var client = new TcpClient(); 
client.Connect(IPAddress.Parse("192.168.178.51"), 60128); 
var stream = client.GetStream(); 
var writer = new StreamWriter(stream); 
writer.WriteLine("ISCP\0\0\0\x10\0\0\0....."); 
writer.Flush(); 

다음 코드는 작동하지 않습니다

var tcpClient = new StreamSocket(); 
await tcpClient.ConnectAsync(new HostName("192.168.178.51"), "60128"); 
var writer = new DataWriter(_tcpClient.OutputStream); 
writer.WriteString("ISCP\0\0\0\x10\0\0\0...."); 
writer.FlushAsync(); 

WriteString 문자열의 정확한 길이를 반환합니다 (25), 다른 쪽 끝은 올바른 명령을받지 못합니다. Via Wireshark 또한 전체 .NET 버전에 대한 올바른 패키지를 볼 수 있지만 WinRT 버전에는 맞지 않습니다.

해결 방법?

.NET 버전 :

.NET network traffic

WinRT 버전 : writer.WriteString() 실제로에 지금 날짜를 저지 할 필요에 전화 후

WinRT network traffic

+0

동일한 작업을 동 기적으로 수행하면 어떻게됩니까? –

+0

WinRT가 동기 인터페이스를 제공하지 않습니다 - async가 유일한 방법입니다;) – ollifant

+0

StreamSocket 샘플을 보았습니까? –

답변

5

buffer를 호출하여 버퍼링합니다 .StoreAsync()

wrtier.WriteXX를 호출하면 데이터가 저장됩니다. 기억. writer.StoreAsync()를 호출하면 메모리의 데이터가 전송됩니다.

내 생각에 StreamWrtiers.WriteLine은 단일 호출에서이 작업을 수행합니다.

+0

고마워, 그게 다야! 샘플의 의견을 통해 "작성자에게 데이터를 쓰는 것은 데이터를 메모리에 저장합니다." – ollifant

관련 문제