本帖最后由 VisualEleven 于 2011-11-04 11:26:01 编辑

解决方案 »

  1.   

    server绑定的端口,和 client连接 使用的端口,是2个不同的。client 连接 使用的port是系统内核分配的。
      

  2.   

    server端和client端通信的socket是相同的,listen的socket不同。
      

  3.   

    那么client端调用send用的socket是connect初始化出来的对吧,是不是这个Socket的端口能读出来吗
      

  4.   

    客户端一个SOCKET就可以了,收发数据都是它。
    服务器端有两个SOCKET,一个叫监听SOCKET,主要是用来监听client的connect,accept返回的就是另一个通讯的SOCKET,用来和client收发数据,和客户端的等同。
      

  5.   

    那么端口在整个过程中扮演一个什么角色?
    比如:
    Server监听2012端口,客户connect2012端口得到socket句柄,那之后调用send发送数据是发送到服务器的哪个端口?recv是从哪个端口获取数据?
    server在accpet之后得到一个新的socket句柄,然后调用recv获取数据是,它在哪个端口上得到的数据。之后send用的又是哪个端口?
      

  6.   

    socket和端口不是一一对应的。
    accept返回的socket是由内核分配的,但仍然与监听的端口号相同。“Server监听2012端口,客户connect2012端口得到socket句柄,那之后调用send发送数据是发送到服务器的哪个端口?recv是从哪个端口获取数据?”send和recv的目标端口,端口号仍然是监听的端口号,但对应的服务器上的socket是accept返回的socket。“server在accpet之后得到一个新的socket句柄,然后调用recv获取数据是,它在哪个端口上得到的数据。之后send用的又是哪个端口?”新的句柄recv和send的目标是由accept接受的客户端。
    出站端口号与监听端口号相同,目标端口号(客户机上的)是一个临时端口,由客户机建立连接时分配。