當前位置:首頁 » 雲伺服器 » java服務端如何確定請求伺服器

java服務端如何確定請求伺服器

發布時間: 2024-09-15 10:45:37

『壹』 java客戶端獲取伺服器的ip

request.getRemoteAddr();
好像是這個方法可以獲得遠程伺服器上的IP

然後使用這個IP,JDBC連接就好了

『貳』 自己在java建了伺服器別人怎麼進來伺服器呢

在Java中創建了一個伺服器之後,要讓其他人能夠訪問該伺服器,通常涉及以下幾個步驟:

  • 確保伺服器已啟動並監聽:
    使用Java編寫的網路伺服器,如之前提到的,通常使用ServerSocket來監聽特定的埠。例如,ServerSocket serverSocket = new ServerSocket(8080);這行代碼將伺服器綁定到8080埠上。確保伺服器正在運行並且正在監聽該埠。

  • 告知其他人伺服器的地址和埠:
    為了讓其他人能夠連接到你的伺服器,你需要告訴他們伺服器的IP地址和監聽的埠號。例如,如果你的伺服器在本地計算機上運行,並且你有一個公共的IP地址(或者你可以通過路由器進行埠轉發),其他人就可以使用你的公共IP地址和埠號(如your_public_ip:8080)來嘗試連接到你的伺服器。

  • 處理客戶端連接:
    在伺服器端,你需要使用ServerSocket的accept()方法來等待客戶端的連接。當客戶端嘗試連接時,accept()方法將返回一個Socket對象,你可以使用這個對象與客戶端進行通信。

  • 確保網路設置允許外部連接:
    如果你的伺服器運行在一個私有的網路環境中(如家庭網路或公司內部網路),你可能需要配置路由器或防火牆來允許外部連接。這通常涉及到埠轉發,即將外部連接轉發到你的伺服器所在的內部IP地址和埠上。

  • 處理客戶端請求和響應:
    一旦客戶端連接上伺服器,你就可以通過Socket對象發送和接收數據了。你需要編寫代碼來處理客戶端的請求,並生成適當的響應。

  • 測試連接:
    在將伺服器的地址和埠告訴其他人之前,最好先自己測試一下連接是否正常。你可以使用telnet或其他網路工具來嘗試連接到你的伺服器,並檢查是否能夠成功建立連接和發送/接收數據。

『叄』 在java後台伺服器,如何根據HttpSession獲得客戶端ip

只能根據用戶請求帶過來的sessionID所匹配的ip地址 而且只可以通過request獲得ip 反正你能得到session 那得到request是一樣簡單的不是嗎
得到request後命令為:

String ip = request.getRemoteAddr();
這個ip字元串就是了

『肆』 Java中伺服器端ServerSocket對象怎麼獲取伺服器端地址和埠號,怎麼獲取遠程請求的

