【发布时间】:2016-03-01 15:27:36
【问题描述】:
我正在开发一个 JavaFX 音乐播放器,它可以通过 TCP 套接字与 Android 应用程序通信,显示来自音乐播放器的一些数据(例如:播放列表)。 Android 应用程序从数据库加载所有可用音乐播放器的列表。在此列表中还有音乐播放器的当前 IP 和当前 PUBLIC_PORT。然后,Android 应用程序可以通过 TCP 套接字和 PUBLIC_PORT 连接到播放器。之后,音乐播放器向 Android 应用返回“PRIVATE_PORT”(以便应用可以通过 PRIVATE_PORT 与播放器进行通信),并开始监听新客户端的连接。
public void connectToServer() {
boolean end = false;
for(int i = 0; end == false; i++) {
try {
if(i > 100) {
end = true;
}
socket = new java.net.Socket(serveraddress,port);
end = true;
port = Integer.parseInt(getPortFromServer());
Log.d("", "Connected to engine on port" + port);
socket.close();
socket = new java.net.Socket(serveraddress,port);
readPlaylist();
Thread.sleep(1000);
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
因为我认为这不是一个很好的解决方案,因为我需要很多 TCP 端口,所以我想知道是否有更好的方法来实现它。
我对不同实现的唯一想法是 RESTful Web 服务,但我确信这是否可行,因为我使用的是 JavaFX,并且我需要一个可执行文件来启动音乐播放器而无需安装 Web 服务器。
编辑:另一个想法是在 Android 应用程序和 JavaFX 播放器之间放置一个 Web 服务器。这样我就可以解决 PORT 问题了。
【问题讨论】:
标签: java android sockets javafx