[英]Java sockets doesn't work on windows
我正在嘗試制作一個程序,我想在同一個 wifi 中連接兩個設備,所以我正在嘗試使用套接字。
我在我的電腦上運行服務器代碼,在 android 設備上運行客戶端。 問題是服務器在 windows 上不工作,但在 linux 上可以。 我斷開了所有的防火牆、windows 和 avast,但我仍然遇到同樣的問題。 我嘗試使用 linux 機器作為服務器,使用 windows 作為客戶端,它運行良好。
當我嘗試獲取套接字“Socket s = ss.accept();”時,我放了一些打印件以查看它停止的位置以及Windows中的服務器端停止。 我沒有收到任何錯誤,它只是卡在那里。
我不知道會出什么問題。
服務器端
int port = 2002;
try {
ServerSocket ss = new ServerSocket(port);
Socket s = ss.accept();
InputStream is = s.getInputStream();
ObjectInputStream ois = new ObjectInputStream(is);
System.out.println((String)ois.readObject());
is.close();
s.close();
ss.close();
}catch(Exception e){System.out.println(e);}
客戶端:
try{
String hostPortatil = "192.168.1.131";
String host = "192.168.174.1";
int port = 2002;
Socket s = new Socket(hostPortatil, port);
OutputStream os = s.getOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(os);
oos.writeObject(new String("another object from the client"));
oos.close();
os.close();
s.close();
}catch(Exception e){
System.out.println(e);
}
很可能您尚未將 Windows 防火牆配置為接受端口 2002 上的連接。
您的服務器配置為偵聽端口 9999 上的連接,但客戶端使用端口 2002 進行連接
編輯:
在 Windows 上啟動服務器並打開一個 cmd.exe:
netstat -an|findstr "2002"
您應該會看到您的 java 進程正在偵聽連接。 如果沒有,那么就出問題了。 在 linux 服務器中打開一個 shell:
telnet 192.168.1.131 2002
您應該從 linux 服務器連接到 windows 服務器。 再次,如果不是一些是錯誤的。
我認為這是因為您在 Windows 上運行程序的服務器端,它將本地主機 ip 分配給您的服務器端,並且該 ip 肯定與本地 Wi-Fi 和熱點連接的 ip 不同。 我使用本地主機在 Windows 上運行示例應用程序的客戶端和服務器端,並且在兩個不同平台上使用我的 Wi-Fi 和熱點連接的 IP 工作但沒有工作。 我想可以通過將計算機轉換為服務器來解決!
accept() 方法正在等待客戶端建立 TCP 連接,這就是為什么沒有輸出也沒有錯誤的原因,所以問題似乎出在客戶端。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.