BOOL WSAGetOverlappedResult(
  SOCKET s,
  LPWSAOVERLAPPED lpOverlapped,
  LPDWORD lpcbTransfer,
  BOOL fWait,
  LPDWORD lpdwFlags
);这个函数中的参数lpcbTransfer是获取客户端发过来字符串的长度;int WSARecv(
  SOCKET s,
  LPWSABUF lpBuffers,
  DWORD dwBufferCount,
  LPDWORD lpNumberOfBytesRecvd,
  LPDWORD lpFlags,
  LPWSAOVERLAPPED lpOverlapped,
  LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine
);这个函数中的lpBuffers是活的具体的字符串的值;
 
问题是:
 假如客户端传递一个'\0', 那么函数WSAGetOverlappedResult中的参数lpcbTransfer好像没有反应,当然函数WSARecv也没有接收到该字符,请问这是怎么回事?

解决方案 »

  1.   

    \0当然可以发出去,我估计你发送代码中必然使用了和字符串相关的函数。一旦你希望发送\0,任何和字符串相关的函数(如strlen)和类(如std::string)都不得使用
      

  2.   

    socket 在read中
    阻塞
    while(!i)
    i = sock_read();
      

  3.   

    1L说法是错误的,TCP当然可以传0
      

  4.   

    我没有用其他函数,客户端就传递了'\0',从函数WSAGetOverlappedResult中了解到参数lpOverlapped就是获得字符串的长度,可是什么反应也没有。
      

  5.   

    如何客户端传递'\0'
    可是函数WSAGetOverlappedResult中的参数lpOverlapped没有获得该字符的长度,也就是该参数没有得到任何值。
      

  6.   

    发送端传送:byte zeroX[2]={'a','\0'}没有问题。接收端接收的字符a
    如果传送:byte zeroX[2]={'\0','\0'}那么接收端就没有什么反应。