本地端口監(jiān)聽(tīng)

創(chuàng)新互聯(lián)-專(zhuān)業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比溫嶺網(wǎng)站開(kāi)發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫(kù),直接使用。一站式溫嶺網(wǎng)站制作公司更省心,省錢(qián),快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋溫嶺地區(qū)。費(fèi)用合理售后完善,十多年實(shí)體公司更值得信賴(lài)。
import?java.io.IOException;
import?java.net.ServerSocket;
import?java.net.Socket;
import?java.util.concurrent.ExecutorService;
import?java.util.concurrent.Executors;
public?class?SocketServer
{
private?ServerSocket?serverSocket;
private?ExecutorService?executorService;//?線程池
private?final?int?POOL_SIZE?=?600;//?單個(gè)CPU線程池大小
public?SocketServer()?throws?IOException
{
serverSocket?=?new?ServerSocket(9888);//監(jiān)聽(tīng)的端口號(hào)
//?Runtime的availableProcessor()方法返回當(dāng)前系統(tǒng)的CPU數(shù)目.
executorService?=?Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors()?*?POOL_SIZE);
System.out.println("服務(wù)器啟動(dòng)");
}
public?void?service()
{
while?(true)
{
Socket?socket?=?null;
try
{
//?接收客戶連接,只要客戶進(jìn)行了連接,就會(huì)觸發(fā)accept();從而建立連接
socket?=?serverSocket.accept();
executorService.execute(new?Handlers(socket));
//這里就是放業(yè)務(wù)邏輯的地方例如獲取數(shù)據(jù)等等
}?catch?(Exception?e)
{
e.printStackTrace();
System.out.println("socket?Exception:"?+?e);
}
}
}
public?static?void?main(String[]?args)?throws?IOException
{
//Thread?thread?=?new?Thread(new?PringtThread());
//thread.start();
new?SocketServer().service();
}
}
端口掃描代碼
import java.io.IOException;
import?java.net.Socket;
public?class?SearchPort?implements?Runnable
{
public?static?void?main(String[]?args)
{
SearchPort?searchPort?=?new?SearchPort();
Thread?thread?=?new?Thread(searchPort);
thread.start();
}
@Override
public?void?run()
{
searchPort("192.168.1.2",?0,?9999);
}
public?void?searchPort(String?ip,int?begin,?int?end)?{
//?1-65535
Socket?s?=?null;
for?(int?i?=?begin;?i??end;?i++)?{
boolean?flag?=?false;
try?{
s?=?new?Socket(ip,?i);
flag?=?s.isConnected();
}?catch?(IOException?e)?{
//?TODO?Auto-generated?catch?block
//?e.printStackTrace();
}
if?(flag)?{
System.out.println("port?"?+?i?+?"?is?open");
try?{
s.close();
}?catch?(IOException?e)?{
//?TODO?Auto-generated?catch?block
e.printStackTrace();
}
}?else?{
//?System.out.println("port?"?+?i?+?"?is?close");
}
}
//System.out.println("seach?port?:"?+?begin?+?"?to?"?+?end?+?"?ok..");
}
}
第一個(gè)端口監(jiān)聽(tīng)的采用了線程池的技術(shù),當(dāng)大數(shù)據(jù)來(lái)的時(shí)候也不怕(某大型企業(yè)的部分源碼),第二個(gè)例子是端口掃描器,采用了多線程掃描,代碼直接復(fù)制就可以用的,從10點(diǎn)50分打代碼11點(diǎn)半,不容易,望樓主采納,有什么問(wèn)題可以問(wèn)我
單線程的
import java.net.*;
public class UDP
{
public static void main(String args[])
{
for (int port=0;port=65535;port++) {
try {
DatagramSocket server=new DatagramSocket(port);
server.close();
}
catch(SocketException e) {
System.out.println("UDP端口"+port+"開(kāi)放!");
}
}
}
}
希望能夠幫助到你,望采納!
使用 DatagramSocket(int port) 建立socket(套間字)服務(wù)。
將數(shù)據(jù)打包到DatagramPacket中去
通過(guò)socket服務(wù)發(fā)送 (send()方法)
關(guān)閉資源
public static void main(String[] args) {
DatagramSocket ds = null; //建立套間字udpsocket服務(wù)
try {
ds = new DatagramSocket(8999); //實(shí)例化套間字,指定自己的port
} catch (SocketException e) {
System.out.println("Cannot open port!");
System.exit(1);
}
byte[] buf= "Hello, I am sender!".getBytes(); //數(shù)據(jù)
InetAddress destination = null ;
try {
destination = InetAddress.getByName("192.168.1.5"); //需要發(fā)送的地址
} catch (UnknownHostException e) {
System.out.println("Cannot open findhost!");
System.exit(1);
}
DatagramPacket dp =
new DatagramPacket(buf, buf.length, destination , 10000);
//打包到DatagramPacket類(lèi)型中(DatagramSocket的send()方法接受此類(lèi),注意10000是接受地址的端口,不同于自己的端口!)
try {
ds.send(dp); //發(fā)送數(shù)據(jù)
} catch (IOException e) {
}
ds.close();
}
}
接收步驟:
使用 DatagramSocket(int port) 建立socket(套間字)服務(wù)。(我們注意到此服務(wù)即可以接收,又可以發(fā)送),port指定監(jiān)視接受端口。
定義一個(gè)數(shù)據(jù)包(DatagramPacket),儲(chǔ)存接收到的數(shù)據(jù),使用其中的方法提取傳送的內(nèi)容
通過(guò)DatagramSocket 的receive方法將接受到的數(shù)據(jù)存入上面定義的包中
使用DatagramPacket的方法,提取數(shù)據(jù)。
關(guān)閉資源。
import java.net.*;
public class Rec {
public static void main(String[] args) throws Exception {
DatagramSocket ds = new DatagramSocket(10000); //定義服務(wù),監(jiān)視端口上面的發(fā)送端口,注意不是send本身端口
byte[] buf = new byte[1024];//接受內(nèi)容的大小,注意不要溢出
DatagramPacket dp = new DatagramPacket(buf,0,buf.length);//定義一個(gè)接收的包
ds.receive(dp);//將接受內(nèi)容封裝到包中
String data = new String(dp.getData(), 0, dp.getLength());//利用getData()方法取出內(nèi)容
System.out.println(data);//打印內(nèi)容
ds.close();//關(guān)閉資源
}
}
直接上代碼:
import?java.net.Socket;
import?java.text.SimpleDateFormat;
import?java.util.Date;
public?class?PortScanner?extends?Thread?{
private?int[]?p;
Socket?ss?=?null;
public?PortScanner(int[]?p)?{
this.p?=?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("8.8.8.8",?i);
System.out.println("掃描到端口:?"?+?i);
}?catch?(Exception?e)?{
//?System.out.println("關(guān)閉端口:?"?+?i);
}
}
}
}
下載一個(gè)jar包,放在lib目錄下面,然后再把這個(gè)jar加入到項(xiàng)目里面就可以了,右鍵add as libary,就可以引用源代碼了
當(dāng)前題目:java掃描端口源代碼,java 端口掃描
網(wǎng)站鏈接:http://chinadenli.net/article9/dsiciih.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供面包屑導(dǎo)航、網(wǎng)站內(nèi)鏈、手機(jī)網(wǎng)站建設(shè)、品牌網(wǎng)站設(shè)計(jì)、建站公司、Google
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)