`
cuisuqiang
  • 浏览: 3959024 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
3feb66c0-2fb6-35ff-968a-5f5ec10ada43
Java研发技术指南
浏览量:3669079
社区版块
存档分类
最新评论

ServerSocket 默认邦定IP

阅读更多

开发中需要开启服务端的时候,本地测试都是直接写端口,实际环境也是需要指定要邦定的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同步!

1
3
分享到:
评论

相关推荐

    ServerSocket默认邦定IP实现过程详解

    在这种情况下,服务器会把此端口绑定到0.0.0.0上面,即在所有IP上面都绑定,即能在每个ip上面收到请求。至于0.0.0.0是什么,这里就不说了。 下面是一个测试程序,通过如下程序即可看到到底是怎么样的情况: package...

    关闭ServerSocket

    `getInetAddress()`返回服务器绑定的IP地址,`getLocalPort()`返回绑定的端口号。当在创建`ServerSocket`时指定端口为0,操作系统会自动分配一个匿名端口,之后可以通过`getLocalPort()`获取这个动态分配的端口号。...

    ServerSocket用法详解

    `bindAddr`指定了服务器绑定的IP地址。 #### 三、绑定端口 除了无参构造方法之外,其余的构造方法均需要指定端口。例如,下面的代码创建了一个监听80端口的服务器: ```java ServerSocket serverSocket = new ...

    ServerSocket 用法详解

    此方法允许服务器绑定到特定的IP地址,增强了网络灵活性。 #### 三、绑定端口与异常处理 当ServerSocket尝试绑定到一个已由其他服务占用的端口时,会抛出`BindException`,这是`IOException`的子类。此外,操作...

    Java网络编程精解之ServerSocket用法详解

    - ServerSocket(int port, int backlog, InetAddress bindAddr):指定端口号、队列长度和服务器要绑定的IP地址。 2. 绑定端口 - 端口是通信的关键标识,通常服务器会使用已知端口与客户端通信。如果端口已被占用...

    java网络编程精简第三章(ServerSocket)

    4. `ServerSocket(int port, int backlog, InetAddress bindAddr)`:进一步增强了灵活性,允许开发者指定服务器绑定的具体IP地址,这对于多网卡或多IP环境下的应用尤为重要。 #### 三、端口绑定与异常处理 绑定...

    VC++ 获取TCP_IP 网络配置信息.rar_vc 网口_获取_获取tcp/ip网络配置信息_获取端口

    在`IP_ADAPTER_INFO`结构体中,`IpAddressList.IpAddress.String`字段表示IP地址,`IpMaskList.IpMask.String`表示子网掩码,而`GatewayList.IpAddress.String`表示默认网关。此外,还可以通过`DnsServerList`获取...

    《CP程序设计基础》PPT课件.ppt

    * ServerSocket(int port, int backlog, InetAddress bindAddress):使用指定的端口、侦听backlog和要绑定到的本地IP地址创建服务器。 三、TCP网络程序设计 TCP网络程序设计是指使用TCP协议进行网络通信的程序设计...

    TCP、IP不错的TCP协议开发 实现上位机网络通信,很好用,直接运行可用

    1. 配置网络接口,包括IP地址、子网掩码和默认网关。 2. 创建套接字(socket),这是程序进行网络通信的端点。 3. 使用TCP协议绑定套接字到特定的IP地址和端口号。 4. 听候连接请求(服务器端)或发起连接请求...

    [Java]详解Socket和ServerSocket学习笔记

    - ServerSocket(int port):监听指定port的连接请求,默认最大连接队列为50。 - ServerSocket(int port, int backlog):设置监听端口和最大连接队列长度。 总结: Java中的Socket和ServerSocket是构建网络应用程序...

    105-java核心编程12.docx

    3. **ServerSocket方法**:`ServerSocket`类有多种构造方法,包括无参数的构造器(默认绑定到系统分配的端口)和带参数的构造器(指定端口)。常用方法包括`accept()`用于接收连接,`getLocalPort()`获取绑定的端口...

    基于java实现Socket套接字一对一聊天系统源码+项目说明.zip

    > ServerSocket只需要一行代码就可以完成创建、绑定、监听Socket,绑定的地址没填默认就是本机的ip(在源码中InetAddress.anyLocalAddress()方法得出的结论),监听Socket监听的是改Socket的最大连接数,如果队列满时...

    Socket客户端向服务端发送数据

    在描述中提到,启动服务后,用户可以通过浏览器访问默认IP和端口号。这是因为浏览器实质上也是一个客户端,它可以发起HTTP或HTTPS请求,这里的Socket通信可能是在一个特定的HTTP服务器框架下实现的,如Tomcat或Node...

    java socket用法

    - **ServerSocket(int port, int backlog, InetAddress bindAddr)**:创建一个监听指定端口的 ServerSocket 对象,设置队列长度以及绑定的 IP 地址。 ##### 3. ServerSocket 的主要功能 - **accept()**:阻塞式...

    My--Java教案(4).doc

    - `DatagramSocket`的构造函数允许我们指定绑定的端口和互联网地址,或者默认绑定到任何可用的本地端口。 掌握这些基础知识后,开发者可以编写出能够进行网络通信的Java应用程序,无论是基于可靠的TCP连接还是高效...

    网络编程技术复习题1 java习题.doc

    解析:Socket对象默认不绑定任何端口,需要手动调用bind()方法或在connect()时自动绑定。一个Socket对象只能连接一次,尝试再次连接会抛出异常。 练习题2: 如果远程服务器angel不存在,会怎么样? 答案:a) ...

    在C#中实现Socket端口复用

    端口复用(又称SO_REUSEADDR选项)允许一个刚刚关闭的socket立即被重新绑定到同一端口,而不需要等待操作系统默认的TIME_WAIT状态。这在服务器程序需要快速重启或者处理大量短连接时非常有用。 在C#中,我们可以...

    socket通信

    在服务器端,代码中定义了一个默认端口`DEFAULT_PORT`,并使用`socket`函数创建了一个Socket,然后将其绑定到本地的IP地址(`INADDR_ANY`表示任何可用的IP地址)和指定端口上。如果一切正常,服务器会开始监听连接,...

Global site tag (gtag.js) - Google Analytics