2015-05-15 16 views
9

Ho problemi a collegare la mia applicazione java al mio server SignalR.
Il server è molto semplice e può essere trovato qui:.
https://code.msdn.microsoft.com/windowsdesktop/Using-SignalR-in-WinForms-f1ec847bSignalR java non può connettersi al server

posso collegare client web (JavaScript) e client Windows (C#) ma sto avendo problemi con il mio client java (https://github.com/SignalR/java-client)

Ecco il mio codice finora:

package javaapplication2; 

import java.io.IOException; 
import java.util.concurrent.ExecutionException; 
import java.util.concurrent.TimeoutException; 
import microsoft.aspnet.signalr.client.SignalRFuture; 
import microsoft.aspnet.signalr.client.hubs.HubConnection; 
import microsoft.aspnet.signalr.client.hubs.HubProxy; 

public class JavaApplication2 { 
     public static void main(String[] args) throws IOException, InterruptedException, ExecutionException, TimeoutException 
     { 
      String ServerURI = "http://localhost:8080/signalr"; 
      HubConnection Connection = new HubConnection(ServerURI); 
      HubProxy HubProxy = Connection.createHubProxy("MyHub"); 
      HubProxy.on("AddMessage",() -> { System.out.println("Some message");  }); 

      Connection.error(new ErrorCallback() { 
       @Override 
       public void onError(Throwable error) { 
        error.printStackTrace(); //<==SocketException 
       } 
      }); 

      SignalRFuture<Void> con =Connection.start(); 
      con.get(); 
     } 
} 

Aggiornamento

quando l'eseguo ottengo un "ExecutionException: java.net.SocketException: Connection reset"

Exception in thread "main" java.util.concurrent.ExecutionException: java.net.SocketException: Connection reset 
at microsoft.aspnet.signalr.client.SignalRFuture.get(SignalRFuture.java:112) 
at microsoft.aspnet.signalr.client.SignalRFuture.get(SignalRFuture.java:102) 
at javaapplication2.JavaApplication2.main(JavaApplication2.java:27) 
Caused by: java.net.SocketException: Connection reset 
at java.net.SocketInputStream.read(SocketInputStream.java:209) 
at java.net.SocketInputStream.read(SocketInputStream.java:141) 
at java.io.BufferedInputStream.fill(BufferedInputStream.java:246) 
at java.io.BufferedInputStream.read1(BufferedInputStream.java:286) 
at java.io.BufferedInputStream.read(BufferedInputStream.java:345) 
at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:704) 
at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:647) 
at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:675) 
at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1535) 
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1440) 
at java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:480) 
at microsoft.aspnet.signalr.client.http.java.NetworkRunnable.run(NetworkRunnable.java:72) 
at java.lang.Thread.run(Thread.java:745) 

-Se cambio "localhost" a qualcosa che non esiste (ad esempio locahostX) ottengo un java .net.UnknownHostException

-Se Se il cambiamento "localhost" per il mio IP non evento ottengo un'eccezione ...

-Tutte le altre applicazioni funzionano con entrambi (localhost o IP)

All'inizio pensavo fosse a problema del firewall ma non era quello ...

Ovviamente mi manca qualcosa ... Qualche idea?

Grazie

risposta

3

Si scopre che ho dovuto usare un sovraccarico di partenza, quello che prende come parametro un oggetto ClientTransport

public SignalRFuture<Void> start(ClientTransport transport) 

Se qualcuno ha una spiegazione perché il metodo di avvio senza parametri non riesce, si prega di inviare è una risposta e la contrassegnerò come la soluzione.

Ecco un esempio completo che funziona:

package javaapplication2; 

import java.io.IOException; 
import java.util.Scanner; 
import java.util.concurrent.ExecutionException; 
import java.util.concurrent.TimeoutException; 
import microsoft.aspnet.signalr.client.SignalRFuture; 
import microsoft.aspnet.signalr.client.hubs.HubConnection; 
import microsoft.aspnet.signalr.client.hubs.HubProxy; 
import microsoft.aspnet.signalr.client.transport.ServerSentEventsTransport; 
import microsoft.aspnet.signalr.client.hubs.SubscriptionHandler2; 

public class JavaApplication2 { 
    public static void main(String[] args) throws IOException, InterruptedException, ExecutionException, TimeoutException 
    { 
     String ServerURI = "http://localhost:8080/signalr"; 
     HubConnection Connection = new HubConnection(ServerURI); 
     HubProxy HubProxy = Connection.createHubProxy("MyHub"); 

     HubProxy.on("AddMessage", new SubscriptionHandler2<String, String>() { 
      @Override 
      public void run(String e1, String e2) { 
      System.out.println(e1.toString()+ " -> " +e2.toString()); 
      } 
     }, String.class, String.class); 

     SignalRFuture<Void> con =Connection.start(new ServerSentEventsTransport(Connection.getLogger())); //Or LongPollingTransport 

     con.get(); 

     Scanner inputReader = new Scanner(System.in); 
     String line = inputReader.nextLine(); 
     while (!"exit".equals(line)) { 
       HubProxy.invoke("send", "Console", line); 
       line = inputReader.next(); 
     } 

     inputReader.close(); 

     Connection.stop(); 
    } 
} 
+0

Non è sicuro sul problema ma hai provato a utilizzare il sovraccarico del costruttore HubConnection che prende l'istanza di ILogger?Sembra che la selezione automatica dei trasporti (negoziazione) non funzioni e che il registro dei segnali interni possa essere utile qui. Provalo e pubblica il log ... –

0

se cambio "localhost" a qualcosa che non esiste (per esempio locahostX) ho un java.net.UnknownHostException

Sei sicuro di questo?

  1. Al prompt dei comandi del server eseguire "ipconfig" per ottenere l'indirizzo IP del server.
  2. Dal prompt dei comandi del client digitare "ping" + indirizzo IP del server.
  3. Se il ping invia i pacchetti, provare a inserire l'IP nella stringa "ServerURI" in modo che corrisponda a "http: //" + ServerIP + ": 8080/signalr".
+0

Grazie Hristo ma io avevo già provato l'IP.At un primo momento ho pensato che fosse un problema di firewall ma non era che o ... –

Problemi correlati