InetAddress类的使用

您所在的位置:网站首页 cmdreset数控 InetAddress类的使用

InetAddress类的使用

2024-06-09 23:59| 来源: 网络整理| 查看: 265

java.net.InetAddress类是java的IP地址封装类,内部隐藏了IP地址,可以通过它很容易的使用主机名以及IP地址。一般共各种网络类使用。直接由Object类派生并实现了序列化接口。该类用两个字段表示一个地址:hostName与address。hostName包含主机名,address包含IP地址。InetAddress支持ipv4与ipv6地址。

一些常用方法如下:

byte[] getAddress()

返回指定对象的IP地址的以网络字节为顺序的4个元素的字节数组

static InetAddress getByName(String hostname)

使用DNS查找hostname的IP地址,并返回

static InetAddress getLocalHost()

返回本地计算机的InetAddress。

String getHostName()

返回指定InetAddress对象的主机名。

String getHostAddress()

返回指定InetAddress对象的主机地址的字符串形式

分析:

InetAddress addr = InetAddress.getByName("java.sun.com");

System.out.println(addr);

以上代码将打印网址域名为java.sun.com的对应IP地址

因此,在网络编程中,我们可以很方便的使用InetAddress类实现Ip地址的各种操作。

例题1:服务器端:

package com.itjob.net; import java.awt.*; import javax.swing.*; import java.awt.event.*; import java.io.*; import javax.swing.border.*; import java.net.*; public class ServerApp extends JFrame implements Runnable, ActionListener { JPanel mainPanel; JPanel bottomPanel; GridBagLayout gbl; GridBagConstraints gbc; Border border; JTextArea txtChatMess; JScrollPane scroll; JTextField txtMess; JLabel lblEnterMess; JButton cmdSend; JButton cmdReset; ServerSocket server = null; Socket socket = null; Scanner read = null; public ServerApp() { super("服务器"); mainPanel = new JPanel(); bottomPanel = new JPanel(); mainPanel.setLayout(new BorderLayout()); mainPanel.add(bottomPanel, BorderLayout.SOUTH); gbl = new GridBagLayout(); gbc = new GridBagConstraints(); bottomPanel.setLayout(gbl); txtChatMess = new JTextArea(15, 20); txtChatMess.setEditable(false); scroll = new JScrollPane(txtChatMess); mainPanel.add(scroll); border = BorderFactory.createRaisedBevelBorder(); txtMess = new JTextField(15); lblEnterMess = new JLabel("请输入消息: "); cmdSend = new JButton("发 送"); cmdSend.setPreferredSize(new Dimension(50, 20)); cmdSend.setEnabled(false); cmdSend.addActionListener(this); cmdReset = new JButton("清 空"); cmdReset.setPreferredSize(new Dimension(50, 20)); cmdReset.addActionListener(this); cmdSend.setBorder(border); cmdReset.setBorder(border); gbc.gridx = 3; gbc.gridy = 10; gbl.setConstraints(lblEnterMess, gbc); bottomPanel.add(lblEnterMess); gbc.gridx = 10; //gbc.fill = gbc.BOTH; gbl.setConstraints(txtMess, gbc); bottomPanel.add(txtMess); gbc.gridx = 3; gbc.gridy = 30; gbl.setConstraints(cmdSend, gbc); bottomPanel.add(cmdSend); gbc.gridx = 10; gbl.setConstraints(cmdReset, gbc); bottomPanel.add(cmdReset); getContentPane().add(mainPanel); pack(); setVisible(true); } public void actionPerformed(ActionEvent evt) { if (evt.getSource() == cmdSend) { try { write.println(txtMess.getText()); write.flush(); } catch (Exception e) { e.printStackTrace(); } } if (evt.getSource() == cmdReset) { txtMess.setText(""); } } public void run() { try { server = new ServerSocket(2005); //反复接收客户端请求 while (true) { socket = server.accept(); if (socket != null) { txtChatMess.append("服务器消息:客户已连接!" + "\n"); cmdSend.setEnabled(true); } else { txtChatMess.append("服务器消息:客户未能连接!" + "\n"); cmdSend.setEnabled(false); } //为每一个客户启动一个读取数据的单独线程 Connections con = new Connections(socket); Thread thread = new Thread(con); thread.start(); } } catch (Exception e) { e.printStackTrace(); } } class Connections implements Runnable { Socket clientSock = null; Connections(Socket s) { clientSock = s; } public void run() { try { read = new Scanner(socket.getInputStream())); write = new PrintWriter(socket.getOutputStream()); String result = read.readLine(); if (result == null){ return; } while(!result.trim().equals("Exit!")) { txtChatMess.append("客户端消息: " + result + "\n"); if (read.hasNextLine()){ result = read.nextLine(); }else{ Thread.sleep(100); } } }catch(Exception e){ e.printStackTrace(); }finally{ try { read.close(); write.close(); socket.close(); server.close(); cmdSend.setEnabled(false); }catch(Exception e){ } } } } public static void main(String[] args) { ServerApp serverApp = new ServerApp(); Thread thread = new Thread(serverApp); thread.start(); } }

客户端:

package com.itjob.net; import java.awt.*; import javax.swing.*; import java.awt.event.*; import java.io.*; import javax.swing.border.*; import java.net.*; public class ClientApp extends JFrame implements Runnable, ActionListener { JPanel mainPanel; JPanel bottomPanel; GridBagLayout gbl; GridBagConstraints gbc; Border border; JTextArea txtChatMess; JScrollPane scroll; JTextField txtMess; JLabel lblEnterMess; JButton cmdSend; JButton cmdReset; ServerSocket server = null; Socket socket = null; Scanner read = null; PrintWriter write = null; public ClientApp() { super("客户端"); mainPanel = new JPanel(); bottomPanel = new JPanel(); mainPanel.setLayout(new BorderLayout()); mainPanel.add(bottomPanel, BorderLayout.SOUTH); gbl = new GridBagLayout(); gbc = new GridBagConstraints(); bottomPanel.setLayout(gbl); //new GBC(); txtChatMess = new JTextArea(15, 20); txtChatMess.setEditable(false); scroll = new JScrollPane(txtChatMess); mainPanel.add(scroll); border = BorderFactory.createRaisedBevelBorder(); txtMess = new JTextField(15); lblEnterMess = new JLabel("请输入消息: "); cmdSend = new JButton("发 送"); cmdSend.setPreferredSize(new Dimension(50, 20)); cmdSend.setEnabled(false); cmdSend.addActionListener(this); cmdReset = new JButton("清 空"); cmdReset.setPreferredSize(new Dimension(50, 20)); cmdReset.addActionListener(this); cmdSend.setBorder(border); cmdReset.setBorder(border); gbc.gridx = 3; gbc.gridy = 10; gbl.setConstraints(lblEnterMess, gbc); bottomPanel.add(lblEnterMess); gbc.gridx = 10; //gbc.fill = gbc.BOTH; gbl.setConstraints(txtMess, gbc); bottomPanel.add(txtMess); gbc.gridx = 3; gbc.gridy = 30; gbl.setConstraints(cmdSend, gbc); bottomPanel.add(cmdSend); gbc.gridx = 10; gbl.setConstraints(cmdReset, gbc); bottomPanel.add(cmdReset); getContentPane().add(mainPanel); pack(); setVisible(true); } public void actionPerformed(ActionEvent evt) { if (evt.getSource() == cmdSend) { try { write.println(txtMess.getText()); write.flush(); } catch (Exception e) { e.printStackTrace(); } } if (evt.getSource() == cmdReset) { txtMess.setText(""); } } public void run() { try { InetAddress add = InetAddress.getLocalHost(); socket = new Socket(add, 2005); read = new Scanner(socket.getInputStream()); write = new PrintWriter(socket.getOutputStream()); if (socket != null) { txtChatMess.append("客户消息:服务器已连接!" + "\n"); cmdSend.setEnabled(true); } else { txtChatMess.append("客户消息:服务器未能连接!" + "\n"); cmdSend.setEnabled(false); } } catch (Exception e) { e.printStackTrace(); } Connections con = new Connections(); Thread thread = new Thread(con); thread.start(); } class Connections implements Runnable { public void run() { try { String result = read.readLine(); if (result == null) { return; } while (!result.trim().equals("Exit!")) { txtChatMess.append("服务器端消息: " + result + "\n"); if (read.hasNextLine()) { result = read.nextLine(); } else { Thread.sleep(100); } } } catch (Exception e) { e.printStackTrace(); } finally { try { read.close(); write.close(); socket.close(); server.close(); //cmdSend.setEnabled(false); } catch (Exception e) { } } } } public static void main(String[] args) { ClientApp client = new ClientApp(); Thread thread = new Thread(client); thread.start(); } }

注意:以上代码是基于客户端与服务器在同一台服务器上的,而且服务器不能实现对应多个客户,请大家思考并修改,从而实现一个服务器对应多个客户端。



【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3