Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Jeromq/ZeroMQ服务器(windows)-客户端(android)测试_Java_Android_Sockets_Zeromq_Jeromq - Fatal编程技术网

Java Jeromq/ZeroMQ服务器(windows)-客户端(android)测试

Java Jeromq/ZeroMQ服务器(windows)-客户端(android)测试,java,android,sockets,zeromq,jeromq,Java,Android,Sockets,Zeromq,Jeromq,我正试图用一个简单的应用程序对Jeromq库进行测试,但它不起作用 以下是服务器: 导入org.zeromq.ZMQ public class Server { public static void main(String[] args) throws Exception { ZMQ.Context ctx = ZMQ.context(1); ZMQ.Socket socket = ctx.socket(ZMQ.REP);

我正试图用一个简单的应用程序对Jeromq库进行测试,但它不起作用

以下是服务器:

导入org.zeromq.ZMQ

public class Server  {

     public static void main(String[] args) throws Exception {

            ZMQ.Context ctx = ZMQ.context(1);

            ZMQ.Socket socket = ctx.socket(ZMQ.REP);
            socket.bind("tcp://192.168.56.1:5570");
            System.out.println("Started");

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

                byte[] request = socket.recv(0);
                String string = new String(request);
                System.out.println("Received request: ["+string+"].");

                try {
                    Thread.sleep(100);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }

                socket.send("We got message".getBytes(), 0);
            }

            System.out.println("finished");
            socket.close();
            ctx.term();           
     } 
}
所以,在启动它之后,我有一个日志——“启动”。192.168.56.1是我的本地ip地址,netstat-na(我在Windows上工作)显示192.168.56.1:5570正在侦听。所以,我想没关系。我在Windows中打开了这个插座

然后我在安卓上写了这样一句话:

用于建立连接的接口:

public interface ConnectionReadyListnener {

        void onServerConnectionEstablished();

}
然后连接AsyckTask以建立与th服务器的连接:

public class Connection extends AsyncTask<Void, Void, Void> {

    public ConnectionReadyListnener listener=null;
    public static ZMQ.Context context;
    public static ZMQ.Socket socket;


    @Override
    protected Void doInBackground(Void... params) {

        context = ZMQ.context(1);
        socket = context.socket(ZMQ.DEALER);
        socket.setIdentity("12345".getBytes(ZMQ.CHARSET));
        socket.connect("tcp://192.168.56.1:5570"); 

        return null;
    }

    @Override
    protected void onPostExecute(Void result) {
        super.onPostExecute(result);
        listener.onServerConnectionEstablished();
    }

}
下面是TestAsynk类,用于发送服务器应接收并登录到控制台的测试消息:

public class TestAsynk extends AsyncTask<Void, Void, Void>{

    @Override
    protected Void doInBackground(Void... params) {
        Connection.socket.send("Test".getBytes(), 0);
        return null;
    }

}
公共类TestAsynk扩展异步任务{
@凌驾
受保护的Void doInBackground(Void…参数){
Connection.socket.send(“Test”.getBytes(),0);
返回null;
}
}
但它从不将结果记录出来——它不会收到结果。问题是我不知道为什么——电话(真正的设备)和带有服务器的计算机在一个WiFi网络中。而且我还了解到ZeroMQ无法确定连接是否真正建立


请帮我弄清楚。

这里有很多问题

1) 不要在线程之间传递套接字。ZeroMQ中唯一的线程安全对象是上下文。在线程之间传递套接字几乎肯定是问题的根源

2) 如果服务器端出现问题,可能是IP地址不正确。如果可能,我不建议在绑定的一侧硬编码IP地址。只需使用通配符“*”即可。所以在服务器端,它看起来像

    socket.bind("tcp://*:5570");
3) 您的异步模式有一个明显的错误。。。如果在将侦听器设置为活动之前运行
onPostExecute
,会发生什么情况?至少,在AsyncTask中添加一个构造函数来接收活动…类似于

public Connection(Activity listener){
    this.listener = listener;
}

4) 检查权限。过去,我需要互联网和访问WIFI的状态许可。

这里有很多问题

1) 不要在线程之间传递套接字。ZeroMQ中唯一的线程安全对象是上下文。在线程之间传递套接字几乎肯定是问题的根源

2) 如果服务器端出现问题,可能是IP地址不正确。如果可能,我不建议在绑定的一侧硬编码IP地址。只需使用通配符“*”即可。所以在服务器端,它看起来像

    socket.bind("tcp://*:5570");
3) 您的异步模式有一个明显的错误。。。如果在将侦听器设置为活动之前运行
onPostExecute
,会发生什么情况?至少,在AsyncTask中添加一个构造函数来接收活动…类似于

public Connection(Activity listener){
    this.listener = listener;
}

4) 检查权限。过去,我需要INTERNET和访问WIFI的状态许可。

您找到解决此问题的方法了吗?在过去的两天里,我一直在做这件事,没有得到谷歌太多的帮助。@Ashok抱歉,我没有,我放弃了尝试ZMQ。此外,测试表明WebSocket比zmqoh ok更快。无论如何,谢谢你的回复。我的一位同事似乎已经成功地做到了这一点。如果有,将在此处更新。我在Android清单中缺少INTERNET权限。由于某种原因,日志中也没有报告!这可能是它对你也不起作用的原因吗<代码>\u感谢[https://www.novoda.com/blog/minimal-zeromq-client-server]博客文章。它在最后一行提到了许可。有时,仅从字里行间阅读是不够的:)不,我有此权限,而且我在服务器端遇到了问题。您找到解决此问题的方法了吗?在过去的两天里,我一直在做这件事,没有得到谷歌太多的帮助。@Ashok抱歉,我没有,我放弃了尝试ZMQ。此外,测试表明WebSocket比zmqoh ok更快。无论如何,谢谢你的回复。我的一位同事似乎已经成功地做到了这一点。如果有,将在此处更新。我在Android清单中缺少INTERNET权限。由于某种原因,日志中也没有报告!这可能是它对你也不起作用的原因吗<代码>\u感谢[https://www.novoda.com/blog/minimal-zeromq-client-server]博客文章。它在最后一行提到了许可。有时,仅仅在字里行间阅读是不够的:)\u不,我有这个权限,而且我在服务器端遇到了问题