الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

الحصول على الاجهزه المتصله بالشبكه عن طريق الجافا

بدأه Mahmoud Kelany في 13 مارس 2011 · 7 رد · 2,059 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمه الله وبركاته

هذه كانت تاسك طلبت منى فى كيفيه تحديد الاجهزه الموجوده على الشبكه

فقومت بعمل كود يعمل على الـ Pinging

وحبيت افيد به

على ما قدم لى فى التقرير ان الكود يأخذ وقت كبير فى الحصول على الاجهزه ولا يراعى التصنيف فى الـ network classes A,B,C

لكن على حد علمى فأردت الافاده به

وطرح المناقشه على ذلك , وان كان هناك افضل لا تبخلوا علينا

/**
 *
 * @author Mahmoud Kelany
 */
import java.net.InetAddress;
import java.util.ArrayList;
import javax.swing.JOptionPane;

public class NetworkPing {

	private ArrayList<InetAddress> avilablePcsList;
	private boolean isFinished;
	private int networkPcs;

	/**
 	* JavaProgrammingForums.com
 	*/
	public NetworkPing() {
    	networkPcs = 254;
    	avilablePcsList = new ArrayList<InetAddress>();
    	for (int i = 1; i <= networkPcs; i++) {
        	final int x = i;

        	new Thread() {

            	@Override
            	public void run() {
                	try {
                    	InetAddress localhost = InetAddress.getLocalHost();
                    	byte[] ip = localhost.getAddress();
                    	ip[3] = (byte) x;
                    	InetAddress address = InetAddress.getByAddress(ip);
                    	System.out.println(address.getHostAddress() + " / " + address.getHostName());
                    	if (!address.getHostAddress().equals(address.getHostName())) {
                        	avilablePcsList.add(address);
                    	}
                    	if (x == networkPcs) {
                        	isFinished = true;
                    	}
                	} catch (Exception ex) {
                    	JOptionPane.showMessageDialog(null, ex.toString());
                	}
            	}
        	}.start();
    	}
	}

	public boolean isFinished() {
    	return isFinished;
	}

	public InetAddress[] getAvilablePcsList() {
    	InetAddress[] ias = new InetAddress[avilablePcsList.size()];
    	return avilablePcsList.toArray(ias);
	}
}

ودا كود التجربه

import java.awt.BorderLayout;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumn;
import javax.swing.table.TableRowSorter;

/**
 *
 * @author Mahmoud Kelany
 */
public class TestFrame extends JFrame {

	private JTable pcTable;
	private DefaultTableModel tableModel;
	private TableRowSorter tableRowSorter;
	private NetworkPing networkPing;
	private JDialog waitDialog;

	public TestFrame() {
    	networkPing = new NetworkPing();
    	waitMessage();
    	while (!networkPing.isFinished()) {
    	}
    	waitDialog.dispose();
    	creatGUI();
	}

	private void waitMessage() {
    	waitDialog = new JDialog();
    	waitDialog.setTitle("Wait...");
    	waitDialog.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
    	waitDialog.add(new JLabel("Please wait while "
            	+ "detecting the connected machines ..."), BorderLayout.CENTER);
    	waitDialog.setSize(320, 100);
    	waitDialog.setResizable(false);
    	waitDialog.setVisible(true);
    	waitDialog.setLocationRelativeTo(null);
	}

	private void creatGUI() {
    	InetAddress[] pcList = networkPing.getAvilablePcsList();
    	int attribut = 3;
    	Object[][] data = new Object[pcList.length][attribut];
    	for (int i = 0; i < data.length; i++) {
        	try {
            	Object[] rows = new Object[attribut];
            	rows[0] = pcList.getHostName();
            	rows[1] = pcList.getHostAddress();
            	NetworkInterface n = NetworkInterface.getByInetAddress(pcList);
            	rows[2] = n == null ? "Not Supported" : n.getDisplayName();
            	data = rows;
        	} catch (SocketException ex) {
            	JOptionPane.showMessageDialog(null, ex);
        	}
    	}

    	tableModel = new DefaultTableModel(data,
            	new String[]{"Machine Name", "Machine IP", "NIC Card Name"}) {

        	@Override
        	public boolean isCellEditable(int row, int column) {
            	return false;
        	}
    	};
    	tableRowSorter = new TableRowSorter(tableModel);

    	pcTable = new JTable(tableModel);
    	pcTable.setRowSorter(tableRowSorter);
    	add(new JScrollPane(pcTable), BorderLayout.CENTER);

    	for (int i = 0; i < 3; i++) {
        	TableColumn col = pcTable.getColumnModel().getColumn(i);
        	if (i == 2) {
            	col.setPreferredWidth(220);
        	} else {
            	col.setPreferredWidth(40);
        	}
    	}
	}

	public static void main(String[] args) {
    	TestFrame f = new TestFrame();
    	f.setTitle("The connected machines in my local network");
    	f.setSize(550, 400);
    	f.setLocationRelativeTo(null);
    	f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    	f.setVisible(true);
	}
}

وهذه صور من عمل البرنامج

post-217802-059278100 1300048542_thumb.p

post-217802-063052100 1300048548_thumb.p

وهذا هو الكود عباره عن مشروع netbeans

Network Test.zip

المرفقات
pc2.pngUntitled.png
3

Software Developer
Mahmoudkelany.com


 

#2

:lol: :lol: :lol: :lol: :lol: :lol: :lol:

روعة ............روعة

:wub: اخ محمود :wub:

لم اكن اتصور ان الجافا لها امكانيات في مجال الشبكات

احببت لو تضيف حقل الى الجدول يحوي Physical Address

الخاص بالLan card

لكي نستفيد منه في عمليات التشفير

وشكرا

تحياتي

#4
alionline كتب:

:lol: :lol: :lol: :lol: :lol: :lol: :lol:

روعة ............روعة

:wub: اخ محمود :wub:

لم اكن اتصور ان الجافا لها امكانيات في مجال الشبكات

احببت لو تضيف حقل الى الجدول يحوي Physical Address

الخاص بالLan card

لكي نستفيد منه في عمليات التشفير

وشكرا

تحياتي

متشكر على ردك اخى الكريم

يمكنك فعل ما اردت باستخدام الداله

getHardwareAddress الموجوده داخل الـفئه NetworkInterface

مثلا هيكون التعديل كدا

NetworkInterface n = NetworkInterface.getByInetAddress(pcList);
            	n.getHardwareAddress();

Software Developer
Mahmoudkelany.com


 

#5

[

  InetAddress ia = InetAddress.getLocalHost();
        byte[] address = ia.getAddress();
        for (int i = 1; i < 250; i++) {
            address[3] = (byte) i;
            InetAddress add = InetAddress.getByAddress(address);
            boolean status;
            if (status = add.isReachable(1000)) {
                System.out.println(add.getHostAddress() + "  is Conncted " + status);
            } else {
                System.out.println(add.getHostAddress() + " is Connected " + status);
            }
3
#6

جزاكم الله كل خير

موضوع مفيد

جزاكم الله كل خير مرة أخرى

#7

بارك الله فيكم مشااركة جدا جيدة

مشكوور اخوي ع المجهوود

وتقبل ممرووووري

#8

تم اضافته ضمن المواضيع المميزة في جزء الشبكات

مواضيع مشابهة