2016-10-14 3 views
1

Ich muss Text, primitive Datentypen und Objekt zwischen einem UWP-Client und JAVA-Server mit WebSocket senden, aber ich weiß nicht, wie zu programmieren.Wie kann die Kommunikation zwischen UWP-Client und Java Server über WebSocket hergestellt werden?

Ich verstehe nicht, wenn es einen Unterschied zwischen diesen beiden Sprachen gibt, die Coding-Sache wirklich hart machen? (Ich habe nach Online-Tutorials gesucht, konnte aber meinen Code nicht funktionieren lassen).

Provider.java:

public class Provider{ 
    ServerSocket providerSocket; 
    Socket connection = null; 
    OutputStream out; 
    InputStream in; 
    String message; 
    MesageModel model; 
    Provider(){} 
    void run() 
    { 
     try{ 
      providerSocket = new ServerSocket(9999, 10); 
      //2. Wait for connection 
      System.out.println("Waiting for connection"); 
      connection = providerSocket.accept(); 
      System.out.println("New connection accepted "+":" + connection.getPort()); 
      in = connection.getInputStream(); 
      out = connection.getOutputStream(); 
      if(out == null) 
      { 
       System.out.println("Out Status : Null"); 
      }else 
      { 
       System.out.println("Out Status : Not Null"); 
       sendMessage("Hello Client"); 
      } 
      if(in == null) 
      { 
       System.out.println("In Status : Null"); 
      }else 
      { 
       receiveConnection(); 
      } 
     } 
     catch(IOException ioException){ 
      ioException.printStackTrace(); 
     } 
     finally{ 
      //4: Closing connection 
      try{ 
       if(in != null){ 
        System.out.println("Close In"); 
       in.close(); 
       } 
       if(out != null){ 
        System.out.println("Close Out"); 
        out.close(); 
       } 
       System.out.println("Close Socket"); 
       providerSocket.close(); 
      } 
      catch(IOException ioException){ 
       ioException.printStackTrace(); 
      } 
     } 
    } 
    void receiveConnection() throws IOException{ 
     BufferedReader reader = new BufferedReader(new InputStreamReader(in)); 
     StringBuilder outsb = new StringBuilder(); 
     String line = ""; 
     System.out.println("In Status : Not Null"); 
     System.out.println("In Status : Go To While to Read Line"); 
     while ((line = reader.readLine()) != null) { 
      outsb.append(line); 
      System.out.println(outsb.toString()); 
     } 
     System.out.println(outsb.toString()); 
     reader.close(); 
     System.out.println("Closed Reader"); 
    } 
    void sendMessage(String msg) 
    { 
     byte[] byteS = msg.getBytes(); 
     try{ 
      out.write(byteS); 
      out.flush(); 
      System.out.println("To Server >" + msg); 
     } 
     catch(IOException ioException){ 
      ioException.printStackTrace(); 
     } 
    } 
    public static void main(String args[]) 
    { 
     Provider server = new Provider(); 
     while(true){ 
      server.run(); 
     } 
    } 
} 

MainPage.xaml.cs

namespace WebsocketTest 
{ 
    public sealed partial class MainPage : Page 
    { 
     public MainPage() 
     { 
      this.InitializeComponent(); 
      createSocket(); 
     } 
     public async void createSocket() 
     { 
      MessageWebSocket webSock = new MessageWebSocket(); 
      webSock.Control.MessageType = SocketMessageType.Binary; 
      webSock.MessageReceived += webSock_MsgReceived; 
      webSock.Closed += webSock_Closed; 
      Uri serverUri = new Uri("ws://localhost:9999"); 
      try 
      { 
       await webSock.ConnectAsync(serverUri); 
       tbConnect.Text = "Connected"; 
       webSock_SendMessage(webSock, "Hello"); 
       tbError.Text = "Sent Greeting"; 
      } 
      catch (Exception ex) 
      { 
       tbError.Text = ex.Message + "/" + ex.HResult + "/" + ex.Data; 
      } 
     } 

     private async Task webSock_SendMessage(MessageWebSocket webSock, string m) 
     { 
      BinaryWriter messageWriter = new BinaryWriter((Stream)webSock.OutputStream); 
      messageWriter.Write(m); 
     } 

     private void webSock_Closed(IWebSocket sender, WebSocketClosedEventArgs args) 
     { 

     } 

     private void webSock_MsgReceived(MessageWebSocket sender, MessageWebSocketMessageReceivedEventArgs args) 
     { 
      DataReader messageReader = args.GetDataReader(); 
      messageReader.UnicodeEncoding = Windows.Storage.Streams.UnicodeEncoding.Utf8; 
      string messageString = messageReader.ReadString(messageReader.UnconsumedBufferLength); 
      tbReceived.Text = messageString; 
     } 
    } 
} 

Derzeit dieser Code überhaupt nicht arbeiten, ... Ich kann nicht senden, kann nicht lesen ... auf beiden Seiten.

Meine Fragen:

Wie Nachrichten von meinem UWP-Client senden und lesen?

Wie kann ich Nachrichten von meinem JAVA-Server senden und lesen?

Bitte ich brauche etwas hilfreiches ... ein Codebeispiel.

+0

Tutorial- und Ressourcenempfehlungen entfernt –

+0

Dieses Dokument: [WebSockets] (https://msdn.microsoft.com/en-us/windows/uwp/networking/websockets) und das [WebSocket-Beispiel] (https: // github .com/Microsoft/Windows-Universal-Beispiele/Baum/Master/Samples/WebSocket) kann hilfreich sein. –

Antwort

0

Ihr Java-Code erstellt einen einfachen TCP/IP-Socket, keinen [Websocket] [1], der ein höheres Protokoll über TCP/IP ist.

Wenn Sie websockets wollen, müssen Sie entweder websockets für sich selbst implementieren (tun Sie das nicht, wenn Sie nicht sehr erfahren in der Netzwerkprogrammierung sind) oder eine Java-Bibliothek verwenden, die Websocketserver-Funktionalität bietet. Jetty, Netty oder J2EE Server könnten dafür geeignet sein.

Verwandte Themen