我在一个应用系统中,用非阻塞型socket可以与服务端正常通信,但用阻塞型的socket时却不能正常传输数据,这是为什么?什么时侯不能用阻塞型的socket?请高手指教!

解决方案 »

  1.   

    在 workstream.Write(mybuf,buflen); 时出错了。
      

  2.   

    如果服务断是阻塞的,那么客户端可以用阻塞也可一是非阻塞的。但是采用非阻塞则可能收不到流的最后几个字节,所以建议采用阻塞形式。阻塞形式中,应该采用TWinSocketStream的实例来接受和发送流,如:
    TheStream := TWinSocketStream.Create(CltSocket.Socket, 60000);
    ……————————————————————————————————————
    宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
    ————————————————————————————————————
      

  3.   

    老大,我知道用Twinsocketstream和waitfordata了,可是write过去时死活都不行啊。这是不是服务端不充许客户端用阻塞型socket?
      

  4.   

    我建议你使用Delphi6下的TIdTCPClient,用他的CurrentReadBuffer方法即刻。