关于获取客户端的端口号,实在没有办法了

B828 2003-08-29 10:58:42
由于HTTP协议是基于TCP协议的,那么在传输的时候客户端和服务器端需要建立一个套接字。

我们可以得到一下参数
request.getServerPort()可以获取服务器的端口号
request.getServerName()可以获取服务器的主机名
request.getRemoteAddr()可以获取客户端的地址

请问怎么获取客户端的端口?

实在想不出来了。请教各位大虾.
...全文
593 29 打赏 收藏 转发到动态 举报
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
B828 2003-09-09
  • 打赏
  • 举报
回复
onetime(火舞耀阳)
我是失败!这么简单的问题都不知道,其实就是简单的一个方法。难道你就什么都知道吗?大家还不是从头学起的?
我是没有试过socket,因为这个需求用socket就不切实际。那你可以用SOCKET,为什么不提出一个解决方法呢?
难道我拿出来共享都不对吗?我看到ChDw(米)的帖
--------------------------------
好像没有方法取得,但是就算取得你也连不上客户端啊
————————————————————————————————
应该有一些人不知道做到这个功能的简单方法。虽然这种功能很少有人可能用到,但是拿出来以后有人碰到也可以借鉴呀。

在这里谢谢ayayanvren(狂狮)。虽然你的解决方法我不是很需要,但是真的谢谢你。还有ChDw(米) ,javaboy(星仔),很谢谢你们。

用SOCKET当然是可以得到远程端口的,在这个问题中,如果用SOCKET解决,那么就势必要对WEB服务器所监听的端口进行监听。在WEB服务器打开监听以后,我自己的SOCKET怎么监听?就算用自己的SOCKET进行监听,那些包的信息怎么传给WEB服务器?
ayayanvren 2003-09-06
  • 打赏
  • 举报
回复
package viewdb;
import java.io.*;
import java.net.*;
import javax.swing.*;
public class SocketOpenerTest {
public SocketOpenerTest(String ho,int po,JTextArea jta){
String host;
if(ho!=null)host=ho;
else
host="www.yourcompany.com";
int port;
if(po!=0)port=po;
else
port=80;
int timeout=5000;

Socket s=SocketOpener.openSocket(host,port,timeout);
if(s==null)
{jta.setText("");
jta.append("The socket could not be opened.");}
else
{jta.setText("");
jta.append(s.toString()+s.getLocalAddress()+s.getLocalPort());}
}
}
class SocketOpener implements Runnable{
//
public static Socket openSocket(String aHost,int aPort,int timeout){
SocketOpener opener=new SocketOpener(aHost,aPort);
Thread t=new Thread(opener);
t.start();
try{
t.join(timeout);
}catch(InterruptedException e){}
return opener.getSocket();
}
//
public SocketOpener(String aHost,int aPort){
socket=null;
host=aHost;
port=aPort;
}
public void run(){
try{
socket=new Socket(host,port);
}catch(IOException e){}
}
//
public Socket getSocket(){
return socket;
}
private String host;
private int port;
private Socket socket;
}
不知是不是你想要的
asdmonster 2003-09-06
  • 打赏
  • 举报
回复
倒。
onetime 2003-09-06
  • 打赏
  • 举报
回复
倒,失败,共享一下 see see, socket 试过吗?
GeminiFox 2003-09-06
  • 打赏
  • 举报
回复
楼主,你......

吐血!
guotao1982 2003-09-05
  • 打赏
  • 举报
回复
response.getremoteport
你在jsp,javascript
sikuan 2003-09-05
  • 打赏
  • 举报
回复
楼主,我觉得你的思想很有问题也
这么多人帮你,尽管他们可能没有帮上忙
但是你自己至于这么吝啬,70分都不愿意给,人家会鄙视你的,真的
好歹人家都那么热心
B828 2003-09-04
  • 打赏
  • 举报
回复
版主,帮我结贴了吧!这个问题我自己解决了
liad 2003-09-01
  • 打赏
  • 举报
回复
mark
B828 2003-09-01
  • 打赏
  • 举报
回复
对于这个问题已经找到了解决方法,不敢独享,OK,马上结贴

其实在Servlet 2.4标准中,HtthServletRequest类增添了一些方法,其中<HttpServletRequest>.getRemotePort()能够获取客户端的Port,返回值为int。

关于Servlet 2.4、J2EE 1.4标准的新特性,请看:
http://www.javaworld.com/javaworld/jw-03-2003/jw-0328-servlet.html
http://www.javaresearch.org/article/showarticle.jsp?column=106&thread=5967
javaboy 2003-08-30
  • 打赏
  • 举报
回复
这种做法好像并不可靠吧。
----------------------
由于现在我们做的这个系统,Web Server收到的包已经被一个网关进行过处理,所有的用户IP都被改成了那个网关的IP地址,而标实不同的连接的方法就是通过这个端口号来识别。
javaboy 2003-08-30
  • 打赏
  • 举报
回复
办法是有啊,很复杂哟,得自己实现Request。
用这个方法先试试吧, 在servlet里
String host = request.getHeader("Host");
int pos = host.indexOf(":");
int port = 0;
if (pos != -1) {
port = host.substring(pos+1);
}
System.out.println(port);
davisye 2003-08-30
  • 打赏
  • 举报
回复
up
ralihm 2003-08-30
  • 打赏
  • 举报
回复
既然客户端口访问服务器是经过网关转换的,那么你在服务器端得到的客户ip和端口号码都是网关的
从这方面来说你是没有办法获得真实的客户端口或者IP号码的.

实际上对于标示不同的用户,实际上可以从http头部入手进行标志,例如session,

不知道你到底要实现什么功能,没有什么好建议
whodsow 2003-08-30
  • 打赏
  • 举报
回复
去看看HTTP1.1的文档就知道为什么不能了。
好像是rfc2616哟,你做的东西都要涉及这些东西了,不会不知道吧
B828 2003-08-30
  • 打赏
  • 举报
回复
用request.getHeader("Host")能够得到服务器的IP和Port信息,可是Client的信息的不到呀!

以下是从Sun公司的论坛上搜索的一下信息:

Ik seems as <HttpServletRequest>.getHeader("REMOTE_PORT"); gives me the correct port.
Even if MS hasn't documented it (it still appears in their source code :-) )
BTW : Even Apache gave me the same Environment Variables with the method 'getHeaderNames()'


但是,我用这个方法进行实验的时候,函数返回一个null。
而且,我用getHeaderNames()函数获取列表以后,列表里面没有一个叫做"REMOTE_PORT"的属性。

我用的应用服务器是Tomcat4.0,操作系统是Windows 2000 Server。Weblogic 7.0也尝试过。结果都是一样的。

由于不太可能自己为这个应用服务器开一个监听,这也不现实。我认为此功能应该能够在Servlet中解决。

现在就是这个问题没有解决了。高手们提一些意见或者方法。

谢谢
gboy2003 2003-08-30
  • 打赏
  • 举报
回复
up
B828 2003-08-29
  • 打赏
  • 举报
回复
有谁知道呀?
B828 2003-08-29
  • 打赏
  • 举报
回复
由于现在我们做的这个系统,Web Server收到的包已经被一个网关进行过处理,所有的用户IP都被改成了那个网关的IP地址,而标实不同的连接的方法就是通过这个端口号来识别。

  现在我要做得就是把网关送过来的这个端口号进行记录。可惜我一直都没有找到这个方法。真的很急。
ChDw 2003-08-29
  • 打赏
  • 举报
回复
不太明白你的需求了,因为这个端口得到仅仅能够用于记录一下
并没有什么后续操作可以做
加载更多回复(9)

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