簡體   English   中英

Java 套接字在 Windows 上不起作用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM