开发中需要开启服务端的时候,本地测试都是直接写端口,实际环境也是需要指定要邦定的IP才可以。
因为对于服务器来说,有时它不止一块网卡,而我们系统一定是通过指定的IP和端口进行通信的,所以服务端所使用的IP和端口都需要定义配置文件。
那么在平常测试时,在没有指定IP的情况下,ServerSocket到底邦定到哪里了?
在这种情况下,服务器会把此端口绑定到0.0.0.0上面,即在所有IP上面都绑定,即能在每个ip上面收到请求。至于0.0.0.0是什么,这里就不说了。
下面是一个测试程序,通过如下程序即可看到到底是怎么样的情况:
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端口。
当然,这也不是双网卡的验证,因为还是在一个网卡上玩。有条件的可以到刀片机上小测一把。
请您到ITEYE网站看 java小强 原创,谢谢!
http://cuisuqiang.iteye.com/ !
自建博客地址:http://www.javacui.com/ ,内容与ITEYE同步!
相关推荐
在这种情况下,服务器会把此端口绑定到0.0.0.0上面,即在所有IP上面都绑定,即能在每个ip上面收到请求。至于0.0.0.0是什么,这里就不说了。 下面是一个测试程序,通过如下程序即可看到到底是怎么样的情况: package...
`getInetAddress()`返回服务器绑定的IP地址,`getLocalPort()`返回绑定的端口号。当在创建`ServerSocket`时指定端口为0,操作系统会自动分配一个匿名端口,之后可以通过`getLocalPort()`获取这个动态分配的端口号。...
`bindAddr`指定了服务器绑定的IP地址。 #### 三、绑定端口 除了无参构造方法之外,其余的构造方法均需要指定端口。例如,下面的代码创建了一个监听80端口的服务器: ```java ServerSocket serverSocket = new ...
此方法允许服务器绑定到特定的IP地址,增强了网络灵活性。 #### 三、绑定端口与异常处理 当ServerSocket尝试绑定到一个已由其他服务占用的端口时,会抛出`BindException`,这是`IOException`的子类。此外,操作...
- ServerSocket(int port, int backlog, InetAddress bindAddr):指定端口号、队列长度和服务器要绑定的IP地址。 2. 绑定端口 - 端口是通信的关键标识,通常服务器会使用已知端口与客户端通信。如果端口已被占用...
4. `ServerSocket(int port, int backlog, InetAddress bindAddr)`:进一步增强了灵活性,允许开发者指定服务器绑定的具体IP地址,这对于多网卡或多IP环境下的应用尤为重要。 #### 三、端口绑定与异常处理 绑定...
在`IP_ADAPTER_INFO`结构体中,`IpAddressList.IpAddress.String`字段表示IP地址,`IpMaskList.IpMask.String`表示子网掩码,而`GatewayList.IpAddress.String`表示默认网关。此外,还可以通过`DnsServerList`获取...
* ServerSocket(int port, int backlog, InetAddress bindAddress):使用指定的端口、侦听backlog和要绑定到的本地IP地址创建服务器。 三、TCP网络程序设计 TCP网络程序设计是指使用TCP协议进行网络通信的程序设计...
1. 配置网络接口,包括IP地址、子网掩码和默认网关。 2. 创建套接字(socket),这是程序进行网络通信的端点。 3. 使用TCP协议绑定套接字到特定的IP地址和端口号。 4. 听候连接请求(服务器端)或发起连接请求...
- ServerSocket(int port):监听指定port的连接请求,默认最大连接队列为50。 - ServerSocket(int port, int backlog):设置监听端口和最大连接队列长度。 总结: Java中的Socket和ServerSocket是构建网络应用程序...
3. **ServerSocket方法**:`ServerSocket`类有多种构造方法,包括无参数的构造器(默认绑定到系统分配的端口)和带参数的构造器(指定端口)。常用方法包括`accept()`用于接收连接,`getLocalPort()`获取绑定的端口...
> ServerSocket只需要一行代码就可以完成创建、绑定、监听Socket,绑定的地址没填默认就是本机的ip(在源码中InetAddress.anyLocalAddress()方法得出的结论),监听Socket监听的是改Socket的最大连接数,如果队列满时...
在描述中提到,启动服务后,用户可以通过浏览器访问默认IP和端口号。这是因为浏览器实质上也是一个客户端,它可以发起HTTP或HTTPS请求,这里的Socket通信可能是在一个特定的HTTP服务器框架下实现的,如Tomcat或Node...
- **ServerSocket(int port, int backlog, InetAddress bindAddr)**:创建一个监听指定端口的 ServerSocket 对象,设置队列长度以及绑定的 IP 地址。 ##### 3. ServerSocket 的主要功能 - **accept()**:阻塞式...
- `DatagramSocket`的构造函数允许我们指定绑定的端口和互联网地址,或者默认绑定到任何可用的本地端口。 掌握这些基础知识后,开发者可以编写出能够进行网络通信的Java应用程序,无论是基于可靠的TCP连接还是高效...
解析:Socket对象默认不绑定任何端口,需要手动调用bind()方法或在connect()时自动绑定。一个Socket对象只能连接一次,尝试再次连接会抛出异常。 练习题2: 如果远程服务器angel不存在,会怎么样? 答案:a) ...
端口复用(又称SO_REUSEADDR选项)允许一个刚刚关闭的socket立即被重新绑定到同一端口,而不需要等待操作系统默认的TIME_WAIT状态。这在服务器程序需要快速重启或者处理大量短连接时非常有用。 在C#中,我们可以...
在服务器端,代码中定义了一个默认端口`DEFAULT_PORT`,并使用`socket`函数创建了一个Socket,然后将其绑定到本地的IP地址(`INADDR_ANY`表示任何可用的IP地址)和指定端口上。如果一切正常,服务器会开始监听连接,...