2017-10-10 5 views
0

J'ai configuré un serveur Java pour une application que je suis en train de créer. Le serveur Java prend de nouveaux clients tentent de se connecter:Impossible de connecter Starscream WebSocket à Java ServerSocket

//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(); 
    } 

Sur Android, je viens d'utiliser la classe Socket et je n'ai pas de problème. Il se connecte à l'extrémité de mon serveur Java fonctionnant sur EC2 sur AWS et je n'ai aucun problème. Cependant, avec iOS, d'après ce que j'ai trouvé, les bibliothèques tierces sont très recommandées et j'ai décidé d'utiliser Starscream (pour le moment).

Je n'arrive pas à faire fonctionner l'exemple de connexion simple (celui de la page github de Starscream). Il existe des tutoriels tels que this qui configurent un serveur local avec Node.js mais je préfère ne pas en parler parce que j'ai déjà un serveur assez simple de toute façon.

Voici mon code swift:

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 

et sorties:

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 

Y at-il une sorte de problème avec la connexion de Starscream WebSockets à Java ServerSocket? J'ai lu des bribes de choses qui suggèrent de tels problèmes dans d'autres cas, mais je connais à peine l'implémentation sous-jacente des sockets.

Répondre

1

Votre serveur ne semble pas avoir implémenté the WebSockets protocol. Un WebSocket est et non simplement une connexion TCP;il utilise une négociation HTTP spécifique et ajoute un cadre au flux. Il est possible de implement this yourself, mais je vous conseille d'utiliser une bibliothèque si possible - il y a a number of perfectly good implementations available.

+0

Je viens juste de commencer à regarder à travers vos liens, mais c'est le chemin que je cherchais. Merci! – Xenalin