Tôi đang cố gắng nghe trên cổng bằng cách sử dụng ServerSocket
trên thiết bị Android. Tôi muốn có thể kết nối với cổng này qua WiFi bằng máy tính trên cùng một mạng.Không thể sử dụng ServerSocket trên Android
tôi nhận được không phải ngoại lệ khi ràng buộc nó vào một cổng, tuy nhiên khi tôi kiểm tra netstat nó nói:
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 (null):4040 (null):* LISTEN
Tôi đã thử vô số cách để ràng buộc nó để localhost, 0.0.0.0, WiFi LAN IP địa chỉ của thiết bị có SocketInetAddress
và InetAddress.getByName
. Không có gì có vẻ hiệu quả.
Khi tôi cố gắng để kết nối với cổng từ một máy tính trong cùng mạng WiFi (Tôi đã thử cả netcat và Java Socket.connect()
), tất cả những gì có thể thấy trong Wireshark là một yêu cầu ARP:
Who has [phone's LAN address]? Tell [computer LAN address].
này yêu cầu lặp lại cho đến khi hết thời gian chờ.
Tôi đã thử cách ngược lại, bằng cách đặt ServerSocket trên máy tính và kết nối với cổng đó từ điện thoại, hoạt động rất tốt.
Điện thoại thử nghiệm của tôi là Samsung Spica i5700 có ROM tùy chỉnh.
Bất kỳ ý tưởng nào?
Edit: Mã này là đơn giản như thế này:
ServerSocket server = new ServerSocket();
server.setReuseAddr(true);
server.setTimeout(0);
server.bind(new InetSocketAddress(4040));
Socket client = null;
while((client = server.accept()) == null);
// Connected
enter code here
enter code here
Bạn có thể hiển thị một số mã không? Bạn có đặt quyền phù hợp trong tệp kê khai không? – Flo
Tôi đã cập nhật câu hỏi với một số mã. Có, tôi đặt quyền INTERNET trong tệp kê khai. – shuwo
'ServerSocket.accept()' không thể trả về null. – EJP