谢谢!

解决方案 »

  1.   

    服务器在 ACCEPT 时保存客户的IP
    和上次的做比较,如果相同就不再 ACCEPT
      

  2.   

    to  Saimen
       不是啊,我要让它能开多个连接的
    to  cdutgch
       两个连接连的同一个服务器程序,端口、IP都是一样的
      

  3.   

    是不是NetBios 有连接的列表啊,列表里面的值能标识这些连接啊??
      

  4.   

    不好办,我的程序还没做完,好象也有这个问题。
    我没有保留连接,每次发送接收后就关掉Socket了,我的做法比较苯。
      

  5.   

    看来你是用的TCP协议。
    首先,两个客户端的端口肯定不同,因为客户端不用绑定端口,就算绑定也绑不到同一个端口。
    其次,服务器端用socket来区分,每次accept得到的socket是不一样的,你可以在这两个socket是分别读写,而且两个socket的端口是相同的。
      

  6.   

    如果你客户端的端口一样的话,你的程序将出错!然后就用你accept函数后两个参数去分别不同的socket。
    两个socket的端口是相同的?错误!我刚才去做了一个测试,不同的,accept的socket的ip地址是远端的ip地址,如果服务器与客户机在同一台机器上,那他们的端口肯定是不一样的,端口代表着所在的进程的ID号,不可能相同;如果服务器与客户机不在同一台机器上那还有可能一样。更正binarier(沙子) ( )
      

  7.   

    告诉你我学socket时做的一个实验。我有一个server.exe 在监听7000号端口,客户端client.exe 建立socket时没有绑定,所以两个进程被系统分配了1197和1200端口。下面是netstat 执行结果。C:\>netstatActive Connections  Proto  Local Address          Foreign Address        State
      TCP    strawberry:1197        strawberry:7000        ESTABLISHED
      TCP    strawberry:1200        strawberry:7000        ESTABLISHED
      TCP    strawberry:7000        strawberry:1197        ESTABLISHED
      TCP    strawberry:7000        strawberry:1200        ESTABLISHED
    可以看出,有两个ESTABLISHED的连接,就是最后两行,是server.exe的,其本地端口都是7000,而且用netstat /a 还可看出还有一个7000端口的listening 。所有程序都在同一个机器上。
      

  8.   

    你那个是用来监听的端口,那时属于专门用来listen的socket,人为规定的7000,当然一样。accept后的创建的socket它的端口为动态分配的,不是监听socket的端口。
      

  9.   

    知道了,你是说  同一IP  同一端口开两个连接 到服务器,那么我和你说,客户边是不可能正确的,因为我记得同一个IP,同一个端口做连接服务时,是不可能用同一个端口的,你调用 CONNECT 时也没有指出本机使用的端口吧。只是指出了要连接到目标机器的端口,所以同一IP同一端口好象是不可能发生在同一台机器上的。对于服务器方,则每次ACCEPT时会产生一个SOCKET这个SOCKET就是和某一个客户端对话的SOCKET,服务器会自生成不同的SOCKET,你可能在ACCEPT时获取相应的连接信息(如果需要的话)
      

  10.   

    不知道你要实现什么,不过对于服务器而言,这两个联接的SOCKET句柄是不一样的,如果用的是MFC的SOCKET类那么其m_hSocket成员是不一样的。