我使用的是一个典型的Clint-Server模型,客户端和服务端的连接使用的是Indy的TIdTCPClient和TIdTCPServer控件。
  问题1:有人说服务端在监听的时候,每收到一个客户端连接,就会使用一个新的port来与之通信。那么如果客户端太多,会不会把可用的port用完呢?-_-@
  问题2:一台客户端电脑上能用多个TIdTCPClient(比如同时运行多个程序或一个程序中的多个form都使用TIdTCPClient进行连接)连接同一个服务器的TIdTCPServer吗?如果可以,服务端的TIdTCPServer怎么分辩来自同一个IP和Port的多个客户连接呢?如果不行,QQ这类软件在一台机器上可以打开多个又是怎样实现的呢?
  问题3:我的老版社区积分还有不少,可是新版社区积分就很少了(而且好像不能通过登录来增加),那大家发贴还给那么多分吗?

解决方案 »

  1.   

    是客户端增加port,服务端port改了你连谁》
      

  2.   

    3,可以用分是可以转换了,你发贴时看看右下角,有个黑字
    2,服务上的port是不变的,没有链接上了,会生成一个新的socket,你记下socket就行了,只有客户端的ip和port是不同,服务器是不会变的
      

  3.   

    建议你先研究一下TCP/IP原理。
      

  4.   

    问题1: 在你的程序把所有可用的port用完之前,运行这个程序的计算机早已经因为负载过重Down了。
      

  5.   

    在《深入delphi6 网络编程》一书中提到:(服务端的)监听套接字s实际上并不接收连接请求,在客户端请求被接收后,调用accept()函数将返回一个与s具有相同属性,但是不能被用来进行监听(即不能用来接收更多连接),只能用来进行数据收发的数据套接字ns,作为与客户端套接字相对应的连接的另一个端点。监听套接字s将仍然用于接收其他客户端的连接,并且仍处于监听模式。面向连接的客户端也调用socket()建立一个套接字c,但使用象TCP这样的面向连接的协议时,客户端不必关心协议使用什么样的本机地址。
    那么,对于服务端而言,ns与s具有的相同的属性是那些方面呢?ip和port都相同吗?如果都相同,windows怎么区分ns和s呢?对于客户端而言,它不必关心使用什么样的本机地址。那么是不是在连接的时候,由操作系统给每一个连接随机分配一个未使用的port呢?to newyj: 呵呵,我知道该如何转换可用分了,谢谢!
      

  6.   

    1.Server的端口是固定的,不会被消耗光,Server消耗的是线程数量(Indy),只有Client端才会出现耗尽端口的情况。
    2.Client与Server建立连接时,操作系统会随机选择一个本地的未使用端口与Server端建立连接。
    所以在Server端用IP:Port就可以识别一个Client,IP:Port就是一个唯一的Socket。