我正在开发一个涉及本地网络套接字的项目 - 我想创建一个Java服务器(在Windows上运行的桌面应用程序),它将监听并与多个客户端建立连接 - Arduino主板。
问题是,代码在尝试建立连接时卡住了。这是Java代码:
monitorThread = new Thread(() -> {
try {
System.out.println("Creating socket...");
ServerSocket server = new ServerSocket(4444);
while (true) {
System.out.println("Waiting for connection...");
Socket client = server.accept();
//NetworkManager.this.didConnect(client);
System.out.println("Did establish connection");
if (delegate != null) {
delegate.didConnect(client);
}
}
} catch (IOException exception) {
System.out.print(exception);
}
});
monitorThread.start();
和Arduino代码
#include <SPI.h>
#include <Ethernet.h>
IPAddress serverIp(192, 168, 1, 101);
int serverPort = 4444;
byte mac[] = {
0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xEF
};
IPAddress ip(192, 168, 1, 178);
EthernetClient client;
void setup() {
Ethernet.begin(mac, ip);
Serial.begin(9600);
while (!Serial) {
; // wait for serial port to connect. Needed for native USB port only
}
delay(1000);
// give the Ethernet shield a second to initialize:
Serial.println("connecting...");
if (client.connect(serverIp, serverPort)) {
Serial.println("connected.");
} else {
Serial.println("connection failed.");
}
}
当尝试建立连接时,这些都没有失败,而是挂起 - Java服务器挂起Socket client = server.accept();
,但Arduino也挂起 - client.connect(serverIp, serverPort)
运行Java服务器的计算机具有静态IP(192.168.1.101)。
我理解Java的server.accept()
是一个阻塞调用,因此在建立连接之前它不会继续(它在单独的线程中运行的原因),但令我困惑的是为什么Arduino也会动手。
即使我尝试连接到其他服务器IP和端口 - 例如64.233.187.99
(Google),它仍会挂起。
我做错了什么?还有一些额外的设置我还没有完成吗?它可以与我的网络设置有关吗?
答案 0 :(得分:2)
请尝试以下步骤并尝试一下:
另请发布您的循环代码。我使用完全相同的代码将arduino传递给java套接字服务器。你的代码似乎很好;它可能是防火墙或其他东西。确保从另一台机器上检查telnet连接。