開發中需要開啟服務端的時候,本地測試都是直接寫端口,實際環境也是需要指定要邦定的IP才可以。
因為對于服務器來說,有時它不止一塊網卡,而我們系統一定是通過指定的IP和端口進行通信的,所以服務端所使用的IP和端口都需要定義配置文件。
那么在平常測試時,在沒有指定IP的情況下,ServerSocket到底邦定到哪里了?
在這種情況下,服務器會把此端口綁定到0.0.0.0上面,即在所有IP上面都綁定,即能在每個ip上面收到請求。至于0.0.0.0是什么,這里就不說了。
下面是一個測試程序,通過如下程序即可看到到底是怎么樣的情況:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
package test; import java.net.InetSocketAddress; import java.net.ServerSocket; import java.net.Socket; public class Test { public static void main(String[] args) throws Exception { SocketClient client = new SocketClient(); new Thread(client).start(); ServerSocket serverSocket = new ServerSocket(); serverSocket.bind( new InetSocketAddress( 8888 )); // serverSocket.bind(new InetSocketAddress("127.0.0.1",8888)); // serverSocket.bind(new InetSocketAddress("192.168.1.100",8888)); System.out.println(serverSocket.toString()); serverSocket.accept(); } } class SocketClient implements Runnable{ public void run() { try { Thread.sleep( 2000 ); try { Socket socket = new Socket( "127.0.0.1" , 8888 ); System.out.println( "127.0.0.1 成功" + socket.toString()); } catch (Exception e) { System.err.println( "127.0.0.1 失敗" ); } try { Socket socket = new Socket( "192.168.1.100" , 8888 ); System.out.println( "192.168.1.100 成功" + socket.toString()); } catch (Exception e) { System.err.println( "192.168.1.100 失敗" ); } } catch (Exception e) { e.printStackTrace(); } } } |
此時的打印結果是:
ServerSocket[addr=0.0.0.0/0.0.0.0,port=0,localport=8888]
127.0.0.1 成功Socket[addr=/127.0.0.1,port=8888,localport=59213]
192.168.1.100 成功Socket[addr=/192.168.1.100,port=8888,localport=59214]
使用127.0.0.1時打印結果:
ServerSocket[addr=/127.0.0.1,port=0,localport=8888]
127.0.0.1 成功Socket[addr=/127.0.0.1,port=8888,localport=59416]
192.168.1.100 失敗
使用192.168.1.100時打印結果:
ServerSocket[addr=/192.168.1.100,port=0,localport=8888]
127.0.0.1 失敗
192.168.1.100 成功Socket[addr=/192.168.1.100,port=8888,localport=59429]
可以看到默認邦定到的是0.0.0.0,此時使用任何能標記到本臺電腦的IP都可以訪問到8888端口。
當然,這也不是雙網卡的驗證,因為還是在一個網卡上玩。有條件的可以到刀片機上小測一把。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。
原文鏈接:https://www.iteye.com/blog/cuisuqiang-2037769