2014-06-27 11 views
5

Gniazdo sieciowe jest napisane w javascript przez mojego kolegę. Udało mi się połączyć. Przede wszystkim muszę zalogować się do aplikacji za pomocą konta testowego. Muszę wysłać e-mail i hasło przez json. Zainstalowałem pakiet Json.Net za pomocą NuGet.Jak wysyłać/odbierać wiadomości za pośrednictwem gniazda internetowego w Windows Phone 8 przy użyciu klasy ClientWebSocket?

Niektóre kod, który znalazłem w mojej reaserch jest to, ale nie rozumiem, jak wysłać moje dane za pomocą tego segmentu.

var buffer = new byte[1024]; 
var segment = new ArraySegment<byte>(buffer); 
webSocket.SendAsync(segment, WebSocketMessageType.Text, true, CancellationToken.None); 

Oczywiście, mogę użyć obiektu

User user=new User(); 
user.Email="[email protected]"; 
user.Password="pass"; 
string json = JsonConvert.SerializeObject(user); 

Ale to nie będzie żadnego pożytku, ponieważ metoda SendAsync akceptuje tylko typ bajtowy na segmencie.

Wszystko czego chcę, to wysłać te dane, a jeśli logowanie się powiedzie, powinienem otrzymać inne dane (w formacie JSON) o użytkowniku.

Na marginesie, jestem całkiem nowy do gniazdek sieciowych, użyłem protokołów HTTP z ASP.NET Web API 2.

Odpowiedz

11

nie mam pojęcia o Windows Phone 8, ale kod, który wydaje się wklejony podobny do zwykłego .NET ClientWebSocket, więc tu masz kilka przykładów:

public static Task SendString(ClientWebSocket ws, String data, CancellationToken cancellation) 
{ 
    var encoded = Encoding.UTF8.GetBytes(data); 
    var buffer = new ArraySegment<Byte>(encoded, 0, encoded.Length); 
    return ws.SendAsync(buffer, WebSocketMessageType.Text, true, cancellation); 
} 

public static async Task<String> ReadString(ClientWebSocket ws) 
{ 
    ArraySegment<Byte> buffer = new ArraySegment<byte>(new Byte[8192]); 

    WebSocketReceiveResult result = null; 

    using (var ms = new MemoryStream()) 
    { 
     do 
     { 
      result = await ws.ReceiveAsync(buffer, CancellationToken.None); 
      ms.Write(buffer.Array, buffer.Offset, result.Count); 
     } 
     while (!result.EndOfMessage); 

     ms.Seek(0, SeekOrigin.Begin); 

     using (var reader = new StreamReader(ms, Encoding.UTF8)) 
      return reader.ReadToEnd(); 
    } 
} 

Jeśli coś nie kompiluje lub istnieje w WP8, wystarczy znaleźć odpowiednik.

+1

Dziękuję za odpowiedź! Tymczasem zorientowałem się (napisałem webSockcetObject.Send (jsonObject) i to wszystko). Próbowałem usunąć pytanie ... ale pojawia się na stronie, prawdopodobnie stackoverflow webapplication używa miękkiego usunięcia. W każdym razie twoje rozwiązanie jest poprawne, a ja głosowałbym na twoją odpowiedź, ale nie mam wystarczającej reputacji. Najlepsze, co mogę zrobić, to zatwierdzić i podziękować! :) –

Powiązane problemy