Android基于客户端和服务器的Socket编程例子之Socket基础通讯--socket模型使用

原创 2012年03月29日 14:31:54
服务器端:
  1. package com;
  2. import java.io.BufferedReader;
  3. import java.io.BufferedWriter;
  4. import java.io.IOException;
  5. import java.io.InputStreamReader;
  6. import java.io.OutputStreamWriter;
  7. import java.io.PrintWriter;
  8. import java.net.ServerSocket;
  9. import java.net.Socket;
  10. import java.util.ArrayList;
  11. import java.util.List;
  12. import java.util.concurrent.ExecutorService;
  13. import java.util.concurrent.Executors;
  14. /**
  15. * com Server
  16. *
  17. * @author Aina.huang E-mail: 674023920@qq.com
  18. * @version 创建时间:2010 Jul 14, 2010 10:45:35 AM 类说明
  19. */
  20. public class Main {
  21. private static final int PORT = 9999;// 端口监听
  22. private List<Socket> mList = new ArrayList<Socket>();// 存放客户端socket
  23. private ServerSocket server = null;
  24. private ExecutorService mExecutorService = null;// 线程池
  25. /**
  26.   * @param args
  27.   */
  28. public static void main(String[] args) {
  29.   // TODO Auto-generated method stub
  30.   new Main();
  31. }
  32. public Main() {
  33.   try {
  34.    server = new ServerSocket(PORT);
  35.    mExecutorService = Executors.newCachedThreadPool();// 创建一个线程池
  36.    System.out.println("Server Start...");
  37.    Socket client = null;
  38.    while (true) {
  39.     client = server.accept();
  40.     mList.add(client);
  41.     mExecutorService.execute(new Service(client));// 开启一个客户端线程.
  42.    }
  43.   } catch (Exception ex) {
  44.    ex.printStackTrace();
  45.   }
  46. }
  47. public class Service implements Runnable {
  48.   private Socket socket;
  49.   private BufferedReader in = null;
  50.   private String msg = "";
  51.   public Service(Socket socket) {
  52.    this.socket = socket;
  53.    try {
  54.     in = new BufferedReader(new InputStreamReader(socket
  55.       .getInputStream()));
  56.     msg = "user:" + this.socket.getInetAddress() + " come total:"
  57.       + mList.size();
  58.     this.sendmsg();
  59.    } catch (IOException e) {
  60.     e.printStackTrace();
  61.    }
  62.   }
  63.   public void run() {
  64.    // TODO Auto-generated method stub
  65.    try {
  66.     while (true) {
  67.      if ((msg = in.readLine()) != null) {
  68.       if (msg.equals("exit")) {
  69.        System.out.println("sssssssssss");
  70.        mList.remove(socket);
  71.        in.close();
  72.        msg = "user:" + socket.getInetAddress()
  73.          + " exit total:" + mList.size();
  74.        socket.close();
  75.        this.sendmsg();
  76.        break;
  77.       } else {
  78.        msg = socket.getInetAddress() + " : " + msg;
  79.        this.sendmsg();
  80.       }
  81.      }
  82.     }
  83.    } catch (Exception ex) {
  84.     System.out.println("server 读取数据异常");
  85.     ex.printStackTrace();
  86.    }
  87.   }
  88.   /**
  89.    * 发送消息给所有客户端
  90.    */
  91.   public void sendmsg() {
  92.    System.out.println(msg);
  93.    int num = mList.size();
  94.    for (int i = 0; i < num; i++) {
  95.     Socket mSocket = mList.get(i);
  96.     PrintWriter pout = null;
  97.     try {
  98.      pout = new PrintWriter(new BufferedWriter(
  99.        new OutputStreamWriter(mSocket.getOutputStream())),
  100.        true);
  101.      pout.println(msg);
  102.     } catch (IOException e) {
  103.      e.printStackTrace();
  104.     }
  105.    }
  106.   }
  107. }
  108. }



