wxsocket Read读取数据遇到\0字符串被截断的问题

这是wxWidgets论坛的中文版本。在这里,您可以用您的母语汉语讨论上面任一子论坛所涉及的所有关于wxWidgets的话题。欢迎大家参与到对有价值的帖子的中英互译工作中来!
fengzhu2007
In need of some credit
In need of some credit
Posts: 3
Joined: Sun Sep 24, 2017 12:56 pm

wxsocket Read读取数据遇到\0字符串被截断的问题

Postby fengzhu2007 » Sun Sep 24, 2017 1:55 pm

在使用wxSocket做websocket服务端时候在接收数据遇到\0时,字符串会被自动截断。

Code: Select all

int payloadLen = 1000;
char* buffer = new char[payloadLen];
socket->Read(buffer,payloadLen);
int buffSize = strlen(buffer);
int readSize = socket->LastReadCount();
//当接收的数据有\0时,导致buffer截断,buffer只有\0之前的内容。

改进的办法

Code: Select all

int payloadLen = 1000;
vector<char>payloadArray;
for(int i=0;i<payloadLen;i++){
   char d;
   socket->Read(&d,1);
   if(socket->LastReadCount()==1){
      payloadArray.push_back(d);
   }
}
//之后进行 mask处理

这样可以保证数据的完整 但是感觉这样效率并不是很高。
请问有没有更好的解决办法!

Ellan
Knows some wx things
Knows some wx things
Posts: 44
Joined: Mon May 15, 2017 10:11 am

Re: wxsocket Read读取数据遇到\0字符串被截断的问题

Postby Ellan » Tue Sep 26, 2017 2:32 am

你使用strlen的时候肯定计算出来的长度不对,你是不是应该使用socket read的返回值作为接收字符串的长度
Thanks

Best Regards

Ellan

fengzhu2007
In need of some credit
In need of some credit
Posts: 3
Joined: Sun Sep 24, 2017 12:56 pm

Re: wxsocket Read读取数据遇到\0字符串被截断的问题

Postby fengzhu2007 » Tue Sep 26, 2017 2:43 am

已经解决,
根据读取的长度 进行mask操作 然后在把数据保存到string 里面就没问题了。
谢谢!


Return to “wxWidgets Development (Chinese)”

Who is online

Users browsing this forum: No registered users and 1 guest