socket服务端发一条数据,客户端接收一条数据,但是如果服务端发2条数据,大小为2,客户端只用一条就可以接收完数据(接收大小为2),我想发一条,收一条可以吗?

解决方案 »

  1.   

    socket服务端发送用sendbuf,发送两次,每次大小为1B,客户端用receiveBuf,接收大小为2,我只用了一次就可以接收完
      

  2.   

    当然可以
    把NAGLE算法屏蔽掉就可以一条对一条了
    //屏蔽Nagle算法
    MYBOOL masknagle(SOCKET s, MYBOOL nodelay)
    {
    int ret; ret = setsockopt(s, IPPROTO_TCP, TCP_NODELAY, (char *)&nodelay, sizeof(nodelay)); if (ret == SOCKET_ERROR)
    {
    return WRONG;
    } return RIGHT;
    }
      

  3.   

    给nodelay参数传递一个非零值就可以了
      

  4.   

    在delphi中的TServerSocket和TClientSocket控件中如何设置
      

  5.   

    在接收的时候可以设置每次接收的长度:Socket.ReceiveBuf(var Buf; Count: Integer)