用Android studio 建立一个tcp服务端,想设置成一次只允许一个客户端连接,
即accept建立一个连接之后,就把服务端socket关闭,不让其他客户端连接。
在处理完后,再将端口释放再次使用。
想知道使用Android studio怎么实现这样的功能。
1条回答 默认 最新
- 码上就疯 2022-10-19 07: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(); }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报Je perdre 2022-10-19 08:32当ServerSocket收到客户端连接之后,关闭ServerSocket之后,还可以与当前连接的客户端,做信息交互吗?互相继续发信息?
赞回复