界面部分:

import java.awt.Color;

import java.awt.Container;

import java.awt.FlowLayout;

import java.awt.event.WindowAdapter;

import java.awt.event.WindowEvent;

import javax.swing.JDialog;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JPanel;

import javax.swing.JTextArea;

public class Scaner extends JFrame {

private

static final long serialVersionUID = 1L;

public

static JCoolButton submit = new JCoolButton();

public

static JCoolButton stop = new JCoolButton();

public

static JTextArea ip = new JTextArea();

public

static JTextArea min = new JTextArea();

public

static JLabel to = new JLabel("至");

public

static JTextArea max = new JTextArea();

public

static JTextArea result = new JTextArea();

public

static JLabel ipadd = new JLabel("IP地址:");

public

static JLabel port = new JLabel("端口:");

public

static JDialog errInf = new JDialog();

public

static JLabel inf = new JLabel("端口号必须为0至65535的整数");

public

void launchframe() {

JPanel jp = new JPanel();

jp.setLayout(null);

jp.setOpaque(true);

jp.setBackground(Color.LIGHT_GRAY);

setSize(480, 320);

setLocation(450, 250);

setTitle("多线程局域网TCP端口扫描");

ipadd.setBounds(10, 30, 50, 25);

ip.setBounds(55, 30, 100, 25);

port.setBounds(160, 30, 35, 25);

min.setBounds(195, 30, 35, 25);

to.setBounds(235, 30, 15, 25);

max.setBounds(255, 30, 35, 25);

submit.setBounds(310, 20, 60, 35);

submit.setText("确定");

submit.addActionListener(new submitAction());

stop.setBounds(380, 20, 60, 35);

stop.setText("停止");

stop.addActionListener(new cancelAction());

result.setBounds(10, 60, 430, 210);

result.setLineWrap(true);

result.setEditable(false);

Container dPanel = errInf.getContentPane();

errInf.setSize(200, 80);

errInf.setLocation(550, 300);

dPanel.setLayout(new FlowLayout(FlowLayout.CENTER));

dPanel.add(inf);

jp.add(ipadd);

jp.add(ip);

jp.add(port);

jp.add(min);

jp.add(to);

jp.add(max);

jp.add(submit);

jp.add(stop);

jp.add(result);

add(jp);

addWindowListener(new WindowAdapter() {

public void windowClosing(WindowEvent e) {

System.exit(0);

}

});

setVisible(true);

}

public

static void main(String[] args) {

new Scaner().launchframe();

}

}

线程部分:

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.io.IOException;

import java.net.InetAddress;

import java.net.Socket;

import java.util.*;

class TCPThread extends Thread {

public

static InetAddress hostAddress;

public

static boolean runFlag = true;

public

static int iport = Integer.parseInt(Scaner.min.getText());

public

static int aport = Integer.parseInt(Scaner.max.getText());

List ports = new

ArrayList();

Set s = new

HashSet();

private

int threadnum;

public

TCPThread() {

}

public

TCPThread(String name, int threadnum) {

super(name);

this.threadnum = threadnum;

}

public

static List

removeDuplicateWithOrder(List

list) {

Set set = new

HashSet();

List newList = new

ArrayList();

for

(Iterator iter =

list.iterator(); iter.hasNext();) {

Object element = iter.next();

if (set.add((Integer) element))

newList.add((Integer) element);

}

return

newList;

}

public

void run() {

int i = 0;

Socket TCPSocket;

runFlag = true;

for (i = iport + threadnum; i < aport; i += 200)

{

if (runFlag) {

try {

hostAddress = InetAddress

.getByName(Scaner.ip.getText());

TCPSocket = new Socket(hostAddress, i);

TCPSocket.close();

ports.add(i);

for(Iterator iter =

TCPThread.removeDuplicateWithOrder(ports).iterator();iter.hasNext();){

Scaner.result.append(" " + iter.next());

}

} catch (IOException e) {

}

}

}

runFlag = false;

if(i == aport){;

Scaner.result.append("\n" + "扫描结束...");

}

}

}

class submitAction implements ActionListener {

public

void actionPerformed(ActionEvent a) {

if (Integer.parseInt(Scaner.min.getText()) < 0

|| Integer.parseInt(Scaner.max.getText()) > 65535)

{

Scaner.errInf.setVisible(true);

};

Scaner.result.setText("开始扫描:");

synchronized (this) {

for (int i = 0; i < 200; i++) {

new TCPThread("T" + i, i).start();

}

}

}

}

class cancelAction implements ActionListener {

public

void actionPerformed(ActionEvent a) {

TCPThread.runFlag = false;

}

}

按钮变换部分:

import javax.swing.JButton;

import java.awt.Cursor;

import java.awt.event.*;

