我正在研究一种JavaFX音乐播放器,它可以通过TCP套接字与Android App进行通信,从音乐播放器中显示一些数据(例如:播放列表)。 Android应用程序从数据库中加载所有可用音乐播放器的列表。在此列表中还有音乐播放器的当前IP和当前PUBLIC_PORT。然后Android应用程序可以通过TCP套接字和PUBLIC_PORT连接到播放器。之后,音乐播放器将“PRIVATE_PORT”返回到Android应用程序(以便应用程序可以通过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 webservice,但我确定这是否可行,因为我使用JavaFX并且我需要一个可执行文件来启动音乐播放器而无需安装Web服务器。
编辑:另一个想法是在Android应用程序和JavaFX播放器之间放置一个Web服务器。这样我就可以解决PORT问题了。
答案 0 :(得分:0)
使用UDP套接字解决了这个问题。