甚么叫"就用一个新的winsock去accept",你用的是udp还是tcp
如果用新的,那localport怎么办?你在dataarrival事件中加doevents了吗?

解决方案 »

  1.   

    我有两点要说明:
    1.我用的是一个控件数组,用第一个sock(0)去listen,如果有请求到来的话,就:
    load sock(i)  '也就是新产生一个sock,它的任务就是接受请求
    再用sock(i)去 accept 本次请求2.经过调试,我发现在出现错误的时候跟本就不会进入dataarrival事件,因为这时client端的socket处于connecting状态,就更不用提发送数据了
      

  2.   

    你每次接数据时,数据的大小是多少?如果每次都是8192,那可能会造成缓冲区溢出(winsock缺省的是8192)
      

  3.   

    那就对了。你的sock(0)的localport是多少?sock(1)的localport是多少。如果一样,那后面的sock控件都没有用。因为sock bind时,端口只能用一次。
      

  4.   

    不好意思,好像错了。你的后面的sock的localport是0吧。
    出错的意思是该连接建立的是nonblock方式(异步),可是遇到阻塞。
      

  5.   

    我知道一个机器的同一个port只能bind一次,我前面已经说了我只是用sock(0)去listen,而是在sock(0)接收到connect请求时,才load一个新的sock(i)去accept这次connect请求,而不是再让sock(i)去bind。
    而且我在有间隔的情况下去发送请求是没有问题的,所以与bind跟本是无关的。至于sock(i)的localhost是多少,根本是没有影响的,因为他不bind,而只是accept
    我要多谢liyang对我的问题的关注,再次表示感谢,希望我们大家能在讨论互相得到提高
      

  6.   

    我也曾作过从服务器传送文件的程序,设计思想与你的完全一致,但没有出现过你遇到的问题。我认为可能跟你的网络传输速度有关,你可以在每次循环过程中利用API函数SLEEP暂停几毫秒,如下:
    For I=1 to N
    Winsock(index).SendData MyData
    Sleep(100)
    Next
    可能会解决你的问题。
    祝 成功
      

  7.   

    你得让出端口!
    我想你既然用控件数组,那么所有的SOCK的LOCALPORT是一样的。在SOCK(0)侦听到连接请求后必须CLOSE以便让出端口,同样在其他SOCK(I)ACCEPT和GETDATA后也要CLOSE一下。