Android作为服务端,PC推送消息
16lz
2022-05-08
需求说明:需求大概是这样的红外线激活门禁,门禁激活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需要网络权限,网络操作在子线程,还有实际情况中通常客户端会定时发送数据给服务端,确保链接没有断
更多相关文章
- Android(安卓)Socket 开发
- 【Android】直接连接SqlServer
- android通过webservice连接SQL数据库(一)服务器端
- Android(安卓)Wi-Fi Peer-to-Peer(Android的Wi-Fi P2P对等网络)
- 编程回忆之Android回忆(Android(安卓)Socket编程)
- Android(安卓)连接WIF获取的信息剖析
- Android如何连接和操作SQLite数据库
- 关于android的wifi信息
- Android(安卓)联网取数据