首頁 > 軟體

Java聊天室之實現獲取Socket功能

2022-10-20 14:03:45

一、題目描述

題目實現:獲取遠端伺服器和客戶機的IP地址和埠號。

二、解題思路

建立一個伺服器類:ServerSocketFrame,繼承JFrame類

寫一個getserver() 方法,範例化Socket物件,啟用9527當服務的埠。

建立一個使用者端類:ClientSocketFrame,繼承JFrame類。

寫一個connect() 方法,範例化Socket物件,連線本地服務的9527埠服務。

獲得遠端伺服器的地址:socket.getInetAddress();

獲得遠端伺服器的IP地址 :netAddress.getHostAddress()

獲得遠端伺服器的埠號:socket.getPort()

獲得使用者端的地址:socket.getLocalAddress()

獲得使用者端的IP地址:localAddress.getHostAddress()

獲得使用者端的埠號:socket.getLocalPort()

三、程式碼詳解

ServerSocketFrame

package com.xiaoxuzhu;
import java.awt.BorderLayout;
import java.net.*;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
/**
 * Description: 
 *
 * @author xiaoxuzhu
 * @version 1.0
 *
 * <pre>
 * 修改記錄:
 * 修改後版本	        修改人		修改日期			修改內容
 * 2022/5/31.1	    xiaoxuzhu		2022/5/31		    Create
 * </pre>
 * @date 2022/5/31
 */

public class ServerSocketFrame extends JFrame {
    private JTextArea ta_info;
    private ServerSocket server; // 宣告ServerSocket物件
    private Socket socket; // 宣告Socket物件socket

    public void getserver() {
        try {
            server = new ServerSocket(9527); // 範例化Socket物件
            ta_info.append("伺服器通訊端已經建立成功n"); // 輸出資訊
            while (true) { // 如果通訊端是連線狀態
                ta_info.append("等待客戶機的連線......n"); // 輸出資訊
                socket = server.accept(); // 範例化Socket物件
                ta_info.append("連線成功......n");
            }
        } catch (Exception e) {
            e.printStackTrace(); // 輸出異常資訊
        }
    }

    public static void main(String[] args) { // 主方法
        ServerSocketFrame frame = new ServerSocketFrame(); // 建立本類物件
        frame.setVisible(true);
        frame.getserver(); // 呼叫方法
    }

    public ServerSocketFrame() {
        super();
        setTitle("伺服器端程式");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 336, 257);

        final JScrollPane scrollPane = new JScrollPane();
        getContentPane().add(scrollPane, BorderLayout.CENTER);

        ta_info = new JTextArea();
        scrollPane.setViewportView(ta_info);
    }
}

ClientSocketFrame

package com.xiaoxuzhu;
import java.awt.BorderLayout;
import java.net.*;
import javax.swing.*;
import javax.swing.JScrollPane;

/**
 * Description: 
 *
 * @author xiaoxuzhu
 * @version 1.0
 *
 * <pre>
 * 修改記錄:
 * 修改後版本	        修改人		修改日期			修改內容
 * 2022/5/31.1	    xiaoxuzhu		2022/5/31		    Create
 * </pre>
 * @date 2022/5/31
 */

public class ClientSocketFrame extends JFrame { // 建立類繼承JFrame類
    private Socket socket; // 宣告Socket物件
    private JTextArea ta = new JTextArea(); // 建立JtextArea物件

    public ClientSocketFrame() { // 構造方法
        super(); // 呼叫父類別的構造方法
        setTitle("獲取Socket資訊");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 351, 257);
        final JScrollPane scrollPane = new JScrollPane();
        getContentPane().add(scrollPane, BorderLayout.CENTER);
        scrollPane.setViewportView(ta);
    }

    private void connect() { // 連線通訊端方法
        ta.append("嘗試連線......n"); // 文字域中資訊資訊
        try { // 捕捉異常
            socket = new Socket("127.0.0.1", 9527); // 範例化Socket物件
            ta.append("完成連線。n"); // 文字域中提示資訊
            InetAddress netAddress = socket.getInetAddress();// 獲得遠端伺服器的地址
            String netIp = netAddress.getHostAddress();// 獲得遠端伺服器的IP地址 
            int netPort = socket.getPort();// 獲得遠端伺服器的埠號
            InetAddress localAddress = socket.getLocalAddress();// 獲得使用者端的地址
            String localIp = localAddress.getHostAddress();// 獲得使用者端的IP地址
            int localPort = socket.getLocalPort();// 獲得使用者端的埠號
            ta.append("遠端伺服器的IP地址:" + netIp + "n");
            ta.append("遠端伺服器的埠號:" + netPort + "n");
            ta.append("客戶機原生的IP地址:" + localIp + "n");
            ta.append("客戶機原生的埠號:" + localPort + "n");
        } catch (Exception e) {
            e.printStackTrace(); // 輸出異常資訊
        }
    }

    public static void main(String[] args) { // 主方法
        ClientSocketFrame clien = new ClientSocketFrame(); // 建立本例物件
        clien.setVisible(true); // 將表單顯示
        clien.connect(); // 呼叫連線方法
    }
}

伺服器啟動,等待連線

使用者端連線上

伺服器提示,使用者端連線成功

到此這篇關於Java聊天室之實現獲取Socket功能的文章就介紹到這了,更多相關Java聊天室內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com