ServerSocket s = new ServerSocket(8888);
while (true) {
// 建立連接
Socket socket = s.accept();

/ /getInetAddress()獲取遠程ip地址,getPort()遠程客戶端的斷後好
"你好,客戶端地址信息: " + socket.getInetAddress() + "\t客戶端通信埠號: " + socket.getPort()

『伍』 java伺服器接收客戶端請求怎樣實現的

伺服器端代碼:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;

/**
* Socket通訊伺服器端
* @author 米強
*
*/
public class ServerMain {

public ServerMain() {
try {
// 構造伺服器ServerSocket對象,參數為伺服器端開放的埠號
ServerSocket ss = new ServerSocket(30102);
System.out.println("伺服器准備就緒!");
// 死循環可以使伺服器持續處於接收客戶端狀態
while(true){
// 該方法使程序阻塞,等待客戶端的鏈接,當監聽到客戶端的鏈接,創建一個Socket對象與客戶端單獨會話
Socket s = ss.accept();
// 為了不影響伺服器監聽其它客戶端,這里開啟了一個線程,由線程處理與這個客戶端的會話
new ServerThread(s).start();
}
} catch (IOException e) {
e.printStackTrace();
}
}

public static void main(String[] args) {
new ServerMain();
}

}

/**
* 伺服器端與客戶端會話的線程
*/
class ServerThread extends Thread {
private Socket s = null;
private BufferedReader read = null;
private PrintStream print = null;

public ServerThread(Socket s) {
this.s = s;
try {
// 從Socket中獲取輸入流和輸出流,由於我們只做一個簡單的字元串通訊,所以採用BufferedRead和PrintStream來封裝輸入、輸出流
read = new BufferedReader(new InputStreamReader(s.getInputStream()));
print = new PrintStream(s.getOutputStream());
} catch (IOException e) {
e.printStackTrace();
}
}

/**
* 線程的運行run方法
*/
public void run() {
try {
String message = null;
// 這里循環可以使伺服器持續的接收客戶端信息。read.readLine()通過輸入流讀取一段字元串,賦值給message變數,如果message字元串不為「exit」則循環,否則結束循環
while (!(message = read.readLine()).equals("exit")){
// 將字元串前面添加「返回:」,再發回客戶端
print.println("返回:" + message);
}
} catch (IOException e) {
} finally {
// 在 finally 代碼塊中無論如何都會執行下面代碼:
try {
// 如果沒有關閉Socket
if(!s.isClosed()){
// 關閉Socket鏈接
s.close();
}
} catch (IOException e1) {
e1.printStackTrace();
}
}
}

}

客戶端代碼:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;

/**
* Socket通訊客戶端
* @author 米強
*
*/
public class ClientMain {

public ClientMain() {
try {
// 構造與伺服器通訊的Socket對象,參數為伺服器IP地址(String)和埠號(int),埠號需要和伺服器端開放的埠號對應
Socket s = new Socket("192.168.1.100", 30102);
// 啟動一個線程與伺服器通訊,並把鏈接伺服器的Socket對象傳遞過去
new LinkThread(s).start();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}

public static void main(String[] args) {
new ClientMain();
}

}

/**
* 與伺服器通訊的線程
*/
class LinkThread extends Thread {
private Socket s = null;
// 輸出流
private PrintStream out = null;
// 緩沖輸入流
private BufferedReader in = null;
// 錄入文字的Scanner對象
private Scanner scanner = null;

public LinkThread(Socket s) {
// 將Socket對象實例保存在全局變數中,因為run方法中我們還要用它斷開鏈接
this.s = s;
try {
// 從Socket中獲取輸入流和輸出流,由於我們只做一個簡單的字元串通訊,所以採用BufferedRead和PrintStream來封裝輸入、輸出流
out = new PrintStream(s.getOutputStream());
in = new BufferedReader(new InputStreamReader(s.getInputStream()));
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}

/**
* 線程的運行run方法
*/
public void run() {
// 構造Scanner對象
scanner = new Scanner(System.in);
System.out.println("提示:如果要結束本次會話,請輸入「exit」指令!");
try {
// 死循環可以使客戶端不斷的向伺服器發送信息,不用擔心循環無法結束,後面的return語句可以結束整個線程。
while(true){
// 提示用戶輸入文字
System.out.print("請輸入:");
// 將用戶輸入的字元串保存在message變數中
String message = scanner.nextLine();
// 通過輸出流發送字元串
out.println(message);
// 清空緩沖,強制輸出
out.flush();
// 獲取伺服器返回的字元串
String str = in.readLine();
// 如果返回的字元串存在
if(str != null){
// 顯示在控制台
System.out.println(str);
}else{
// 提示會話結束,並結束線程
System.out.println("本次會話結束!");
return;
}
}
} catch (IOException e) {
e.printStackTrace();
} finally {
// 在 finally 代碼塊中無論如何都會執行下面代碼:
try {
// 如果沒有關閉Socket
if(!s.isClosed()){
// 關閉Socket鏈接
s.close();
}
} catch (IOException e1) {
e1.printStackTrace();
}
}
}

}

熱點內容
資料庫oracle面試 發布:2024-11-26 00:47:02 瀏覽:201
網易資料庫 發布:2024-11-26 00:39:49 瀏覽:810
舊電腦用什麼安卓模擬器 發布:2024-11-26 00:34:41 瀏覽:533
印度編程員 發布:2024-11-26 00:34:29 瀏覽:486
mac下php編譯器 發布:2024-11-26 00:25:18 瀏覽:863
cmcc怎麼改密碼 發布:2024-11-26 00:21:52 瀏覽:958
初學python的書籍 發布:2024-11-26 00:03:56 瀏覽:52
php大寫轉小寫 發布:2024-11-25 23:52:55 瀏覽:46
安卓哪裡下載游戲安全 發布:2024-11-25 23:51:08 瀏覽:284
白加黑源碼 發布:2024-11-25 23:48:25 瀏覽:388