| 注册
请输入搜索内容

热门搜索

Java Linux MySQL PHP JavaScript Hibernate jQuery Nginx
g2b4
9年前发布

Android应用通过socket与pc通信的示例代码

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

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