Android Socket网络通信

    技术2022-05-19  17

    1.服务器程序:

    Java代码   package com;     import java.io.BufferedReader;   import java.io.BufferedWriter;   import java.io.IOException;   import java.io.InputStreamReader;   import java.io.OutputStreamWriter;   import java.io.PrintWriter;   import java.net.ServerSocket;   import java.net.Socket;   import java.util.ArrayList;   import java.util.List;   import java.util.concurrent.ExecutorService;   import java.util.concurrent.Executors;     /**   * com Server   *    * @author Aina.huang E-mail: 674023920@qq.com   * @version 创建时间:2010 Jul 14, 2010 10:45:35 AM 类说明   */  public class Main {         private static final int PORT = 9999;// 端口监听       private List<Socket> mList = new ArrayList<Socket>();// 存放客户端socket       private ServerSocket server = null;       private ExecutorService mExecutorService = null;// 线程池         /**       * @param args       */      public static void main(String[] args) {           // TODO Auto-generated method stub           new Main();       }         public Main() {           try {               server = new ServerSocket(PORT);               mExecutorService = Executors.newCachedThreadPool();// 创建一个线程池               System.out.println("Server Start...");               Socket client = null;               while (true) {                   client = server.accept();                   mList.add(client);                   mExecutorService.execute(new Service(client));// 开启一个客户端线程.               }           } catch (Exception ex) {               ex.printStackTrace();           }       }         public class Service implements Runnable {             private Socket socket;           private BufferedReader in = null;           private String msg = "";             public Service(Socket socket) {               this.socket = socket;               try {                   in = new BufferedReader(new InputStreamReader(socket                           .getInputStream()));                   msg = "user:" + this.socket.getInetAddress() + " come total:"                          + mList.size();                   this.sendmsg();               } catch (IOException e) {                   e.printStackTrace();               }           }             public void run() {               // TODO Auto-generated method stub               try {                   while (true) {                       if ((msg = in.readLine()) != null) {                           if (msg.equals("exit")) {                               System.out.println("sssssssssss");                               mList.remove(socket);                               in.close();                               msg = "user:" + socket.getInetAddress()                                       + " exit total:" + mList.size();                               socket.close();                               this.sendmsg();                               break;                           } else {                               msg = socket.getInetAddress() + " : " + msg;                               this.sendmsg();                           }                       }                     }               } catch (Exception ex) {                   System.out.println("server 读取数据异常");                   ex.printStackTrace();               }           }             /**           * 发送消息给所有客户端           */          public void sendmsg() {               System.out.println(msg);               int num = mList.size();               for (int i = 0; i < num; i++) {                   Socket mSocket = mList.get(i);                   PrintWriter pout = null;                   try {                       pout = new PrintWriter(new BufferedWriter(                               new OutputStreamWriter(mSocket.getOutputStream())),                               true);                       pout.println(msg);                   } catch (IOException e) {                       e.printStackTrace();                   }               }           }       }   }   package com; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; import java.util.ArrayList; import java.util.List; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; /** * com Server * * @author Aina.huang E-mail: 674023920@qq.com * @version 创建时间:2010 Jul 14, 2010 10:45:35 AM 类说明 */ public class Main { private static final int PORT = 9999;// 端口监听 private List<Socket> mList = new ArrayList<Socket>();// 存放客户端socket private ServerSocket server = null; private ExecutorService mExecutorService = null;// 线程池 /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub new Main(); } public Main() { try { server = new ServerSocket(PORT); mExecutorService = Executors.newCachedThreadPool();// 创建一个线程池 System.out.println("Server Start..."); Socket client = null; while (true) { client = server.accept(); mList.add(client); mExecutorService.execute(new Service(client));// 开启一个客户端线程. } } catch (Exception ex) { ex.printStackTrace(); } } public class Service implements Runnable { private Socket socket; private BufferedReader in = null; private String msg = ""; public Service(Socket socket) { this.socket = socket; try { in = new BufferedReader(new InputStreamReader(socket .getInputStream())); msg = "user:" + this.socket.getInetAddress() + " come total:" + mList.size(); this.sendmsg(); } catch (IOException e) { e.printStackTrace(); } } public void run() { // TODO Auto-generated method stub try { while (true) { if ((msg = in.readLine()) != null) { if (msg.equals("exit")) { System.out.println("sssssssssss"); mList.remove(socket); in.close(); msg = "user:" + socket.getInetAddress() + " exit total:" + mList.size(); socket.close(); this.sendmsg(); break; } else { msg = socket.getInetAddress() + " : " + msg; this.sendmsg(); } } } } catch (Exception ex) { System.out.println("server 读取数据异常"); ex.printStackTrace(); } } /** * 发送消息给所有客户端 */ public void sendmsg() { System.out.println(msg); int num = mList.size(); for (int i = 0; i < num; i++) { Socket mSocket = mList.get(i); PrintWriter pout = null; try { pout = new PrintWriter(new BufferedWriter( new OutputStreamWriter(mSocket.getOutputStream())), true); pout.println(msg); } catch (IOException e) { e.printStackTrace(); } } } } }

    2.客户端程序:

    Java代码   package com.Aina.Android;     import java.io.BufferedReader;   import java.io.BufferedWriter;   import java.io.InputStreamReader;   import java.io.OutputStreamWriter;   import java.io.PrintWriter;   import java.net.Socket;     import android.app.Activity;   import android.app.AlertDialog;   import android.content.DialogInterface;   import android.os.Bundle;   import android.os.Handler;   import android.os.Message;   import android.util.Log;   import android.view.View;   import android.widget.Button;   import android.widget.EditText;   import android.widget.TextView;     public class Test extends Activity implements Runnable {       /** Called when the activity is first created. */      private TextView tv_msg = null;       private EditText ed_msg = null;       private Button btn_send = null;       private Button btn_login = null;       private static final String HOST = "192.168.0.132";       private static final int PORT = 9999;       private Socket socket = null;       private BufferedReader in = null;       private PrintWriter out = null;       private String content = "";         @Override      public void onCreate(Bundle savedInstanceState) {           super.onCreate(savedInstanceState);           setContentView(R.layout.main);           tv_msg = (TextView) this.findViewById(R.id.TextView);           ed_msg = (EditText) this.findViewById(R.id.EditText01);           btn_login = (Button) this.findViewById(R.id.Button01);           btn_send = (Button) this.findViewById(R.id.Button02);           try {               socket = new Socket(HOST, PORT);               in = new BufferedReader(new InputStreamReader(socket                       .getInputStream()));               out = new PrintWriter(new BufferedWriter(                       new OutputStreamWriter(socket.getOutputStream())),                       true);           } catch (Exception ex) {               ex.printStackTrace();               ShowDialog("登陆异常:" + ex.getMessage());           }           btn_send.setOnClickListener(new Button.OnClickListener() {                 public void onClick(View v) {                   // TODO Auto-generated method stub                   String msg = ed_msg.getText().toString();                   if (socket.isConnected()) {                       if (!socket.isOutputShutdown()) {                           out.println(msg);                       }                   }               }             });           new Thread(this).start();       }         public void ShowDialog(String msg) {           new AlertDialog.Builder(this).setTitle("提示").setMessage(msg)                   .setPositiveButton("OK"new DialogInterface.OnClickListener() {                         public void onClick(DialogInterface dialog, int which) {                           // TODO Auto-generated method stub                         }                     }).show();       }         public void run() {           try {               while (true) {                   if(socket.isConnected()){                       if(!socket.isInputShutdown()){                           if ((content = in.readLine()) != null) {                               Log.i("TAG""++ "+content);                               content += "/n";                               mHandler.sendMessage(mHandler.obtainMessage());                           }else{                                                          }                       }                   }                                  }           } catch (Exception ex) {               ex.printStackTrace();           }       }         public Handler mHandler = new Handler() {           public void handleMessage(Message msg) {               super.handleMessage(msg);               Log.i("TAG""-- "+msg);               tv_msg.setText(tv_msg.getText().toString() + content);           }       };   }   package com.Aina.Android; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.net.Socket; import android.app.Activity; import android.app.AlertDialog; import android.content.DialogInterface; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; public class Test extends Activity implements Runnable { /** Called when the activity is first created. */ private TextView tv_msg = null; private EditText ed_msg = null; private Button btn_send = null; private Button btn_login = null; private static final String HOST = "192.168.0.132"; private static final int PORT = 9999; private Socket socket = null; private BufferedReader in = null; private PrintWriter out = null; private String content = ""; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); tv_msg = (TextView) this.findViewById(R.id.TextView); ed_msg = (EditText) this.findViewById(R.id.EditText01); btn_login = (Button) this.findViewById(R.id.Button01); btn_send = (Button) this.findViewById(R.id.Button02); try { socket = new Socket(HOST, PORT); in = new BufferedReader(new InputStreamReader(socket .getInputStream())); out = new PrintWriter(new BufferedWriter( new OutputStreamWriter(socket.getOutputStream())), true); } catch (Exception ex) { ex.printStackTrace(); ShowDialog("登陆异常:" + ex.getMessage()); } btn_send.setOnClickListener(new Button.OnClickListener() { public void onClick(View v) { // TODO Auto-generated method stub String msg = ed_msg.getText().toString(); if (socket.isConnected()) { if (!socket.isOutputShutdown()) { out.println(msg); } } } }); new Thread(this).start(); } public void ShowDialog(String msg) { new AlertDialog.Builder(this).setTitle("提示").setMessage(msg) .setPositiveButton("OK", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub } }).show(); } public void run() { try { while (true) { if(socket.isConnected()){ if(!socket.isInputShutdown()){ if ((content = in.readLine()) != null) { Log.i("TAG", "++ "+content); content += "/n"; mHandler.sendMessage(mHandler.obtainMessage()); }else{ } } } } } catch (Exception ex) { ex.printStackTrace(); } } public Handler mHandler = new Handler() { public void handleMessage(Message msg) { super.handleMessage(msg); Log.i("TAG", "-- "+msg); tv_msg.setText(tv_msg.getText().toString() + content); } }; }

    Java代码   <?xml version="1.0" encoding="utf-8"?>   <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"      android:orientation="vertical" android:layout_width="fill_parent"      android:layout_height="fill_parent">       <TextView android:id="@+id/TextView" android:singleLine="false"          android:layout_width="fill_parent"          android:layout_height="wrap_content" />       <EditText android:hint="content" android:id="@+id/EditText01"          android:layout_width="fill_parent"          android:layout_height="wrap_content">       </EditText>       <Button android:text="login" android:id="@+id/Button01"          android:layout_width="fill_parent"          android:layout_height="wrap_content">       </Button>       <Button android:text="send" android:id="@+id/Button02"          android:layout_width="fill_parent"          android:layout_height="wrap_content">       </Button>   </LinearLayout>  

    最新回复(0)