用Android studio 建立一个tcp服务端,想设置成一次只允许一个客户端连接,
即accept建立一个连接之后,就把服务端socket关闭,不让其他客户端连接。
在处理完后,再将端口释放再次使用。
想知道使用Android studio怎么实现这样的功能。
android studio tcp 只允许一个客户端连接
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
- 码上就疯 2022-10-19 15:14关注
private ServerSocket mServerSocket; private Socket mSocket; private void openService() { try { mServerSocket = null; mServerSocket = new ServerSocket(5000);//端口号5000 } catch (Exception e) { e.printStackTrace(); log("服务开启失败"); return; } log("服务开启成功"); //启动服务线程 SocketAcceptThread socketAcceptThread = new SocketAcceptThread(); socketAcceptThread.start(); } /** * 连接线程 * 得到Socket */ class SocketAcceptThread extends Thread { @Override public void run() { try { //等待客户端的连接,Accept会阻塞,直到建立连接, //所以需要放在子线程中运行 mSocket = mServerSocket.accept(); mServerSocket.close();//关键是这一步,当ServerSocket收到客户端连接之后,关闭ServerSocket //启动消息接收线程 log("socket开启中"); startReaderService(mSocket); log("socket开启成功"); } catch (IOException e) { e.printStackTrace(); log("socket开启失败"); } } } /** * 从参数的Socket里获取最新的消息 */ private void startReaderService(final Socket socket) { new Thread() { @Override public void run() { runOnUiThread(new Runnable() { @Override public void run() { // MsgInfo msgInfo = new MsgInfo(2, mServerIP, "开启成功"); // msgInfo.setCreatDate(System.currentTimeMillis()); // msgInfo.setCreatTime(getDateToString(msgInfo.getCreatDate())); // mAdapter.addData(msgInfo); mBinding.btSend.setEnabled(true); } }); DataInputStream reader; try { // 获取读取流 reader = new DataInputStream(socket.getInputStream()); while (isOpenService) { // 读取数据 String msg = reader.readUTF(); log("客户端的信息:" + msg); //发消息更新UI Message message = new Message(); message.what = 1; message.obj = msg; serviceHandler.sendMessage(message); try { SystemClock.sleep(100); } catch (Exception e) { e.printStackTrace(); } } } catch (Exception e) { log("断开连接导致异常"); e.printStackTrace(); if (mSocket != null) { try { mSocket.close(); } catch (IOException ioException) { ioException.printStackTrace(); } finally { mSocket = null; } openService();//当前客户端断开连接之后,重新开启ServerSocket,等待连接 } } } }.start(); }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 一个服务器已经有一个系统了如果用usb再装一个系统,原来的系统会被覆盖掉吗
- ¥15 使用esm_msa1_t12_100M_UR50S蛋白质语言模型进行零样本预测时,终端显示出了sequence handled的进度条,但是并不出结果就自动终止回到命令提示行了是怎么回事:
- ¥15 前置放大电路与功率放大电路相连放大倍数出现问题
- ¥30 关于<main>标签页面跳转的问题
- ¥80 部署运行web自动化项目
- ¥15 腾讯云如何建立同一个项目中物模型之间的联系
- ¥30 VMware 云桌面水印如何添加
- ¥15 用ns3仿真出5G核心网网元
- ¥15 matlab答疑 关于海上风电的爬坡事件检测
- ¥88 python部署量化回测异常问题