Chinaunix
标题:
求教,client与server之间协商(非标准)端口号的方法
[打印本页]
作者:
OwnWaterloo
时间:
2013-02-21 21:59
标题:
求教,client与server之间协商(非标准)端口号的方法
像80、443、22这种都还好,一般都不会被无端占用。。。 使用非标准端口号一般都是故意为之。。。
但1024以下的也不是全都很保险。。。 尤其是在Windows
xp
下, 1080经常被占。。。 有时候是ppap.exe, 有时候甚至是emacs的server-mode。。。
自己用这些软件时都还好, 看看错误信息就知道怎么排除, 虽然有时候得把正在加速的ppap给关了。。。
但如果要给非专业人士使用, 这不是个办法啊。。。
能想到的一些策略:
1. 完全手动的方式
server启动时报告: listening on XXX。 client启动时用一个参数选择这个端口和。
或者再稍微智能一些, 先约定一个默认的, 如果server启动时没被占用, client就可以少用一个参数。 比如ssh -p PORT。
2. 环境变量
比如ssh-agent。 但这个只能有父子关系的进程才行吧?
3. 文件
server和client约定一个文件位置, 里面放端口号。 比如emacs的server-mode或者clojure的nrepl。
有其他更"规范"一些的方式么。。。 一个专门存放service-name -> port-number的地方?
作者:
OwnWaterloo
时间:
2013-02-21 22:18
说两个具体的case吧。。。
先是emacs。 emacs监听了一个端口,其他客户程序可以发送数据给它, 在这个emacs的环境下执行一些代码。
有点类似emacsclient --eval, 但没有这么多限制。
比如可以等待emacs执行完代码后才退出, 用emacs合并文件时, 返回值是有用的。
比如可以让terminal里的emacs和桌面上的其他程序交换clipboard的数据。
嗯, 其实在本地terminal里用emacs的情况并不多。。。
目前新的问题是, 用ssh连vps, 并在远端上运行emacs。。。
用ssh -LLOCAL_PORT:REMOTE_HOST:REMOTE_PORT , 同样可以让remote的emacs和本地的emacs通信, 于是可以交换clipboarb
(这是最想解决的事情。。。 putty里复制粘贴太麻烦了, cmd.exe里复制粘贴更是丧心病狂。。。 尤其是文件内容超过一屏幕时, 只能老老实实scp了。。。)
但。。。 约定一个文件位置来交换端口号就很麻烦了啊。。。
作者:
OwnWaterloo
时间:
2013-02-21 22:27
另一个。。。 proxy。。。 都懂的。。。
如果proxy的端口号被占了。。。 通常我就是把占端口号的那个进程给关了。。。
否则要改多少浏览器 —— chrome, firefox, opera, safari, conkeror(emacs党推荐试试这个浏览器)的配置。。。
PAC也不行。 比如goagent的8086被占, 还是要去改PAC的端口号。 WPAD没试过。。。
作者:
selfrun
时间:
2013-02-22 01:13
内网机器间可以用ssdp,本机也可以的吧。
作者:
reiase
时间:
2013-02-22 09:47
回复
1#
OwnWaterloo
本机自己跑程序,就去读配置文件吧,或者直接用fifo文件通信。
如果在公网上跑,就存在很多不确定性了。比如XP每次你侦听一个新端口,就蹦个对话框。或者有些环境,要求防火墙里设定端口。
作者:
linux_c_py_php
时间:
2013-02-22 10:56
意思就是你的服务是工作在一个著名的PORT上(<1024, 正常情况不会被占用), 但恰好某些贱人(QQ旋风)把这个PORT主动bind了.
这种情况我知道怎么办... 我犹记得做BT协议的时候, 作为一个P2P客户端是需要配置一个PORT RANGE的, 然后客户端启动监听P2P连接的端口时会在[min, max]间逐渐+1的bind, 直到成功, 然后将这个PORT报告给tracker服务器, 以便其他P2P客户端能够询问tracker然后连接该p2p客户端。
解决此类问题, 还是需要一个中心的meta server,HOHO。
作者:
linux_c_py_php
时间:
2013-02-22 10:57
如果不要meta server,也规定range, 然后让其他客户端在range里尝试连接各个port也可以, 并且需要一个应用层的握手来认证一下端口对不对。
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2