开发中需要开启服务端的时候,本地测试都是直接写端口,实际环境也是需要指定要邦定的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...
本地端口监听实现通过JAVA的ServerSocket类,创建ServerSocket对象并绑定要监听的本地端口,然后通过accept()方法接受连接请求,在新线程中处理请求。具体代码如下: ServerSocket ss = new ServerSocket(6666); //监听...
serversocket web服务器
socket和serversocket利用IO流编写的多线程连接相互发送消息
Socket+ServerSocket代码
ServerSocket的close()方法使服务器释放占用的端口,并且断开与所有客户的连接。当一个服务器程序运行结束时,即使没有执行ServerSocket的close()方法,操作系统也会释放这个服务器占用的端口。因此,服务器程序并不...
基于B/S的,利用io输出流输入流。基于图形界面
Android完全支持JDK本身的TCP,UDP网络通信API,也可以使用ServerSocket,Socket来建立基于TCP/IP协议的网络通信,也可以使用DatagramSocket,Datagrampacket来建 立基于UDP协议的网络通信
一个简单的Android平台的ServerSocket样例。同一个局域网的手机可以通讯
本资源是java中socket与serverSocket连接的例子,包括客户端和服务器端的程序代码
Socket与ServerSocket编程实践聊天,服务器和客户端频繁通信
NULL 博文链接:https://zhangyulong.iteye.com/blog/840154
java socket nginx tcp转发 用户真实IP测试,文章请看我的博客
恢复DELPHI 6 以后 无 SERVERSOCKET和CLIENTSOCKET控件包
delphi socket(ClientSocket,ServerSocket)简单实例
clientsocket and serversocket
本文系统讲解了java网络编程,serverSocket的使用方法及实例
BCB6中ServerSocket控件的使用 & XRF日本理学荧光SMX14仪器数据采集 1、ServerSocket控件
服务端, 声明ServerSocket, 绑定(Bind)一个IP并指定这个IP的通信端口, 比如是127.0.0.1:9050, ServerSocket可以监听来自多个IP发送的连接请求, 监听(Listen)方法的参数可以设置允许的最多连接请求个数. 然后调用异步...
Java网络编程的基础知识、套接字编程、非阻塞通信、创建HTTP服务器与客户程序、数据报通信、对象的序列化与反序列化、Java反射机制、RMI框架、JDBC API、JavaMail API、MVC设计模式、安全网络通信、CORBA和Web服务