本帖最后由 yzmsb 于 2009-09-25 14:11:37 编辑

解决方案 »

  1.   

    不能够理解你的设计思想首先,本来就是高负荷的环境,通常都是常用长连接。用短连接是自己找不自在。其次,作为服务器,通常都是侦听一个端口(网络游戏的服务端,SQL Server, Http Server, Ftp Server, Mail Server等等都是这样干的),然后让所有的客户端连接这个端口就是。根本就不存在 Socket 占用资源的问题。如果不是一些其他因素,例如用户需求(用户楞要这样干没有办法),安全,网络要求等等原因。个人认为楼主的设计是自己找麻烦。
      

  2.   


    不是的呀。。我在写大量账号自动投票器。。即先登陆对方服务器取的sessionID再进行投票。。因为会有延尽,我理解的是使用异步socket比较有效率,httprequest限制太多不好写http呀。socket的包想咋模拟就咋模拟 
    这想法挺好的。。可问题就是产生很多time_wait状态的。。因为路由限制,一达到一两千time_wait程序就停滞不前了httprequest.abort()可以无这些问题.socket有没有类似abort这样的方法呢?
      

  3.   

    对了。长连接是不是也可以异步进行http通讯呀?
      

  4.   

    长连接可以异步进行http通讯,而且很常见原来你在制造大量的客户端啊。若是 Socket.Close() 不能及时关闭套接字,这个就不知道咋办好了。或者可以换个角度,把一台计算机虚拟为多台计算机,那样软件资源上的限制就拓宽了很多。
      

  5.   

    经过测试使用
             if (srecv.Contains("GMT"))
                 {
                    clientSocket.Close();
                 }
    没有time_wait这样的连接产生。。但是如果这样就无法判断该账号投票是否已成功,我想能不能让接收队例里留几字节,比如 </body></html> 这些东西就不要了。。在recr.lenght-几字节的时候就clientSocket.Close();...这样肯定没有time_wait产生,希望有哪位朋友能帮我实现这个想法,酬谢100元话费决不食言!
      

  6.   

    我觉得应将建立一个类,它与 Socket 是一一对应的关系。是否投票成功,是由这个类来决定的。而不是去判断接受的内容。你不是直接在 Socket 上编程,而是在别人的代码上扩展?
      

  7.   


    嗯水平有限,,都是修改的别人的代码现在功能正常,但就是N多的time_wait严重制约了性能。你好。你说的通过类来判断,如果对方不返回信息,这个类咋判断是否已经投票成功了呢?
      

  8.   

    其实我的目的就是尽可能多的模拟出大量“客户端IE”进行登陆网站服务器再投票操作。。页N多的time_wait限制了我的初衷想法。
      

  9.   

    只要哪位朋友能提供socket的和request.abort()相似的功能或方法就赠送100话费卡密,食言者畜牲,大家见证!
    我用reuqest.abort()试了没有一个time_wait的半连接存在
      

  10.   


    其他的应用我都写好了呀。只要解决这个time_wait半连接就行呀...会的网友一行代码就能解决了呀
      

  11.   

    程序中加个哈希表用来socket当前连接的request进行一一映射,如果你想断开某个socket,照你这意思,于此socket对应的request进行abort(),是不是就可以了?
    我不知道你的request是一个还是每个连接一个。
      

  12.   


    你好。不是request。而是直接使用socket的异步接收方法。其他都正常。就是路由限制了我的机只能创建几千连接。而大量time_wait就耗光了资源
      

  13.   

    socket都要设置 SO_REUSEADDR属性if( setsockopt(listenfd, SOL_SOCKET, SO_REUSEADDR, &flag, len) == -
    1) 
       { 
          perror("setsockopt"); 
          exit(1); 
       } 
       if( bind(listenfd,(struct sockaddr*)&servaddr,sizeof(servaddr)) == 
    -1) 
       { 
          perror("bind"); 
          exit(1); 
       } 
       else 
          printf("bind call OK!\n"); 
      

  14.   


    你好。。这个方法没用呀。。在没有获得数据时不好判断接收队列里还有没有东西。只有在接收队列里还有东西存在,那怕一字节,socket.close()断开就会没有半连接出现。。我想只有先接收内容才能根据内容判断有没有呀