服务器与客户端端口的关系?该如何处理

服务器与客户端端口的关系?
本帖最后由 oyljerry 于 2012-11-12 18:59:07 编辑
各位大侠:
    请问用socket编程的时候,需要分别为客户端与服务器端设置端口号。我知道服务器端的端口号的意思是服务器监听的所在计算机的端口号,那么客户端设置的端口号是什么意思呢?是需访问的服务器的端口?还是自身需要打开的端口号呢?
    另外,请问:如果局域网内的计算机(做客户端)与有外网IP的计算机建立连接的时候,路由器会给(客户端)程序分配一个端口号,那么我可否利用这个端口号,在该程序中,建立一个服务器程序,供其它计算机来访问呢?非常感激!
------解决方案--------------------
1. 客户端不需要设置端口号。客户端只要设置连接的服务器的端口号
2. 这个是一个临时的,通信结束了,路由器会释放这个连接,想一直有效就需要在路由器上做端口映射,把某个端口号分配个你客户端的这个机器,这样你这个机器上的程序就可以被外界访问了
------解决方案--------------------
客户程序:端口一般指对方的端口,只有知道对方的端口才能去连接。不然是连不上的。
连接建立过程中,本地也是有端口的,不过这个操作系统自动分配,不用管。

服务器端则需要指定需要监听的本地端口,能接收所有的对方端口。

你说的端口转发,专业名词叫NAT,楼主可以看看TCP/IP方面的书。
------解决方案--------------------
引用:
引用:1. 客户端不需要设置端口号。客户端只要设置连接的服务器的端口号
2. 这个是一个临时的,通信结束了,路由器会释放这个连接,想一直有效就需要在路由器上做端口映射,把某个端口号分配个你客户端的这个机器,这样你这个机器上的程序就可以被外界访问了
谢谢1楼,也就是说客户端程序设置的端口号是服务器的端口,而与客户端自身的端口没关系了?
……


你说的这个不就是典型的TCP打洞么,这个要看NAT,有的可以成功,有的不可以。可以看一下TCP打洞。
------解决方案--------------------
NAT好像用UDP打洞比较容易实现吧。。。