获取访问者IP地址
<p>在一般情况下使用RequestgetRemoteAddr()即可,但是经过nginx等反向代理软件后,这个方法会失效。</p>
<p>本方法先从Header中获取X-Real-IP,如果不存在再从X-Forwarded-For获得第一个IP(用,分割)。</p>
<p>如果还不存在则调用RequestgetRemoteAddr()。</p>
@param request
@return
/
public static String getIp(>首先服务器IP是动态的,这个接口还怎么访问呢?
所以,应该是要请求一个固定可访问的接口,然后这个接口去访回动态的其他服务器IP和端口,而这端口和IP是没办法在本机获取,需要在想要被访问的程序启动时,将其IP和端口写入共享区域(数据库,共享内存等),固定的获取接口根据条件获取动态IP和端口。
public static void main(String[] args) {
try {
Systemoutprintln("当前时间:"+new Date());
Systemoutprintln("IP地址 : " + InetAddressgetLocalHost());
} catch (UnknownHostException e) {
eprintStackTrace();
}
}
网络通信可分为两种模式:TCP有连接的通信UDP无连接的通信
依照上述的问题我可以理解为你是要进行有连接的通信。是要经过三次握手才能实现可靠的连接
第一次:建立连接时三次握手,客户端发送syn包(syn=j)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN(Synchronize Sequence Numbers)同步序列号。
服务器端即可使用:
Socket s=serverSocketaccept();
String clientIP=sgetInetAddress()toString();
这就实现了java服务器端获取到连接此服务器的客户端的IP了,你若想实现获取所有连接此服务器的客户端的IP,你可以把每次accept()返回的socket放进全局的Vector里面,然后在遍历这个vector方法就同上代码咯……
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)