在Android中可以直接利用java中的Socket與ServerSocket構建socket通信。
代碼的運行環境:
pc端:普通pc,作為服務器,已經設置有域名(通過動態域名軟件設置),在5648端口進行監聽。
Android手機客戶端:android2.3設備。
代碼運行一切正常,客戶端發送的文字將在服務器端接收並顯示,服務器每接收到客戶端的一行文字,就會返回一個從0開始遞增的整數,此整數將在客戶端顯示出來。
pc端代碼:
- package test;
-
- import java.io.BufferedReader;
- import java.io.IOException;
- import java.io.InputStream;
- import java.io.InputStreamReader;
- import java.io.OutputStream;
- import java.io.PrintWriter;
- import java.net.ServerSocket;
- import java.net.Socket;
-
-
- public class Test implements Runnable{
-
- /**
- * @param args
- */
-
- int max=10; //最大開啟線程數
- int i=0; //回復數字
- int temp;
- ServerSocket serverSocket;
- Socket socket[];
-
- public Test(){
-
- try {
- serverSocket=new ServerSocket(5648); //在5648端口進行偵聽
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- System.out.println("can't initate ServerSocket!");
- return;
- }
-
- socket=new Socket[max];
-
- System.out.println("waiting for connect");
- try {
- while((socket[i]=serverSocket.accept())!=null){
- temp=i;
- i++;
- new Thread(this).start(); //每偵聽到一個客戶端的連接,就會開啟一個工作線程
-
- }
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- public static void main(String[] args) {
- new Test();
-
- }
-
- @Override
- public void run() {
- Socket sk=socket[temp];
- System.out.println("accept:"+sk.getInetAddress().getHostAddress());
- InputStream is=null;
- OutputStream os=null;
- BufferedReader br=null;
- PrintWriter pw=null;
- try {
- is=sk.getInputStream();
- os=sk.getOutputStream();
- br=new BufferedReader(new InputStreamReader(is));
- pw=new PrintWriter(os);
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- try {
- sk.close();
- } catch (IOException e1) {
- // TODO Auto-generated catch block
- e1.printStackTrace();
- }
- return;
- }
- String str;
- try {
- int m=0;
- while((str=br.readLine())!=null){
- System.out.println(str);
- pw.println(m);
- pw.flush();
- m++;
- }
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
-
- }
-
- }