標籤:android blog http ar os java on art 問題
自己的電腦網路的基礎太差了,一個很小的Demo居然搞了快一天,真醉了,不過坑踩多了,自然知道怎麼走路了。首先,是服務端的代碼class Server implements Runnable{public static void main(){Thread server = new Thread(new Server());server.start();}
//服務端因為需要接受多個用戶端的資訊,所以需要一直開放連接埠等待用戶端連入,我就不寫try catch了,有點多
public void run()while{(true){System.out.println("Server Start..");//本地PC連接埠18888ServerSocket server = new ServerSocket(18888);Socket socket = server.accept();System.out.println("Server Accept..");//輸入資料流,接受用戶端的資訊BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));String str = br.readLine();if(str=="exit") { socket.close();}//輸出資料流,向用戶端發送資訊PrintWriter pw = new PrintWriter(new BufferedWriter(new OutputStreamWtier(socket.getOutputStream())),true);pw.println(str);//最後不要忘了關閉處理流pw.close();br.close();finally{if(null!=socket)socket.close();
再然後是,android端的代碼
//控制項的擷取我就不列出來了,只有一個EditText和Button,Button點擊,把EditText的內容發給服務端btnSend.setOnClickListener(new OnClickListener(){//注意此處IP地址Socket socket = new Socket("10.0.2.2",18888); //輸入資料流,接受服務端的資訊BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));String str = br.readLine(); if(null!=str){editText.setText(str);}//輸出資料流,向服務端發送資訊PrintWriter pw = new PrintWriter(new BufferedWriter(new OutputStreamWtier(socket.getOutputStream())),true);pw.println(str);//最後不要忘了關閉處理流br.close();pw.close(); if(socket!=null) {socket.close();}
Over~
代碼源自原作者
在此輸入連結描述
總結一下我遇到的坑:
- 連網許可權。用Socket串連服務端,需要android的Internet許可權,這個不要忘記。
- 服務端IP地址。假如是用模擬器串連PC端的話,android端的連網IP是“10.0.2.2”,連接埠需要找PC端未被佔用的連接埠(否則會遇到"Address already in use: JVM_Bind"的問題),用真機的話,需要在電腦上確定原生IP(控制台輸入ipconfig)。
- 流的開啟關閉。
總的來說,其實蠻簡單的Demo,不過被我弄複雜了
android通過socket串連服務端(PC端)