+ -
当前位置:首页 → 问答吧 → Socket Send Receive 问题

Socket Send Receive 问题

时间:2011-12-17

来源:互联网

CSocket Send代码:

  UpdateData();//从编辑框获取数据m_str
  int ilen = m_str.GetLength();
  int nLen = m_socketCon.Send(m_strMsg,iLen);
  if(nLen != SOCKET_ERROR)
  {
  //Do some UI Work
  }


CSocket Receive代码
  TCHAR buff[4096];
int nRead;
nRead = m_socketCon.Receive(buff, 4096); 
  if(nRead != SOCKET_ERROR)
  {
  buff[nRead] = NULL; //terminate the string
CString strTemp(buff);
  // DO SOME UI Work
  }

想问为什么环境在Use Multi-Byte Character Set下就能正确接收,但是在Use Unicode Character Set下会出现接收不正确情况。想问下此时应该怎么接收

作者: vipshenji   发布时间: 2011-12-17

int nLen = m_socketCon.Send(m_strMsg,iLen);

以及 接收方的

buff[nRead] = NULL; //terminate the string

有问题。

你改变项目的字符设定,导致条件编译TCHAR的生成是不一样的。在第1句里,记住,写流(磁盘文件、套接字、等等)的单位永远是字节,而你得到的iLen是字符数,不是字节数,你应该用iLen乘以sizeof(TCHAR)即可得到字节数。

第2句的错误也是如此,你得到nRead是字节数,不是字符数。

之所以你用“Use Multi-Byte Character Set”设置可以正确运行,是因为sizeof(TCHAR)为1,1乘以任何数都等于那个数,而你改变设置后,则不为1了。


作者: sinservice   发布时间: 2011-12-18