2017-10-10 4 views
0

Ich habe einen Java-Server-Setup für eine App, die ich mache. Der Java-Server nimmt neue Kunden, wie sie versuchen, eine Verbindung:Ich kann Starscream WebSocket nicht mit Java ServerSocket verbinden

//Continuously accept new user clients 
    try(ServerSocket serverSocket = new ServerSocket(portNumber)){ 

     while(!Thread.currentThread().isInterrupted()){ 

      //I do some stuff here 
      ... 
      //Then accept the socket 
      Socket s = serverSocket.accept(); 

      //Then I do stuff with s; the user is connected 
      ... 

     } 

    } catch (IOException e) { 
     System.err.println("Could not listen on port "+portNumber); 
    } catch (InterruptedException e) { 
     e.printStackTrace(); 
    } catch (ExecutionException e) { 
     e.printStackTrace(); 
    } 

Auf Android, ich habe gerade die Socket-Klasse verwenden und ich habe keine Probleme. Es verbindet sich mit dem Endpunkt meines Java-Servers, der auf EC2 auf AWS läuft, und ich habe keine Probleme. Allerdings, mit iOS, von dem, was ich gefunden habe, sind 3rd-Party-Bibliotheken sehr zu empfehlen und ich habe beschlossen, Starscream (für den Moment) zu verwenden.

Ich kann das einfache Verbindung Beispiel nicht funktionieren (das auf der Starscream github Seite). Es gibt Tutorials wie this, die einen lokalen Server mit Node.js einrichten, aber ich möchte lieber nicht darauf eingehen, da ich sowieso schon einen Server habe, der "ziemlich einfach ist".

Hier ist mein SWIFT-Code:

class ViewVontroller: UIViewController, WebSocketDelegate{ 
    var socket = WebSocket(url: URL(string: "ec2-12-345-678-910.compute-1.amazonaws.com/:4922/")!) 

    override func viewDidLoad(){ 
     super.viewDidLoad() 
     socket.delegate = self 

     print("connecting") 
     socket.connect() 
     print("should've connected") 
    } 
    ... //The rest of the protocol is implemented below with simple print statements as the body 

und es gibt:

connecting 
should've connected 
[timestamp/project name...] [] nw_connection_get_connected_socket_block_invoke 1 Connection has no connected handler 
Websocket disconnected: The operation couldn't be completed. Operation timed out 

Gibt es irgendeine Art von Problem mit von Starscream WebSockets zu einem Java-Serversocket verbinden? Ich habe Teile von Dingen gelesen, die solche Probleme in anderen Fällen vorschlagen, aber ich weiß kaum etwas über die zugrunde liegende Implementierung von Sockets.

Antwort

1

Ihr Server scheint the WebSockets protocol nicht implementiert zu haben. Eine WebSocket ist nicht einfach eine TCP-Verbindung; Es verwendet einen bestimmten HTTP-basierten Handshake und fügt dem Stream Framing hinzu. Es ist möglich, implement this yourself, aber ich würde Ihnen empfehlen, stattdessen eine Bibliothek zu verwenden - es gibt a number of perfectly good implementations available.

+0

Ich habe gerade erst angefangen, Ihre Links durchzusehen, aber das ist der Pfad, nach dem ich gesucht habe. Vielen Dank! – Xenalin

Verwandte Themen