你打開一個設備上的服務器插口,通過對其他客戶端插座,然後打開客戶端上的插座,並從服務器連接到客戶端連接,然後它們相等(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();
您需要的IP地址。 –
我該如何得到它? –
@BenjaminSchwalb爲什麼不嘗試WiFiDirectDemo其Android的遺產......還有就是展示瞭如何實現你想要的 – 5er