需求说明:需求大概是这样的红外线激活门禁,门禁激活PC,PC激活Android,Android扫描EPCID,这里的最终要求设备扫描的时间由PC决定,刚开始想法是直接在Android端搭建一个基于NanoHttpd的微型服务器,后来弄清楚之后发现简单多了

第一步:建立Android端的ServerSocket,并接受消息

创建一个ServerSocket,监听端口为9999,端口可为任意一个未被占用的端口

private static void startService() {    try {        // 创建ServerSocket        ServerSocket serverSocket = new ServerSocket(9999);        Log.e("xxx","--开启服务器,监听端口 9999--");        // 监听端口,等待客户端连接        while (true) {            Log.e("xxx","--等待客户端连接--");            Socket socket = serverSocket.accept(); //等待客户端连接            Log.e("xxx","得到客户端连接:" + socket);            startReader(socket);        }    } catch (IOException e) {        e.printStackTrace();    }}

====

接受客户端发送的消息

private static void startReader(final Socket socket) {    new Thread() {        @Override        public void run() {            DataInputStream reader;            try {                // 获取读取流                reader = new DataInputStream(socket.getInputStream());                while (true) {                    Log.e("xxx","*等待客户端输入*");                    // 读取数据                    String msg = reader.readUTF();                    Log.e("xxx","获取到客户端的信息:" + msg);                    //想客户端返回消息,可用来确认消息的到达                    DataOutputStream ps = new DataOutputStream(socket.getOutputStream());                    ps.writeUTF("已收到你发来的信息" + msg);                    ps.flush();                }            } catch (IOException e) {                e.printStackTrace();            }        }    }.start();}

以上2个方法就是一个简单的Android端的服务器,比较简短,看下注释应该不难理解

第二步,创建连接,发送消息

连接另一台作为服务端的Android设备

    new Thread() {        @Override        public void run() {            try {                socket = new Socket("192.168.7.125", 9999);                Log.e("xxx", "建立连接:" + socket);            } catch (IOException e) {                e.printStackTrace();            }        }    }.start();

发送消息

new Thread() {        @Override        public void run() {            try {                // socket.getInputStream()                DataOutputStream writer = new DataOutputStream(socket.getOutputStream());                writer.writeUTF("消息内容"); // 写一个UTF-8的信息                Log.e("xxx","发送消息");            } catch (IOException e) {                e.printStackTrace();            }        }    }.start();

这里得话我是用的另一台Android手机作为客户端,去连接服务端,并发送消息,需要注意的是前几次是不成功的错误信息为没有路由,后来ping一下模拟器的IP发现根本不通,所以先确保网络是连通的,且记得App需要网络权限,网络操作在子线程,还有实际情况中通常客户端会定时发送数据给服务端,确保链接没有断

更多相关文章

  1. Android(安卓)Socket 开发
  2. 【Android】直接连接SqlServer
  3. android通过webservice连接SQL数据库(一)服务器端
  4. Android(安卓)Wi-Fi Peer-to-Peer(Android的Wi-Fi P2P对等网络)
  5. 编程回忆之Android回忆(Android(安卓)Socket编程)
  6. Android(安卓)连接WIF获取的信息剖析
  7. Android如何连接和操作SQLite数据库
  8. 关于android的wifi信息
  9. Android(安卓)联网取数据

随机推荐

  1. android TextView控件文字下划线
  2. 超简单实现Android(安卓)屏幕截屏(需要系
  3. Android(安卓)动画实现
  4. android 获取view在屏幕中的位置
  5. Android: Open source FileManager
  6. android 之 GridView
  7. Android.mk简要说明
  8. Android(安卓)实现添加Icon到桌面功能
  9. Mac下Android的cocos2d-x配置
  10. android TextView 设置部分文字背景色和