请教高手:怎么使两个应用程序都在同一个端口正常监听???

abcdhy 2004-08-10 01:12:29
网上有一个软件:HTTPTunnel
可以实现 HTTP 穿透,也就是可以在运行在服务器的80号端口上监听,但同时服务器的WEB服务还可以正确运行.以躲过防火墙的拦截.

也就是 HTTPTunnel 和 WEB服务器 同时在同一个机器的80号端口监听,而互不影响.这是怎么实现的呢??

这和我学习的 TCP 协议好像不一致,这时使用的 TCP 协议的漏洞吗??

请大侠们指点我一下?/
谢谢!!
...全文
289 21 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
qqbz 2004-08-17
  • 打赏
  • 举报
回复
1、几个程序共享一个端口,操作系统是怎么发送数据的??
不是操作系统发的,socket不管有多少端口,只负责将数据送到指定端口
2、是给每个程序都一样的信息?还是给最后一个绑定的程序?
需要测试。
3、哪位大侠写过HTTP服务器的模拟程序??
看一下http协议吧
4、 用一个 while 循环读取
当read()返回-1时候,表示没有收到数据。
你可以定义自己的数据收发协议,里面包括此次发送数据多少。
abcdhy 2004-08-15
  • 打赏
  • 举报
回复
谢谢,各位了!!
有学到了不少啊!!

再请教大侠们一个问题:
哪位大侠写过HTTP服务器的模拟程序??
怎么判断客户机传送过来的数据已经完毕啊??
谢谢!!

用一个 while 循环读取, 如果没有数据 程序就会在 read() 函数处停止运行,必须要在 循环内部 判断已经读取完毕,及时跳出死循环 .

比如做一个最简单的服务器, 把 IE 发过来的所有信息回发给 IE ,我首先要接收了所有的信息,才能发送啊? 我怎么判断接收的信息的完整性啊,又什么时候停止接收啊?
abcdhy 2004-08-14
  • 打赏
  • 举报
回复
呵呵,谢谢大家,终于知道了一些重要资料了.

再请教大家一个问题:

几个程序共享一个端口,操作系统是怎么发送数据的??

是给每个程序都一样的信息?
还是给最后一个绑定的程序?
还是象 ber() 所的:谁的指定最明确则将包递交给谁?

这里的指明最明确,又是指的什么?

谢谢大家了!
abcdhy 2004-08-14
  • 打赏
  • 举报
回复

在 ServerSocket 中有 setReuseAddress() 这个函数,是实现这个功能需要的吗??

public void setReuseAddress(boolean on)
throws SocketExceptionEnable/disable the SO_REUSEADDR socket option.
When a TCP connection is closed the connection may remain in a timeout state for a period of time after the connection is closed (typically known as the TIME_WAIT state or 2MSL wait state). For applications using a well known socket address or port it may not be possible to bind a socket to the required SocketAddress if there is a connection in the timeout state involving the socket address or port.

Enabling SO_REUSEADDR prior to binding the socket using bind(SocketAddress) allows the socket to be bound even though a previous connection is in a timeout state.

When a ServerSocket is created the initial setting of SO_REUSEADDR is not defined. Applications can use getReuseAddress() to determine the initial setting of SO_REUSEADDR.

The behaviour when SO_REUSEADDR is enabled or disabled after a socket is bound (See isBound()) is not defined.


chenlh 2004-08-13
  • 打赏
  • 举报
回复
qqbz(qqbz)说的很对。
只要你程序不独占端口,是可以实现多个程序监听的。
但如何保证他们都能读全数据?


abcdhy 2004-08-13
  • 打赏
  • 举报
回复
简单的问题就是:

怎么使几个程序,同时在同一个端口监听?
kg60 2004-08-11
  • 打赏
  • 举报
回复
有这种可能性吗?我总觉得不可能,当然如果加了一些其他的过滤、转发什么的就可能了,不过那样就不是楼主表达的意思就不一样了。(所以我觉得问题提得不够明确。)
lsfemail 2004-08-11
  • 打赏
  • 举报
回复
个人观点

HTTP访问,数据传输,都是遵从1定的格式的,也许是进行了判断,然后转发--(即中间多了个过滤)
qqbz 2004-08-11
  • 打赏
  • 举报
回复
一个端口开n个程序监听都无所谓。
这有啥问题呢?
要保证的是,HTTPTunnel能收全数据。
abcdhy 2004-08-11
  • 打赏
  • 举报
回复
但问题是:
WEB 服务器先已经在 80 号端口监听.
HTTPTunnel 启动后,也可以在 80 号端口监听,而且 WEB 也可以正常运行??

这是怎么实现的啊??
huanghelang 2004-08-11
  • 打赏
  • 举报
回复
关注!
constantine 2004-08-11
  • 打赏
  • 举报
回复
关注。
heibai520 2004-08-11
  • 打赏
  • 举报
回复
UP
xuyang821225 2004-08-10
  • 打赏
  • 举报
回复
应该可以吧,只要是传给对应的应用程序就行吧
松耦合紧内聚 2004-08-10
  • 打赏
  • 举报
回复
watch!
abcdhy 2004-08-10
  • 打赏
  • 举报
回复
高手快出马啊!!!!!!!!!
TonyZeus 2004-08-10
  • 打赏
  • 举报
回复
关注这个问题~~高手出来指导一下啊~
firmbyfirm 2004-08-10
  • 打赏
  • 举报
回复
这么棒的问题大家一起顶吧!
hl_longman 2004-08-10
  • 打赏
  • 举报
回复
ding yi ba
lefteye 2004-08-10
  • 打赏
  • 举报
回复
关注。
加载更多回复(1)

62,634

社区成员

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

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