接下来是客服端程序:
  1. package com.Aina.Android;
  2. import java.io.BufferedReader;
  3. import java.io.BufferedWriter;
  4. import java.io.InputStreamReader;
  5. import java.io.OutputStreamWriter;
  6. import java.io.PrintWriter;
  7. import java.net.Socket;
  8. import android.app.Activity;
  9. import android.app.AlertDialog;
  10. import android.content.DialogInterface;
  11. import android.os.Bundle;
  12. import android.os.Handler;
  13. import android.os.Message;
  14. import android.util.Log;
  15. import android.view.View;
  16. import android.widget.Button;
  17. import android.widget.EditText;
  18. import android.widget.TextView;
  19. public class Test extends Activity implements Runnable {
  20. /** Called when the activity is first created. */
  21. private TextView tv_msg = null;
  22. private EditText ed_msg = null;
  23. private Button btn_send = null;
  24. private Button btn_login = null;
  25. private static final String HOST = "192.168.0.132";
  26. private static final int PORT = 9999;
  27. private Socket socket = null;
  28. private BufferedReader in = null;
  29. private PrintWriter out = null;
  30. private String content = "";
  31. @Override
  32. public void onCreate(Bundle savedInstanceState) {
  33.   super.onCreate(savedInstanceState);
  34.   setContentView(R.layout.main);
  35.   tv_msg = (TextView) this.findViewById(R.id.TextView);
  36.   ed_msg = (EditText) this.findViewById(R.id.EditText01);
  37.   btn_login = (Button) this.findViewById(R.id.Button01);
  38.   btn_send = (Button) this.findViewById(R.id.Button02);
  39.   try {
  40.    socket = new Socket(HOST, PORT);
  41.    in = new BufferedReader(new InputStreamReader(socket
  42.      .getInputStream()));
  43.    out = new PrintWriter(new BufferedWriter(
  44.      new OutputStreamWriter(socket.getOutputStream())),
  45.      true);
  46.   } catch (Exception ex) {
  47.    ex.printStackTrace();
  48.    ShowDialog("登陆异常:" + ex.getMessage());
  49.   }
  50.   btn_send.setOnClickListener(new Button.OnClickListener() {
  51.    public void onClick(View v) {
  52.     // TODO Auto-generated method stub
  53.     String msg = ed_msg.getText().toString();
  54.     if (socket.isConnected()) {
  55.      if (!socket.isOutputShutdown()) {
  56.       out.println(msg);
  57.      }
  58.     }
  59.    }
  60.   });
  61.   new Thread(this).start();
  62. }
  63. public void ShowDialog(String msg) {
  64.   new AlertDialog.Builder(this).setTitle("提示").setMessage(msg)
  65.     .setPositiveButton("OK", new DialogInterface.OnClickListener() {
  66.      public void onClick(DialogInterface dialog, int which) {
  67.       // TODO Auto-generated method stub
  68.      }
  69.     }).show();
  70. }
  71. public void run() {
  72.   try {
  73.    while (true) {
  74.     if(socket.isConnected()){
  75.      if(!socket.isInputShutdown()){
  76.       if ((content = in.readLine()) != null) {
  77.        Log.i("TAG", "++ "+content);
  78.        content += "\n";
  79.        mHandler.sendMessage(mHandler.obtainMessage());
  80.       }else{
  81.       
  82.       }
  83.      }
  84.     }
  85.     
  86.    }
  87.   } catch (Exception ex) {
  88.    ex.printStackTrace();
  89.   }
  90. }
  91. public Handler mHandler = new Handler() {
  92.   public void handleMessage(Message msg) {
  93.    super.handleMessage(msg);
  94.    Log.i("TAG", "-- "+msg);
  95.    tv_msg.setText(tv_msg.getText().toString() + content);
  96.   }
  97. };
  98. }


