2013-03-27 2 views
2

Windows.Networking.Sockets API를 사용하여 Windows Store에서 작동하는 기본 인터페이스를 얻으려고합니다. 지금까지 나는 이것을 가지고있다 :Windows Store 소켓을 사용하여 Netcat과 채팅 하시겠습니까?

public async void Test() 
    { 
     using (var socket = new StreamSocket()) 
     { 
      socket.Control.KeepAlive = false; 
      socket.Control.NoDelay = false; 
      await socket.ConnectAsync(new HostName("192.168.1.1"), "5555", SocketProtectionLevel.PlainSocket); 
      using (var writer = new DataWriter(socket.OutputStream)) 
      { 
       writer.UnicodeEncoding = UnicodeEncoding.Utf8; 
       writer.WriteString("yea!"); 
       //writer.WriteByte(0x50); //this doesn't work either to send raw ASCII 
       var t = writer.FlushAsync(); 
       while (t.Status != AsyncStatus.Completed) ; //just in case? 
      } 
     } 
    } 

지금까지 성공적인 연결 및 연결 해제가 발생했다. 그러나 나는 어떤 텍스트도받지 못했다. (OpenBSD를 라우터에서 실행)

내 netcat을 명령

$ nc -lv 5555 

내가 테스트 기능을 실행할 때 내가 netcat을 실행이없는 경우, 그것뿐만 아니라 예상대로 예외 모든 것을 던질 것이다. 여기서 내가 뭘 잘못하고 있니?

답변

1

이것은 나에게 전혀 이해가되지 않지만, 분명히 StoreAsyncDataWriter에 필요합니다. 나는 플러쉬가 그렇게 부름을해야한다고 생각 했겠지만 분명히는 아니었다. WinRT API에 대한 또 다른 재미있는 부분. 고정 코드 :

 using (var socket = new StreamSocket()) 
     { 
      socket.Control.KeepAlive = false; 
      socket.Control.NoDelay = false; 
      await socket.ConnectAsync(new HostName("192.168.1.1"), "5555", SocketProtectionLevel.PlainSocket); 
      using (var writer = new DataWriter(socket.OutputStream)) 
      { 
       writer.UnicodeEncoding = UnicodeEncoding.Utf8; 
       writer.WriteString("yea!"); 
       await writer.StoreAsync(); 
      } 
     }