SignalR java无法连接到服务器

时间:2015-05-15 15:56:21

标签: java signalr signalr.client

我无法将我的java应用程序连接到SignalR服务器 服务器很简单,可以在这里找到:
https://code.msdn.microsoft.com/windowsdesktop/Using-SignalR-in-WinForms-f1ec847b

我可以连接网络客户端(javascript) Windows客户端(C#),但我的java客户端出现问题。(https://github.com/SignalR/java-client

到目前为止,这是我的代码:

Thread.getAllStackTraces()

更新

当我运行它时,我得到一个" ExecutionException:java.net.SocketException:Connection reset"

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

- 如果我改变&#34; localhost&#34;到不存在的东西(例如locahostX)我得到一个java.net.UnknownHostException

- 如果更改&#34; localhost&#34;对我的知识产权我没有异常......

- 所有其他应用程序都可以使用(localhost或IP)

起初我认为这是防火墙问题但不是......

显然我错过了一些东西...... 有什么想法吗?

由于

2 个答案:

答案 0 :(得分:3)

事实证明我必须使用start的重载,一个将ClientTransport对象作为参数的重载

public SignalRFuture<Void> start(ClientTransport transport)

如果有人解释为什么无参数启动方法失败,请将其作为答案发布,我会将其标记为解决方案。

这是一个有效的完整示例:

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

答案 1 :(得分:0)

  

如果我改变了#34; localhost&#34;对于不存在的东西(例如   locahostX)我得到一个java.net.UnknownHostException

你确定吗?

  1. 在服务器命令提示符下运行&#34; ipconfig&#34;获取服务器的IP地址。
  2. 从客户端命令提示符键入&#34; ping&#34; +服务器的IP地址。
  3. 如果ping发送包,则尝试将IP放入字符串&#34; ServerURI&#34;是&#34; http://&#34; + ServerIP +&#34;:8080 / signalr&#34;。