【发布时间】:2018-03-19 17:26:31
【问题描述】:
我需要将消息从我 PC 上的 Java 程序发送到 Android Wear 2.0 应用程序。手表直接(无中间电话)连接到我要从中发送消息的 PC 上的移动热点(Windows 10 设置的默认热点设置)。 Wifi adb 调试在这个本地网络上完美无缺。
目标是一对一的通信,所以我使用了简单的 Java 网络套接字。笔记本电脑充当服务器,手表充当客户端。在 Wear 应用上,这发生在一个单独的 AsyncTask 中:
@Override
protected Void doInBackground(Void... voids) {
try(Socket audioSocket = new Socket("localhost",4445);
PrintWriter out = new PrintWriter(audioSocket.getOutputStream(),true);
BufferedReader in = new BufferedReader(new InputStreamReader(audioSocket.getInputStream()));){
while(true){
String msg = in.readLine();
// do something with msg
}
}
catch (IOException e) {
e.printStackTrace();
}
return null;
}
在 Java PC 应用程序上,服务器也在单独的线程中运行:
@Override
public void run() {
ServerSocket serverSocket = new ServerSocket(4445);
while (true) {
try(Socket clientSocket = serverSocket.accept()) {
try(PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));) {
while (true) {
// send messages
}
}
} catch (IOException ex) {
Logger.getLogger(AudioServer.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
在穿戴应用的清单中,我请求以下权限:
<uses-permission android:name="android.permission.INTERNET" />
Java PC 应用程序运行良好。但是,当我运行磨损应用程序时,我收到以下错误:
System.err: java.net.ConnectException: Connection refused
这个错误的原因是什么?或者有没有更好的方法在可穿戴设备和 PC 应用程序之间进行一对一的通信(在这种情况下安全性并不重要)?
【问题讨论】:
-
您是否检查过: 1) 您尝试连接到错误的 IP/端口。 2)你还没有启动你的服务器。 3)您的服务器没有监听连接。 4) 在 Windows 服务器上,listen backlog 队列已满。?参考:SO post
-
问题确实是IP地址错误:它必须是
192.168.137.1(Windows热点IP地址)而不是localhost。
标签: java sockets network-programming wear-os