1、创建服务器端可以是Web或Java项目,创建类TcpServer:

/** * @描述 服务器端 * @项目名称 SocketServer * @包名 com.java.socket.server * @类名 TCPServer * @author chenlin * @date 2012年6月26日 下午4:36:27 * @version 1.0 */@SuppressWarnings("all")public class TCPServer {    public static void main(String[] args) {        int port = 10002;        try {            ServerSocket server = new ServerSocket(port);            while (true) {                // 获得客户端连接                // 阻塞式方法                System.out.println("准备阻塞...");                final Socket client = server.accept();                System.out.println("阻塞完成...");                new Thread(new Runnable() {                    @Override                    public void run() {                        try {                            // 输入流,为了获取客户端发送的数据                            InputStream is = client.getInputStream();                            //得到输出流                            OutputStream out = client.getOutputStream();                            byte[] buffer = new byte[1024];                            int len = -1;                            System.out.println("准备read...");                            while ((len = is.read(buffer)) != -1) {                                String text = new String(buffer, 0, len);                                System.out.println(text);                                //回复信息                                out.write("收到信息,over".getBytes());                            }                        } catch (Exception e) {                            e.printStackTrace();                        }                    }                }).start();            }        } catch (Exception e) {            e.printStackTrace();        }    }

2、创建手机端,先写个Socket管理类

/** * @描述 使用socket实现长连接 * @项目名称 App_Chat * @包名 com.android.chat.utils * @类名 TcpUtil * @author chenlin * @date 2012年6月26日 下午4:06:43 * @version 1.0 */public class TcpManager {    protected static final int STATE_FROM_SERVER_OK = 0;    private static String dsName = "192.168.31.239";    private static int dstPort = 10002;    private static Socket socket;    private static TcpManager instance;    private TcpManager() {    };    public static TcpManager getInstance() {        if (instance == null) {            synchronized (TcpManager.class) {                if (instance == null) {                    instance = new TcpManager();                }            }        }        return instance;    }    /**     * 连接     *      * @return     */    public boolean connect(final Handler handler) {        if (socket == null || socket.isClosed()) {            new Thread(new Runnable() {                @Override                public void run() {                    try {                        socket = new Socket(dsName, dstPort);                    } catch (UnknownHostException e) {                        e.printStackTrace();                    } catch (IOException e) {                        throw new RuntimeException("连接错误: " + e.getMessage());                    }                    try {                        // 输入流,为了获取客户端发送的数据                        InputStream is = socket.getInputStream();                        byte[] buffer = new byte[1024];                        int len = -1;                        while ((len = is.read(buffer)) != -1) {                            final String result = new String(buffer, 0, len);                            Message msg = Message.obtain();                            msg.obj = result;                            msg.what = STATE_FROM_SERVER_OK;                            handler.sendMessage(msg);                        }                    } catch (IOException e) {                        e.printStackTrace();                    }                }            }).start();        }        return true;    }    /**     * 发送信息     *      * @param content     */    public void sendMessage(String content) {        OutputStream os = null;        try {            if (socket != null) {                os = socket.getOutputStream();                os.write(content.getBytes());                os.flush();            }        } catch (IOException e) {            throw new RuntimeException("发送失败:" + e.getMessage());        }         //此处不能关闭//      finally {//          if (os != null) {//              try {//                  os.close();//              } catch (IOException e) {//                  throw new RuntimeException("未正常关闭输出流:" + e.getMessage());//              }//          }//      }    }    /**     * 关闭连接     */    public void disConnect() {        if (socket != null && !socket.isClosed()) {            try {                socket.close();            } catch (IOException e) {                throw new RuntimeException("关闭异常:" + e.getMessage());            }            socket = null;        }    }}

3、创建页面:

/** * @描述         Socket通信简易客户端 * @项目名称      SocketClient * @包名         org.java.socket.client * @类名         ClientActivity * @author      chenlin * @date        2012年6月26日 下午4:43:06 * @version     1.0  */public class ClientActivity extends Activity {    private EditText mEtContent;    private TcpManager manager;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        manager = TcpManager.getInstance();        manager.connect(mHandler);    }    private Handler mHandler = new Handler(){        public void handleMessage(android.os.Message msg) {            switch (msg.what) {            case TcpManager.STATE_FROM_SERVER_OK:                String result = (String) msg.obj;                ToastUtil.show(ClientActivity.this, result);                break;            default:                break;            }        };    };    /**     * 发送信息     * @param view     */    public void clickMessage(View view){        mEtContent = (EditText)findViewById(R.id.et);        if (mEtContent.getText()!= null) {            manager.sendMessage(mEtContent.getText().toString());        }    }    @Override    protected void onDestroy() {        manager.disConnect();        super.onDestroy();    }}

4、测试:
先运行服务器
然后启动客户端,按“发送消息”按钮,看服务器端是否打印了数据

———————————————————————
(java 架构师全套教程,共760G, 让你从零到架构师,每月轻松拿3万)
有需求者请进站查看,非诚勿扰

https://item.taobao.com/item.htm?spm=686.1000925.0.0.4a155084hc8wek&id=555888526201

01.高级架构师四十二个阶段高
02.Java高级系统培训架构课程148课时
03.Java高级互联网架构师课程
04.Java互联网架构Netty、Nio、Mina等-视频教程
05.Java高级架构设计2016整理-视频教程
06.架构师基础、高级片
07.Java架构师必修linux运维系列课程
08.Java高级系统培训架构课程116课时
(送:hadoop系列教程,java设计模式与数据结构, Spring Cloud微服务, SpringBoot入门)
——————————————————————–

更多相关文章

  1. Android(安卓)Wifi开发
  2. Android(安卓)IQ包 发送 基于XMPP
  3. Android调用手机新浪微博客户端分享
  4. Android(安卓)Handler(四)
  5. Android(安卓)USB Host与HID通讯(二)
  6. SpringBoot webSocket 发送广播、点对点消息,Android接收
  7. Android(安卓)中文API (70) —— BluetoothDevice[蓝牙]
  8. Android下的BLE编程遇到的一些BUG
  9. Android(安卓)连接Wifi和创建Wifi热点的实例

随机推荐

  1. Android群英传知识点回顾——第九章:Andro
  2. http://www.eoeandroid.com/blog-546380-
  3. Android Studio Error:Execution failed
  4. 第一个app-进阶二::1、EditText退格::2、焦点
  5. Android使用TextView,设置onClick属性无效
  6. android基础(一) View与六大布局(上)
  7. Android系统自带样式Theme总结
  8. android获取手机唯一识别号
  9. Android 扫描SDCard上的音乐文件以及监听
  10. 优雅的处理Android数据库升级的问题