接下来是XML文件布局。
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:orientation="vertical" android:layout_width="fill_parent"
  4. android:layout_height="fill_parent">
  5. <TextView android:id="@+id/TextView" android:singleLine="false"
  6.   android:layout_width="fill_parent"
  7.   android:layout_height="wrap_content" />
  8. <EditText android:hint="content" android:id="@+id/EditText01"
  9.   android:layout_width="fill_parent"
  10.   android:layout_height="wrap_content">
  11. </EditText>
  12. <Button android:text="login" android:id="@+id/Button01"
  13.   android:layout_width="fill_parent"
  14.   android:layout_height="wrap_content">
  15. </Button>
  16. <Button android:text="send" android:id="@+id/Button02"
  17.   android:layout_width="fill_parent"
  18.   android:layout_height="wrap_content">
  19. </Button>
  20. </LinearLayout> 

C++ socket编程 实现服务端与客户端的通讯

 服务器端程序: [cpp] view plaincopy // Serv...
  • u011555996
  • u011555996
  • 2017年04月22日 09:31
  • 916

socket通信之一:TCP/IP模型与socket

这段时间看了一些网络相关的东西,这里做一个总结吧。参考了很多文章的内容,因为我本身是对着书并且参考网络资源在学习的,在最后会一一列出文章的地址。 这篇文章主要介绍TCP/IP的一些基本知识,...
  • u012501459
  • u012501459
  • 2015年09月02日 14:44
  • 2680

Linux Socket编程:基于TCP/IP的客户端与服务端通讯实例

Linux Socket编程:基于TCP/IP的客户端与服务端通讯实例服务端代码#include #include #include #include #include #include i...
  • techping
  • techping
  • 2017年03月29日 17:49
  • 1080

C#做服务器,Android做客户端,完成Socket通信

洗洗睡了,明天来写~
  • yuyu414
  • yuyu414
  • 2014年02月08日 22:08
  • 4322

一个 Java 的 Socket 服务器和客户端通信的例子

一个 HelloWord 级别的 Java Socket 通信的例子。通讯过程:         先启动 Server 端,进入一个死循环以便一直监听某端口是否有连接请求。然后运行 Client 端...
  • fjseryi
  • fjseryi
  • 2013年10月13日 14:04
  • 20561

Socket通信之客户端和服务器对话

科技改变时代……文件复制//文件复制 File f=new File("d://11.txt"); File fcopy=new File("d://22.txt");...
  • mr_lihaimeng
  • mr_lihaimeng
  • 2015年08月02日 21:01
  • 1780

socket实现广播和客户端到客户端的通信

通过Socket和多线程实现广播和客户端到客户端的通信,私聊时有离线消息。  1.服务器端  Java代码   package com.gjy.socket;      ...
  • BianChengNinHao
  • BianChengNinHao
  • 2014年01月05日 21:35
  • 1165

java与c语言之间的socket通信—c客户端java服务器端

写在前面的声明:程序例子均运行在ubuntu(是一个以桌面应用为主的Linux操作系统)上。当然你也可以把java运行在其它系统上,这里只是为了方便。 上一篇文章已经说明了关于socket的一些知识...
  • luohuaishao
  • luohuaishao
  • 2013年12月21日 15:36
  • 5019

安卓手机socket通信(服务端和客户端)

socket通信
  • u014388322
  • u014388322
  • 2015年01月22日 11:08
  • 5806

socket编程 -- epoll模型服务端/客户端通信的实现

本例实现如下功能: 支持多客户端与一个服务端进行通信,客户端给服务端发送字符串数据,服务端将字符串中小写转为大写后发送回客户端,客户端打印输出经转换后的字符串。 例如:发送abcde,打印输出AB...
  • y396397735
  • y396397735
  • 2016年02月17日 14:43
  • 2388
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android基于客户端和服务器的Socket编程例子之Socket基础通讯--socket模型使用
举报原因:
原因补充:

(最多只允许输入30个字)