用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(); }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥50 三种调度算法报错 有实例
- ¥15 关于#python#的问题,请各位专家解答!
- ¥200 询问:python实现大地主题正反算的程序设计,有偿
- ¥15 smptlib使用465端口发送邮件失败
- ¥200 总是报错,能帮助用python实现程序实现高斯正反算吗?有偿
- ¥15 对于squad数据集的基于bert模型的微调
- ¥15 为什么我运行这个网络会出现以下报错?CRNN神经网络
- ¥20 steam下载游戏占用内存
- ¥15 CST保存项目时失败
- ¥20 java在应用程序里获取不到扬声器设备