java判断某个端口是否被占用


import java.io.IOException;
import java.net.ServerSocket;

/**
 * 监测端口是否占用
 */
public class PortUtil {
   
   public static int isUsed(int port) {
      ServerSocket s = null;
      try {
         s = new ServerSocket(port);
      } catch (IOException e) {
         if (e instanceof java.net.BindException) {
            return 1;
         }
      } finally {
         try {
            if(s!=null) {
               s.close();
            }
         } catch (Exception e) {
            //e.printStackTrace();
         }
      }
      return 0;
   }

   public static void main(String[] args) {
      System.out.println(isUsed(8888));
   }

}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
飞鸽传书 一、 背景描述 学习完网络(UDP)后,可以练习部署该项目。 二、 实现要求 模仿飞鸽传书完成飞鸽传书的大部分功能(主要是发送组播信息,传送文件等功能)。 三、 实现技术 a) 使用DatagramSocket、DatagramPacket传递UDP数据。 b) 使用MulticastSocket发送、接受组播消息。 c) 使用ServerSocket、Socket发送接受文件。 d) 使用DefaultTableModel定制需要的JTable。 e) 使用SystemTray、TrayIcon制作托盘图标。 四、 类图 a) 类图 b) 类图说明 类名称 IPMsg 类描述 飞鸽传书主程序。 包描述 main 函数描述 public static void main(String[] args) 类名称 FileData 类描述 此处加入类详细说明 包描述 data 函数描述 public String getFileName() public void setFileName(String fileName) public String getFilePath() public void setFilePath(String filePath) public boolean isFile() public void setFile(boolean isFile) public static FileData stringToFileData(String str) 根据字符串将信息转换为FileData对象。<br> 类名称 FSMessage 类描述 传递消息类。 包描述 data 函数描述 public FSMessage() public FSMessage(Integer type,Object object) public Object getObject() public void setObject(Object object) public Integer getType() public void setType(Integer type) 类名称 User 类描述 用户类。 包描述 data 函数描述 public String getHostName() public void setHostName(String hostName) public String getIpAdress() public void setIpAdress(String ipAdress) public String getLoginName() public void setLoginName(String loginName) public String getPriority() public void setPriority(String priority) public String getUserName() public void setUserName(String userName) public static User getSelf() 获取本机的User对象。 public String toString() public boolean equals(Object obj) public static User strToUser(String userStr) 根据字符串转换成User对象。 类名称 DirectoryChoose 类描述 目录选择对话框。 包描述 frm 函数描述 public DirectoryChoose(Component parent,String title,int mode) 打开文件选择对话框。 public DirectoryChoose(Component parent,String title) 保存文件对话框。 类名称 FileSendMonitor 类描述 文件传送监视器 包描述 frm 函数描述 public FileSendMonitor() private void init() 初始化面板。 public void actionPerformed(ActionEvent e) private class MyDefaultTableModel extends DefaultTableModel table的Model。 类名称 FileSendOK 类描述 文件传送成功。 包描述 frm 函数描述 public FileSendOK(Frame owner, boolean modal,String info) 文件传送成功构造函数。 private void init() 初始化面板。 public void actionPerformed(ActionEvent e) 按钮点击事件。 private void setInfo(String info) 设置当前传送成功的消息。 类名称 FillWidth 类描述 仅仅为了填充BorderLayout的宽度。 包描述 frm 函数描述 public FillWidth(int width,int height) 按照指定宽度和高度构造一个JPanel public FillWidth(int width,int height,Color color) 按照指定宽度和高度、颜色构造一个JPanel 类名称 IPMsgMainFrm 类描述 飞鸽传书的主窗体类。 包描述 frm 函数描述 public IPMsgMainFrm() private void initSystemTray() 初始化托盘图标。 private void init() 初始化面板。 public void actionPerformed(ActionEvent e) 按钮点击事件。 Public void tableChanged(TableModelEvent e) 内部类 private class MyWindowAdapter extends WindowAdapter 窗体关闭时触发事件。 public void windowClosing(WindowEvent e) 内部类 private class MyMouseAdapter extends MouseAdapter public void mouseClicked(MouseEvent e) 内部类 public class MyDefaultTableModel extends DefaultTableModel table的Model。 public boolean isCellEditable(int row, int column) public boolean addUser(User user) 如果行中存在user,则不添加,否则添加。 public User getRow(int n) 得到某行的User对象。 public boolean removeFromIP(String ip) 根据第3列及判断ip是否相同删除某行。 public String getIpAddress(int n) 获取某行所表示的ip地址。 内部类 private class MyDropTargetAdapter extends DropTargetAdapter 拖拽事件。 public void setSendFileList(String str) 设置传输文件列表。 public String getContent() 获取发送内容。 public String getSendList() 获取发送文件的列表。 public void clearSendList() 清空发送文件的列表。 public void clearTable() 清空table中内容。 public int[] getSelectRow() 获取选中的行。 public void clearChat() 清空聊天窗口。 类名称 ReceiveNewMSG 类描述 收到消息窗口。 包描述 frm 函数描述 public ReceiveNewMSG(String time,String from,String path,String content,String ip,int port) private void init() 初始化面板。 private void initSendFile(String path) 初始化接受文件的列表。 内部类 private class MyWindowAdapter extends WindowAdapter 窗体关闭时触发事件。 public void windowClosing(WindowEvent e) public void initBtnList() 初始化接受文件内容按钮。 public void actionPerformed(ActionEvent e) 按钮点击事件。 public void setSpeed(String speed) 设置下载速度。 private boolean sureStopSend() 确认终止当前传送。 类名称 SendListDialog 类描述 准备传送文件列表窗口。 包描述 frm 函数描述 public SendListDialog(Frame owner, boolean modal,boolean isShow) private void init() 初始化面板。 public void actionPerformed(ActionEvent e) 按钮点击事件。 public String getSendFile() 获取传送文件列表的文件名组成的字符串。 public String getSendPath() 获取发送的目录路径。 public String getSendList() 获取发送文件的列表。 public void clearSendList() 清空发送后的内容。 内部类 public class MyDefaultTableModel extends DefaultTableModel table的Model。 public boolean isCellEditable(int row, int column) public boolean addFile(File file) public boolean isExitFile(File file) public File getFile(int n) private void close() 窗体关闭方法。 内部类 private class MyWindowAdapter extends WindowAdapter 窗体关闭时触发事件。 类名称 ClientTCPThread 类描述 Socket网络客户端。<br> 包描述 logic 函数描述 public ClientTCPThread(ReceiveNewMSG newMSG,String ip,int port,String path,String savePath) public void run() 消息内容: 类型说明: 10:客户端发送文件地址 11:客户端发送的地址有误,不予响应 20:服务端发送相对目录地址到客户端,客户端接到信息创建目录 21:服务端发送相对文件地址到客户端,客户端接到信息创建文件 22:开始发送数据,发送文件长度 31:数据发送完成 40:客户端请求暂停发送 41:客户端请求继续发送 42:服务端取消发送 90:客户端退出 91:服务端退出 92:请求数据全部发送完成. private void sendOK() 传送完成。 private String getSpeed() 获取当前速度。 private void setSpeed() 设置当前速度。 private void dealBeginSend(Object obj) 开始发送数据。 private void closeFile() 关闭文件流。 public void stopSend() 停止传送。 public void pauseSend() 暂停传送。 public void continueSend() 继续发送。 private void createFile(Object obj) 创建文件。 private void createDirectory(Object obj) 创建目录。 private void dealServerQuit() 处理服务端退出。 private void closeClient() 断开连接。 内部类 private class WriteThread extends Thread 书写线程。 public WriteThread(FSMessage message) public void run() public boolean isRun() 类名称 ServerTCPThread 类描述 ServerSocket网络服务端。<br> 包描述 logic 函数描述 public void run() public void closeServer() 关闭到客户端的连接和服务器。 内部类 private class ClientThread extends Thread 客户端线程类。 public ClientThread(Socket client) public void run() 消息内容: 类型说明: 10:客户端发送文件地址 11:客户端发送的地址有误,不予响应 20:服务端发送相对目录地址到客户端,客户端接到信息创建目录 21:服务端发送相对文件地址到客户端,客户端接到信息创建文件 22:开始发送数据,发送文件长度 31:数据发送完成 40:客户端请求暂停发送 41:客户端请求继续发送 42:服务端取消发送 90:客户端退出 91:服务端退出 92:请求数据全部发送完成. 内部类 private class WriteThread extends Thread public WriteThread(Object obj) public void run() private void send(File file,String parent) throws IOException 发送文件或路径。 public void letClientQuit(int type,String msg) 使得客户端退出。 private void dealClientQuit() 客户端退出。 private void closeClient() 关闭到客户端的连接。 类名称 UDPThread 类描述 接受数据线程类。 包描述 logic 函数描述 public UDPThread() private void initNet() throws UnknownHostException,IOException 初始化网络。 public void run() 发送消息: 消息类型:[hk][10]消息内容 消息说明:数据必须以[hk]开头,第二个方括号表示消息的类型,此后表示消息内容 10:新用户上线,内容格式:用户名|主机名|IP地址|登录名|优先级 11:用户下线,内容格式:IP地址 20:对发有消息、文件,内容格式:[2008-10-09 星期四 13:53:51]<[类型]?路径?文件名|[类型][路径]文件名...多个用|分割>此后显示消息内容<br>文件类型说明:0:目录;1:文件 private void dealPacket(DatagramPacket packet) 处理数据包。 private void showContent(String content,String ip) 显示用户发送消息内容和目录。 private void telUserMyState(String begin,String ip) 告诉组播组内的其他用户我的状态。 private void telGroupIamOffline(String begin) 告诉组播组内的其他用户下线了。 private void telGroupIamOnline(String begin) 告诉组播组内的其他用户我的状态。 private void sendData(String content,String ip) 告诉组播组内的其他用户我上线了。 public void actionPerformed(ActionEvent e) 按钮事件。 private void addSendList(String ip) 向发送列表中添加向发送文件的列表。 public boolean isAllowSend(String ip,String path) 检测是否允许向某ip发送某文件。 public boolean deleteSendList(String ip,String path) 当发送完成某个文件后,从发送列表中删除以发送的文件。 private void showWrong(String msg,Exception e) 用JOptionPane显示错误的原因。 private void closeAll() 关闭所有开启IO。 private void closeUDP() 关闭UDP端口 private void closeIPMsg() 退出飞鸽传书。 内部类 private class MyWindowAdapter extends WindowAdapter 窗体关闭时触发事件。 public void windowClosing(WindowEvent e) 类名称 DateDeal 类描述 日期处理类。 包描述 tools 函数描述 public static String getCurrentDate() 将当前日期返回"yyyy-MM-dd"的字符串表现形式。 public static String getCurrentTime() 将当前日期返回"yyyy年MM月dd日 HH:mm:ss"的字符串表现形式。 public static String getDate(Date date) 将Date的日期返回"yyyy-MM-dd HH:mm:ss"的字符串表现形式。 public static String getDate2(Date date) 根据当前日期返回不同形式的字符串形式。 public static String getAllDate(Date date) 根据当前日期返回类似:2008-10-09 星期四 13:53:51 格式的日期。 类名称 DownSpeed 类描述 下载速度类。 包描述 tools 函数描述 public static String getSpeed(long totalData,long beginTime,long endTime) 根据下载的字节数和下载的时间返回合适的下载速度。 public static String getSpeed(long totalData) 返回1s中内传输的速度。 类名称 FileInfo 类描述 文件相关信息。 包描述 tools 函数描述 public static String getFileLength(File file) 根据文件返回文件的大小,如1MB。 public static String getFileLength(Long length) 根据long大小返回文件的大小,如2MB。 类名称 SetFont 类描述 设置字体类。 包描述 tools 函数描述 public static void setFont(Font font) 使用UIManager设置某些组件的缺省字体。 c) 效果图 五、 技术技巧提问 a) 使用组播获取组内其他用户,并显示到JTable上 继承DefaultTableModel里边定制添加用户方法 b) 给窗体添加拖拽功能 详细参考java.dnd包中的类 c) 添加托盘图标 参考SystemTray和TrayIcon类。 d) 传送文件夹时的递归 思路:如果是文件传送给对方,如果是文件夹,告诉对方创建文件夹,然后递归该文件夹即可。 e) 传送过程中的暂停、停止、继续功能的实现? 参考线程。 六、 附加说明
内容: 1 转换基本数据类型;运算符;计算阶乘; 2 复数类;java的参数传递;自定义形状类;类的加载顺序;方法和变量在继承时的覆盖和隐藏;排序类; 3数字 数字类;格式化数字;转换数字进制;生成随机数; 4数组和集合 使用Arrays类;动态调整数组长度;java为数据结构中的列表定义了一个接口类java.util.list同时提供了3个实现类,分别是ArrayList、Vector、LinkedList使用; 生成不重复的随机数序列;列表、集合与数组的互相转换;java为数据结构中的映射定义一个接口java.util.Map,有四个实现类HashMap Hashtable LinkedHashMap TreeMap用法和区别;对Map排序; 5字符串 使用String;判断一个字符串是否是合法的java标识符;使用StringBuffer;IP地址转化成整数,整数转化成IP地址; 十八为身份证格式验证;表达式解析器;字符串编码的转换;字符串对齐器;密码加密和验证(MD5); 制作命令行程序;使用正则表达式操作字符串;使用正则表达式验证电话号码的格式; 6java异常处理 throw和throws、try和catch;自定义异常类;使用finally;使用异常的技巧和原则; 7 IO输入输出流 获取文件的基本信息;列出指定目录下的文件,并可过滤文件;创建文件和目录;删除文件和目录;移动文件和目录; 复制文件和目录;一个简单的文件搜索器; 多种方式读文件内容, 按字节读取文件内容、按字符读取文件内容、按行读取文件内容、随机读取文件内容; 多种方式写文件内容, 按字节写文件内容、按字符写文件内容、按行写文件内容 ; 添加内容到文件结尾;文件的分割和合并;使用StreamTokenizer统计文件的字符数; 序列化和反序列化对象(将不长用的对象暂时持久化到文件中为对象的序列化,反之用时再把对象恢复到内存为反序列化); 控制对象的序列化和反序列化; 读jar包的资源文件;用zip格式压缩 和解压文件;操作Excel文件;操作Pdf文件;自定义日志文件类; 8线程 线程的启动 和停止;线程的互斥;线程的协作;线程join;生产者、消费者问题;线程的优先级;列出虚拟机中所有的线程;守护线程Daemon;线程池;一个死锁的例子; 定时器Timer:包括在指定时间执行任务,在指定时间之后执行任务以及在某个时间之后每隔时间段重复执行的任务; 9 Java GUI 日历:使用swing和awt实现一个图形化的日历可以查询星期、日期和年份信息(CalenderTrain.java);标准计算器(Callulator.java);更改组建外观,对日历设置几个显示外观(lookandfeel.java);自定义对话框DialogWindows;制作欢迎界面SplashWindow.java; 10 java图形 一个圆形按钮,当单击按钮时颜色发生变化CircleButton.java; 捕捉屏幕相当于键盘上的PrintScreen,CsreenCaputure.java; 缩放图片JPGTransforme.java; 2d图形,实现一个2d画板,能够画2d的线、圆和矩形,能指定图形的颜色并且能够撤销和恢复图形,command.java; 3d图形,Graphic3d.java; 一个时钟程序,能够显示星期和日期,变化背景和透明度Clock.java; 11 java多媒体 滚动的消息,实现一个简单的动画,具有滚动效果的文本消息RollingMessage.java; 三维弹球,BouncingB.java; 贪吃蛇游戏SnakeModel.java; java的声音处理,介绍java中如何处理声音,包括实现响铃,播放wav,au等音频文件,以及控制声音的大小和音量,Beep.java; 媒体播放器,JMFMediaPlayer.java; 12反射 是java程序开发的特征之一,允许java程序对自身进行检查,并能直接操作程序的内部属性; instanceof操作符,instanceof.java; 获取类的信息,ViewClassInfoJrame.java; 动态调用类的方法,CallMetod.java; 13、网络编程 获取URL信息,主要是使用URLConnection类,GetUrlInfo.java; web浏览器,webbrowser.java; 获取IP地址和域名,GetIpAddress.java; Http客户端,httpClient.java; 基本socket编程,介绍socket编程的基本步骤,启动socket服务器后,在打开socket的客户端,在输入框里输入消息发送到服务器,服务器受到消息后返回给客户端; Http服务器,httpsever.java; 一个支持多线程的服务器框架,GeneralServer.java; 代理服务器,ProxyServer.java; telnet客户端,访问系统的telnet服务实质上是与telnet服务建立socket连接,默认的telnet服务的端口是23,TelnetClient.java; UDP编程,包括收发udp报文; 聊天室服务器端,Chatserver.java;聊天室客户端,ChatClient.java; Ftp客户端,Mainframe.java; 14数据库 连接各种数据库DBconnector.java; 获得数据库和表的元数据Getmetadata.java; 查询和更新数据库OperateDatadb.java; 批处理,介绍如何一次执行一批sql语句,这些sql语句用插入、更新和删除等相关操作; 提交和回滚transaction.java使用PreparedStatement,动态执行sql语句,UsingPreparedStatement.java; 读写二进制数据,BinaryData.java; 读写Blob数据,blob数据常以二进制形式存储比较大的文件数据,如图片、视频文件等,本文介绍如何往数据库中读写blob数据,BlobData.java使用ResultSet更新数据库,UpdateWithResultSet.java使用RowSet,.UsingRowSet.java; 调用存储过程,StorageProcedure.java; 一个数据库连接池,JDBCInfo.java; 15 applet java可以编写两类程序,applications和applet,applications可以在控制台直接运行,与其他高级编程语言没有太大区别,而java的特色在于它具有编制小应用程序的功能,applet可以在internet上传输并在兼容java的web浏览器中运行的程序; applet时钟,Clock.java; 处理鼠标和键盘,用户在applet上按下键盘时,该实列能把按下的建显示出来,点击鼠标时能把鼠标事件和鼠标坐标显示出来,MouseAndKeyapplet.java; 英文打字小游戏,TypingGame.java; applet间通信; 汉诺塔游戏, 16 j2se5.0 新特性 自动装箱和拆箱; 新的for循环; 枚举类型; 静态导入; 格式化输出; 使用ProcessBuilder执行本地命令; 泛型编程; 监控和管理虚拟机;新的线程执行架构; 线程锁; 线程条件; 线程同步装置:semaphore countdownlatch cyclicbarrier exchanger; 17 java与xml 用dom处理xml文档; 用sax处理xml文档; 用xslt转换xml; 对象与xml的转换; 18 java mail 使用smtp协议发送简单邮件; 发送带附件的邮件; 给多人发送邮件; 使用pop3接收邮件; 19jsp与servlet 获取客户端的真实ip地址; jsp无刷新聊天室; 设置和读取cookie; 上传文件; 用servlet生成图形验证码; 用servlet实现分页查看数据库;
### 回答1: 你可以使用 Docker SDK for Python 中的 `Port` 类来判断容器端口是否占用。 具体来说,你可以使用 `Port.is_used()` 方法来判断容器端口是否占用。这个方法会返回一个布尔值,如果容器端口占用则返回 `True`,否则返回 `False`。 下面是一个示例代码,假设你想要检查的容器端口是 8080: ```python import docker # 创建 Docker 客户端 client = docker.DockerClient(base_url='unix://var/run/docker.sock') # 创建 Port 对象,表示要检查的端口 port = docker.types.Port('8080/tcp') # 使用 is_used() 方法判断端口是否占用 if port.is_used(client): print('端口 8080 被占用') else: print('端口 8080 没有被占用') ``` 请注意,要使用 `Port.is_used()` 方法,你需要先安装 Docker SDK for Python。你可以通过运行 `pip install docker` 来安装这个库。 ### 回答2: 使用docker库可以通过以下步骤来判断容器端口是否占用: 1. 首先需要导入docker库: ```python import docker ``` 2. 创建一个docker客户端对象: ```python client = docker.from_env() ``` 3. 获取当前运行的所有容器: ```python containers = client.containers.list() ``` 4. 遍历所有容器,获取每个容器的详细信息: ```python for container in containers: details = container.attrs ports = details['NetworkSettings']['Ports'] ``` 5. 判断特定端口是否占用: ```python port = '8080' # 要判断端口 if port in ports: print("端口已被占用") else: print("端口未被占用") ``` 完整代码示例: ```python import docker client = docker.from_env() containers = client.containers.list() for container in containers: details = container.attrs ports = details['NetworkSettings']['Ports'] port = '8080' # 要判断端口 if port in ports: print("端口已被占用") else: print("端口未被占用") ``` 此方法可用于判断容器中的特定端口是否占用,如果端口已被占用,则可以采取相应的措施,如重新分配端口或者停止占用端口的容器。 ### 回答3: 要使用docker库判断容器端口是否占用,可以通过以下步骤实现: 1. 导入docker库:在Python脚本中,首先需要导入docker库,可以使用以下代码:`import docker` 2. 创建Docker客户端:使用docker库的`from_env`方法创建一个Docker客户端实例,可以使用以下代码:`client = docker.from_env()` 3. 获取容器列表:使用Docker客户端的`containers.list()`方法获取所有正在运行的容器列表,可以使用以下代码:`containers = client.containers.list()` 4. 遍历容器列表:使用`for`循环遍历容器列表,检查每个容器的端口占用情况。 5. 获取容器端口映射:通过容器对象的`attrs`属性可以获取容器的属性信息,在这里我们可以获取端口映射信息。可以使用以下代码:`port_bindings = container.attrs['HostConfig']['PortBindings']` 6. 判断端口是否占用:根据获取到的端口映射信息,可以判断端口是否占用。可以使用以下代码判断端口是否占用:`if '80/tcp' in port_bindings: # 判断80端口是否占用` 7. 完整示例代码如下所示: ```python import docker client = docker.from_env() containers = client.containers.list() for container in containers: port_bindings = container.attrs['HostConfig']['PortBindings'] if '80/tcp' in port_bindings: print(f"容器 {container.id} 的80端口占用") ``` 通过以上步骤,我们可以使用docker库来判断容器端口是否占用,并进行相应的处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值