Java Jeromq/ZeroMQ服务器(windows)-客户端(android)测试
我正试图用一个简单的应用程序对Jeromq库进行测试,但它不起作用 以下是服务器: 导入org.zeromq.ZMQJava 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);
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不,我有这个权限,而且我在服务器端遇到了问题