我有4个电话连接到Wifi接入点,我知道所有这些的MAC / IP,包括Wifi接入点。
我需要实现这些手机之间的通信,一种点对点通信,我正在考虑使用套接字但是每个手机都必须在每部手机上实现ServerSocket和Socket这样好吗?
这些手机的IP将在私人范围192.168 ....所以我可以使用http://192.168.xx.xx/port之类的东西并使用http联系任何手机?我可以用什么类来实现它,或者是否有一个我可以直接使用的现成框架?
答案 0 :(得分:2)
你的计划是好的:你也可以让电话听套接字。如果您只是希望进行点对点通信并且对您正在编写的应用程序更感兴趣,那么您可能需要查看JXTA,这是一个有点流行的Java P2P系统。我不知道,我听说它的性能有些不好,但对于你的应用它可能是合适的。
但也不是很难推出自己的。但是,我没有看到任何用于Java ME的HTTP服务器端库,因此使用HTTP可能比必要的工作更多。我可能只是通过TCP套接字实现自定义协议,因为它似乎不需要与现有的任何东西互操作。
Java ME中的套接字通信是通过javax.microedition.io
包中的通用连接框架,从客户端开始,它就像使用HTTP连接一样,即类似
String url = "socket://192.168.xxx.xxx:12345";
SocketConnection conn = (SocketConnection) Connector.open(url);
然后,您可以从InputStream
和OutputStream
获取连接,如果您想发送二进制数据,可以DataInputStream
和DataOutputStream
。
在服务器端,你会做
String url = "socket://:12345";
ServerSocketConnection sock = (ServerSocketConnection) Connector.open(url);
SocketConnection conn = (SocketConnection) sock.acceptAndOpen();
acceptAndOpen
阻塞直到建立连接,因此如果服务器执行其他操作很重要,请确保将连接接受放入其自己的线程中。
一个警告:几年前我这样做的时候,我发现只是在套接字上监听并没有打开所有手机上的网络,所以即使服务器开始收听,也无法连接到因为它不在网络上。我解决这个问题的方法是在手机上打开Web浏览器,但任何打开套接字的客户端都足够了,所以你也可以尝试自己打开客户端连接,从应用程序中完成它。
还有一种称为Push Registry的东西。创建Midlet时,可以在JAD文件中使用MIDlet-Push
属性注册应用程序,这样您就不必运行应用程序,但系统会在连接时将其唤醒试图在某个港口。我从来没有真正实现过这个,所以我不能再提供任何建议了。