Android應用通過socket與pc通信的示例代碼

g2b4 9年前發布 | 4K 次閱讀 Java Android

在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();
    }

}

} </pre>
 android設備客戶端代碼:
    MainActivity.java代碼:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;

import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.util.Log; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.Toast;

public class MainActivity extends Activity implements OnClickListener,Runnable{

private Button button;
private EditText editText;
private Socket socket;
private PrintWriter pw;
private BufferedReader br;
private Handler handler;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    handler=new Handler();
    button=(Button)findViewById(R.id.button);
    button.setOnClickListener(this);
    editText=(EditText)findViewById(R.id.edittext);
    try {
        socket=new Socket("tobacco5648.xicp.net",5648);        //連接到tobacco5648.xicp.net的5648端口

} catch (UnknownHostException e) { // TODO Auto-generated catch block e.printStackTrace(); Log.e("socket","unknown host"); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); Log.e("socket","io execption"); } if(socket==null){ Log.e("socket","null"); } else try { pw=new PrintWriter(socket.getOutputStream()); br=new BufferedReader(new InputStreamReader(socket.getInputStream())); if(pw!=null&&br!=null){ new Thread(this).start(); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.activity_main, menu);
    return true;
}

public void onClick(View view) {
    if(view==button){
        String str;
        str=editText.getText().toString();
        pw.println(str);
        pw.flush();
    }

}

public void run() {

    try {
        String str;
        while((str=br.readLine())!=null){
            final String s=str;
            handler.post(new Runnable(){

                public void run() {
                    Toast.makeText(MainActivity.this, s, Toast.LENGTH_LONG).show();

                }});

        }
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

}


}</pre>

 本文由用戶 g2b4 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!