2014-02-20 44 views
1

我試圖獲得無線對等網絡,其中一個用戶可以發送一個簡單的字符串到其他用戶正在運行的例子。
我已經可以獲取可用的客戶名單,但我被困在連接到客戶端:Wifi P2P - 使用什麼主機/如何獲取它?

02-20 09:59:12.789: E/TTT(4176): Host is unresolved: 5e:f8:a1:36:ee:64 

socket.connect((new InetSocketAddress(host, 8888)), 5000); 

我想我需要的IP地址,而不是MAC地址,但我怎麼得到它? 或者它是一個不同的問題?

解決方案:
我同時顯示客戶自己的IP地址,這樣你就可以進入IP連接(在other's IP) - 它的工作原理是這樣,雖然it's不是一個完美的解決方案。

+0

您需要的IP地址。 –

+0

我該如何得到它? –

+0

@BenjaminSchwalb爲什麼不嘗試WiFiDirectDemo其Android的遺產......還有就是展示瞭如何實現你想要的 – 5er

回答

-1

你打開一個設備上的服務器插口,通過對其他客戶端插座,然後打開客戶端上的插座,並從服務器連接到客戶端連接,然後它們相等(P2P)。

你確實需要您連接到該設備的IP地址,您需要在端口設置爲您在服務器上打開了一個。如果在PC上這樣做,一定要正確設置防火牆,如果您安裝了防火牆應用程序,這也適用於Android。在創建服務器套接字時,您只需設置端口(您也可以在此處添加IP地址,但這些僅用於過濾請求)。

因爲TCP和UDP協議,以工作依靠互聯網協議(IP)您需要的IP地址。本文將詳細解釋http://en.wikipedia.org/wiki/TCP/IP_model,但您也可以看到有關網絡堆棧和OSI模型的任何教程或解釋。

在服務器端,你可以這樣寫是這樣的:

ServerSocket serverSocket = null; 
Socket clientSocket = null; 
try { 
    serverSocket = new ServerSocket(8000); 
    clientSocket = serverSocket.accept(); 

    ObjectOutputStream oos = new ObjectOutputStream(clientSocket.getOutputStream()); 
    ObjectInputStream ois = new ObjectInputStream(clientSocket.getInputStream()); 

    oos.writeObject("WELCOME"); 
    oos.flush(); 
} catch (Exception e) { 
    e.printStackTrace(); 
} 

不要把這個UI線程上,因爲你將得到一個異常。相反,創建AsyncTask或工作線程命名爲Networking或其他東西,並在那裏做網絡連接。此外,連接時,您可能會使用while(isConnected)循環創建阻塞方法,以偵聽套接字中的數據。

在客戶端只需連接到這一點使用像這樣打開插座:

Socket socket; 
try { 
    socket = new Socket("IP.OF.HOST.DEVICE", 8000); 
    ObjectInputStream input = new ObjectInputStream(socket.getInputStream()); 
    ObjectOutputStream output = new ObjectOutputStream(socket.getOutputStream()); 
    System.out.println("Connected"); 
    System.out.println("Input: " + input.readObject()); 
    while (true) { 
     BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 

     String s = br.readLine(); 
     output.writeObject(s); 
     output.flush(); 
    } 
} catch (Exception e) { 
    e.printStackTrace(); 
} 
//Close resources when you don't need them especially sockets. 
socket.close(); 
+0

感謝廣泛的答案,但我得到了所有的工作已經 - 我只需要找到該連接設備的IP,但我得到了它現在 –

+0

你havnt回答了這個問題,你剛纔給他發佈什麼問題的代碼。 –

+0

@ParthAnjaria我不明白你爲什麼不考慮這個答案?問題是關於如何以P2P方式在設備之間發送簡單字符串,這正是所需的代碼。海報只表示他們有「可用客戶名單」。或者我完全誤解了這個問題? – PSIXO

0

試試這個..

socket = new Socket(); 
     InetSocketAddress socketAddress = new InetSocketAddress(SERVER_IP, SERVERPORT); 
     socket.connect(socketAddress); 
+0

如何獲得SERVER_IP?我有一個設備列表,我想發送一些數據到列出的設備之一。我如何獲得所選設備的IP? @Arya –