基于Socket的Android与PC简单聊天应用的实现

实现Socket聊天其实质就是一个Socket的双向通信,分为服务端和客户端,都是 需要得到一个socket对象,通过socket获取流得到我们需要的数据。
标准的写法都是开启一个while(true)的线程不断的去监听接收消息,另外启一个线程去发送消息。为了方便演示效果这里写了一个Winform应用作为服务端。客户端和服务端的代码基本上完全相同。下面给出
android收发数据主要代码。

接收数据:


    private class ReceiveThread extends Thread {
        private InputStream inStream = null;
        private byte[] buffer;
        private String str = null;
        ReceiveThread(Socket socket) {
            try {
                inStream = socket.getInputStream();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        @Override
        public void run() {
            while (true) {
                buffer = new byte[512];
                try {
                    inStream.read(buffer);//读流方式应该和发送一致
                                        //(read、readUTF),否则阻塞
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                try {
                    str = new String(buffer, "UTF-8").trim();
                } catch (UnsupportedEncodingException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                if (buffer.length > 0) {
                    Message msg = Message.obtain();
                    msg.obj = str;
                    msg.what = MSG_REC;
                    myHandler.sendMessage(msg);//将获取的数据发送出去
                }
            }
        }
    }

发送数据:

    Runnable sendThread = new Runnable() {

        @Override
        public void run() {
            // TODO Auto-generated method stub
            byte[] sendBuffer = null;
            try {
                sendBuffer = strMessage.getBytes("UTF-8");
            } catch (UnsupportedEncodingException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
            try {
                outStream = socket.getOutputStream();
                Message msg = Message.obtain();
                msg.obj = strMessage;
                msg.what = MSG_SEND;
                myHandler.sendMessage(msg);

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

来看看效果吧:
android:


android聊天截图

PC:

PC端聊天截图

源码下载,点击这里
http://download.csdn.net/detail/mythace/9600070


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值