السلام عليكم ورحمه الله وبركاته
هذه كانت تاسك طلبت منى فى كيفيه تحديد الاجهزه الموجوده على الشبكه
فقومت بعمل كود يعمل على الـ 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);
}
}وهذه صور من عمل البرنامج
وهذا هو الكود عباره عن مشروع netbeans
