Java聊天室之實(shí)現(xiàn)獲取Socket功能
一、題目描述
題目實(shí)現(xiàn):獲取遠(yuǎn)程服務(wù)器和客戶機(jī)的IP地址和端口號(hào)。
二、解題思路
創(chuàng)建一個(gè)服務(wù)器類:ServerSocketFrame,繼承JFrame類
寫一個(gè)getserver() 方法,實(shí)例化Socket對(duì)象,啟用9527當(dāng)服務(wù)的端口。
創(chuàng)建一個(gè)客戶端類:ClientSocketFrame,繼承JFrame類。
寫一個(gè)connect() 方法,實(shí)例化Socket對(duì)象,連接本地服務(wù)的9527端口服務(wù)。
獲得遠(yuǎn)程服務(wù)器的地址:socket.getInetAddress();
獲得遠(yuǎn)程服務(wù)器的IP地址 :netAddress.getHostAddress()
獲得遠(yuǎn)程服務(wù)器的端口號(hào):socket.getPort()
獲得客戶端的地址:socket.getLocalAddress()
獲得客戶端的IP地址:localAddress.getHostAddress()
獲得客戶端的端口號(hào):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>
* 修改記錄:
* 修改后版本 修改人 修改日期 修改內(nèi)容
* 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對(duì)象
private Socket socket; // 聲明Socket對(duì)象socket
public void getserver() {
try {
server = new ServerSocket(9527); // 實(shí)例化Socket對(duì)象
ta_info.append("服務(wù)器套接字已經(jīng)創(chuàng)建成功\n"); // 輸出信息
while (true) { // 如果套接字是連接狀態(tài)
ta_info.append("等待客戶機(jī)的連接......\n"); // 輸出信息
socket = server.accept(); // 實(shí)例化Socket對(duì)象
ta_info.append("連接成功......\n");
}
} catch (Exception e) {
e.printStackTrace(); // 輸出異常信息
}
}
public static void main(String[] args) { // 主方法
ServerSocketFrame frame = new ServerSocketFrame(); // 創(chuàng)建本類對(duì)象
frame.setVisible(true);
frame.getserver(); // 調(diào)用方法
}
public ServerSocketFrame() {
super();
setTitle("服務(wù)器端程序");
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>
* 修改記錄:
* 修改后版本 修改人 修改日期 修改內(nèi)容
* 2022/5/31.1 xiaoxuzhu 2022/5/31 Create
* </pre>
* @date 2022/5/31
*/
public class ClientSocketFrame extends JFrame { // 創(chuàng)建類繼承JFrame類
private Socket socket; // 聲明Socket對(duì)象
private JTextArea ta = new JTextArea(); // 創(chuàng)建JtextArea對(duì)象
public ClientSocketFrame() { // 構(gòu)造方法
super(); // 調(diào)用父類的構(gòu)造方法
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); // 實(shí)例化Socket對(duì)象
ta.append("完成連接。\n"); // 文本域中提示信息
InetAddress netAddress = socket.getInetAddress();// 獲得遠(yuǎn)程服務(wù)器的地址
String netIp = netAddress.getHostAddress();// 獲得遠(yuǎn)程服務(wù)器的IP地址
int netPort = socket.getPort();// 獲得遠(yuǎn)程服務(wù)器的端口號(hào)
InetAddress localAddress = socket.getLocalAddress();// 獲得客戶端的地址
String localIp = localAddress.getHostAddress();// 獲得客戶端的IP地址
int localPort = socket.getLocalPort();// 獲得客戶端的端口號(hào)
ta.append("遠(yuǎn)程服務(wù)器的IP地址:" + netIp + "\n");
ta.append("遠(yuǎn)程服務(wù)器的端口號(hào):" + netPort + "\n");
ta.append("客戶機(jī)本地的IP地址:" + localIp + "\n");
ta.append("客戶機(jī)本地的端口號(hào):" + localPort + "\n");
} catch (Exception e) {
e.printStackTrace(); // 輸出異常信息
}
}
public static void main(String[] args) { // 主方法
ClientSocketFrame clien = new ClientSocketFrame(); // 創(chuàng)建本例對(duì)象
clien.setVisible(true); // 將窗體顯示
clien.connect(); // 調(diào)用連接方法
}
}服務(wù)器啟動(dòng),等待連接

客戶端連接上

服務(wù)器提示,客戶端連接成功

到此這篇關(guān)于Java聊天室之實(shí)現(xiàn)獲取Socket功能的文章就介紹到這了,更多相關(guān)Java聊天室內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java實(shí)現(xiàn)中文算數(shù)驗(yàn)證碼的實(shí)現(xiàn)示例(算數(shù)運(yùn)算+-*/)
這篇文章主要介紹了Java實(shí)現(xiàn)中文算數(shù)驗(yàn)證碼的實(shí)現(xiàn)示例(算數(shù)運(yùn)算+-*/),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07
java并發(fā)請(qǐng)求下數(shù)據(jù)插入重復(fù)問(wèn)題的解決方法
現(xiàn)在遇到一個(gè)項(xiàng)目,移動(dòng)設(shè)備存儲(chǔ)數(shù)據(jù),然后一起上傳,那就出現(xiàn)了許多重復(fù)數(shù)據(jù),這篇文章主要給大家介紹了關(guān)于java并發(fā)請(qǐng)求下數(shù)據(jù)插入重復(fù)問(wèn)題的解決方法,需要的朋友可以參考下2021-11-11
mybatis?一對(duì)多映射?column屬性的注意事項(xiàng)說(shuō)明
這篇文章主要介紹了mybatis?一對(duì)多映射?column屬性的注意事項(xiàng)說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。2022-01-01
在實(shí)踐中了解Java反射機(jī)制應(yīng)用
當(dāng)程序運(yùn)行時(shí),允許改變程序結(jié)構(gòu)或變量類型,這種語(yǔ)言稱為動(dòng)態(tài)語(yǔ)言。我們認(rèn)為java并不是動(dòng)態(tài)語(yǔ)言,但是它卻有一個(gè)非常突出的動(dòng)態(tài)相關(guān)機(jī)制,俗稱:反射。下面我們來(lái)簡(jiǎn)單學(xué)習(xí)一下吧2019-05-05
SpringBoot+MySQL實(shí)現(xiàn)讀寫分離的多種具體方案
在高并發(fā)和大數(shù)據(jù)量的場(chǎng)景下,數(shù)據(jù)庫(kù)成為了系統(tǒng)的瓶頸。為了提高數(shù)據(jù)庫(kù)的處理能力和性能,讀寫分離成為了一種常用的解決方案,本文將介紹在Spring?Boot項(xiàng)目中實(shí)現(xiàn)MySQL數(shù)據(jù)庫(kù)讀寫分離的多種具體方案,需要的朋友可以參考下2023-06-06
深入學(xué)習(xí)Spring Boot排查 @Transactional 引起的 NullPointerException問(wèn)題
這篇文章主要介紹了深入學(xué)習(xí)Spring Boot排查 @Transactional 引起的 NullPointerException問(wèn)題,需要的朋友可以參考下2018-01-01
詳解Mybatis核心類SqlSessionFactory的構(gòu)建
這篇文章主要為大家詳細(xì)介紹了Mybatis核心類SqlSessionFactory的構(gòu)建過(guò)程,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2022-12-12
SpringBoot實(shí)現(xiàn)其他普通類調(diào)用Spring管理的Service,dao等bean
這篇文章主要介紹了SpringBoot實(shí)現(xiàn)其他普通類調(diào)用Spring管理的Service,dao等bean,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-11-11