public class JCoolButton extends JButton {

private

static final long serialVersionUID = 1L;

public

JCoolButton() {

super();

init();

}

public

void init() {

setBorderPainted(false);

addMouseListener(new MouseAdapter() {

@Override

public void mouseEntered(MouseEvent arg0) {

setBorderPainted(true);

setCursor(new Cursor(Cursor.HAND_CURSOR));

}

@Override

public void mouseExited(MouseEvent arg0) {

setBorderPainted(false);

}

});

}

}

java 扫描tcp端口号_多线程TCP端口扫描 java实现相关推荐

  1. 串口发送tcp数据 源端口号_三分钟基础知识:用动画给面试官解释 TCP 三次握手过程...

    作者 |  小鹿 来源 |  小鹿动画学编程 写在前边 TCP 三次握手过程对于面试是必考的一个,所以不但要掌握 TCP 整个握手的过程,其中有些小细节也更受到面试官的青睐. 对于这部分掌握以及 TC ...

  2. 如何修改mysql占用的端口号_修改mysql端口号(mysql的端口号)

    修改mysql端口号(mysql的端口号) 2020-05-07 22:12:00 共10个回答 如何查看mysql默认端口号和修改端口号 登录mysql,使用命令showglobalvariable ...

  3. mysql数据库怎么查看端口号_怎么查看数据库端口号(mysql怎么查看端口号)

    怎么查看数据库端口号(mysql怎么查看端口号) 2020-05-08 11:20:02 共9个回答 如何查看自己数据库的端口号 navicat,找到服务器,右键->连接属性,就找到端口号了 如 ...

  4. ipv6 端口号_计算机网络之IP、MAC、端口号、子网掩码、默认网关、DNS

    IP地址 IP地址是 Internet Protocol Address 的缩写,译为"网际协议地址". 目前大部分软件使用 IPv4 地址,但 IPv6 也正在被人们接受,尤其是 ...

  5. tomcat中间件的默认端口号_tomcat端口号修改(tomcat默认端口号是多少)

    tomcat端口号修改(tomcat默认端口号是多少) 2020-05-07 22:25:25 共10个回答 怎么改tomcat的端口号? 修改tomcat端口号的方法:修改Server.xml文件, ...

  6. xserver服务端口号_服务器怎么开通端口号

    dns端口号的服务器如何开启端口 答:在架设dns服务器时,linux系统需要在防火墙规则中内加入UDP端口53的外网访问,windows系统需要在防火墙里添加端口,选择UDP,输入端口号53,如果使 ...

  7. ldap协议端口号_什么是LDAP协议端口号? 比较LDAP端口389和636

    ldap协议端口号 Lightweight Directory Access Protocol or LDAP is used to authenticate and authorize users. ...

  8. rtsp端口号_常见网络摄像机(摄像头)的端口及RTSP地址

    海康威视 默认IP地址:192.168.1.64/DHCP 用户名admin 密码自己设 端口:"HTTP 端口"(默认为 80)."RTSP 端口"(默认为 ...

  9. mysql有多少个端口号_查看mysql端口号(mysql端口号是多少)

    查看mysql端口号(mysql端口号是多少) 2020-05-07 22:11:45 共10个回答 如何查看mysql的端口号 1使用命令showglobalvariableslike'port'; ...

最新文章

  1. Java初学者都应该搞懂的六个问题
  2. 基于AIO的CS聊天室
  3. ADO.NET Entity Framework如何:手动配置实体框架项目
  4. Android开发之部分字符串可实现超链接点击事件的方法
  5. opencv 检测几何图形_使用OpenCV + ConvNets检测几何形状
  6. 卡通驱动项目ThreeDPoseTracker——关键点平滑方案解析
  7. 12岁上大学,23岁获博士学位,这位天才科学家正式加盟清华
  8. ServerSocketChannel的使用例子
  9. 通过vmstat命令判断服务器瓶颈
  10. 如何将MySQL卸载干净?
  11. 音视频传输协议之 RTMP
  12. led灯光衰怎么解决_LED路灯光衰问题解决方法
  13. MATLAB生成随机数
  14. SAP HANA数据获取(data provisioning ) - SLT
  15. Machine Learning-数学基础2
  16. 【有利可图网】PS实战系列:简单易学的PS把照片转素描效果
  17. word文档无法保存问题
  18. 搞模具的想转行学计算机,为什么很少人去做模具设计学徒,看看这里你就明白了!...
  19. 小彭玉的扫荡食堂计划
  20. IDEA Translation翻译插件

热门文章

  1. Python培训教程分享:如何实现pygame的初始化和退出操作?
  2. mac通过tree源码编译安装tree
  3. No.6 PHP的基本配置与优化
  4. 用 Handler 轻松实现专属Android定时器
  5. CHIL-SQL-MIN() 函数
  6. Android Studio快捷键每日一练(2)
  7. tomcat配置tomcat-redis-session-manager
  8. Linux下的CST和UTC时间的区别
  9. SMS系列之六:利用SMS实现操作系统的补丁分发
  10. Java后端Java面试题总结2021(春招+秋招+社招)