java扫描局域网的端口,第1张

直接上代码:

import javanetSocket;

import javatextSimpleDateFormat;

import javautilDate;

public class PortScanner extends Thread {

private int[] p;

Socket ss = null;

public PortScanner(int[] p) {

thisp = p;

}

public static void main(String[] args) {

for (int i = 0; i < 65535; i = i + 100) {

new PortScanner(new int[] { i + 1, i + 100 })start();

}

}

@Override

public void run() {

for (int i = p[0]; i < p[1]; i++) {

try {

ss = new Socket("8888", i);

Systemoutprintln("扫描到端口: " + i);

} catch (Exception e) {

// Systemoutprintln("关闭端口: " + i);

}

}

}

}

Socket做服务器需要绑定端口,你绑定时用的是啥就是啥。。。一般程序都是约定端口号,比如HTTP就是80,所有人都会去连80,邮箱是25等等。。。作为一个程序,你自己不约定,你指望瞎蒙么 你就算告诉客户端,客户端也要知道,你的数据发到哪个端口上了,客户端才能查看你发的东西,这样同样是相当于约定了一个UDP端口号。。。。

首先你必须建立第一个链接,或者非链接,但无论是什么,这第一次都必须约定端口,无论约定到客户还是服务器,通常程序都是客户端主动链接服务器,因为服务器通常是一个,客户端几百万个的话,你打算去一个个尝试在线不在???

端口有6万多个,大多数是自定义端口,我都不知道你咋冲突,你有6W个服务???一个运气差被占了,链接失败,你换一个就行,6W个够用不。。。主要有一个或几个是约定的就好,你约定100个,我都不信,100个都冲突。。。你约定个6321,保证没人用,我瞎打的,自定义的没人用。。。随机分的印象都是大于10000的。。。

1、UDPRece的DatagramSocket需指定端口。

2、UdpSend的DatagramPacket的目标端口需要和UDPRece的DatagramSocket的端口一致。

import javanetDatagramPacket;

import javanetDatagramSocket;

public class UdpRece {

  public static void main(String[] args) throws Exception {

    // 1创建udp Socket,建立端点

    DatagramSocket ds = new DatagramSocket(20000);

    // 2定义数据包。用于存储数据。

    byte[] buf = new byte[1024];

    DatagramPacket dp = new DatagramPacket(buf, buflength);

    // 3通过服务的receive方法将数到数据存入数据包中

    dsreceive(dp);

    // 4通过数据包的方法获取其中的数据。

    String ip = dpgetAddress()getHostAddress();

    String data = new String(dpgetData(), 0, dpgetLength());

    int port = dpgetPort();

    Systemoutprintln(ip + "::" + data + "::" + port);

    // 4关闭资源

    dsclose();

  }

}

   

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

   

import javanetDatagramPacket;

import javanetDatagramSocket;

import javanetInetAddress;

public class UdpSend {

  public static void main(String[] args) throws Exception {

    // 1创建udp服务,通过DatagramSocket对象

    DatagramSocket ds = new DatagramSocket(10000);

    // 2确定数据,并封装成数据包。

    // DatagramPacket(byte[] buf, int length, InetAddress address, int port)

    // 构造数据报包,用来将长度为 length 的包发送到指定主机上的指定端口号。

    byte[] buf = "udp shu ju lai le"getBytes();

    DatagramPacket dp = new DatagramPacket(buf, buflength, InetAddressgetByName("1921681100"),

        20000);

    // 3通过Socket服务,将已有的数据包发送出去。通过send方法。

    dssend(dp);

    // 4关闭资源

    dsclose();

  }

}

主机的地址就是作为服务器的IP地址!要是连接你自己的就直接用localhost或是127001都可以!要是连接其他的!就该城相应的IP就可以!

oracle端口号是1521,mysql端口号是3306,sql server端口号是1433,我们一般使用的也就这几中数据库!记住这三个端口号就可以了!记住!这些端口号都是默认的!是可以更改的!

import javanet;

import javaio;

public class TestSocketClient {

public static void main(String[] args) {

try {

Socket socket = new Socket("127001", 5566);

Systemoutprintln("请输入计算式:");

BufferedReader br = new BufferedReader(new InputStreamReader(Systemin));

String s1 = brreadLine();

DataOutputStream dos = new DataOutputStream(socketgetOutputStream());

DataInputStream dis = new DataInputStream(socketgetInputStream());

doswriteUTF(s1);

dosflush();

double s = disreadDouble();

Systemoutprintln("计算结果:" + s);

disclose();

dosclose();

socketclose();

} catch (IOException e) {

eprintStackTrace();

Systemoutprintln("连接出错");

Systemexit(-1);

}

}

}

服务器端:

import javanet;

import javaio;

public class TestSocketServer {

public static void main(String[] args) {

try {

ServerSocket ss = new ServerSocket(5566);

Socket socket = ssaccept();

DataOutputStream dos = new DataOutputStream(socketgetOutputStream());

DataInputStream dis = new DataInputStream(socketgetInputStream());

String s = null;

if ((s = disreadUTF()) != null) {

Systemoutprintln("接收到的算式:" + s);

double result = 0;

String[] sarr1 = ssplit("[\\+\\-\\\\/]");

double a = DoubleparseDouble(sarr1[0]trim());

double b = DoubleparseDouble(sarr1[1]trim());

String[] sarr2 = ssplit("^(-\\d+)(\\\\d+)");

char c = sarr2[1]trim()charAt(0);

switch (c) {

case '+':

result = a + b;

break;

case '-':

result = a - b;

break;

case '':

result = a b;

break;

case '/':

result = a / b;

break;

default:

break;

}

doswriteDouble(result);

dosflush();

}

disclose();

dosclose();

socketclose();

} catch (IOException e) {

eprintStackTrace();

Systemexit(-1);

}

}

}

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » java扫描局域网的端口

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情