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

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

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

Post by fengzhu2007 »

在使用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
Experienced Solver
Experienced Solver
Posts: 57
Joined: Mon May 15, 2017 10:11 am

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

Post by Ellan »

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

Best Regards

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

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

Post by fengzhu2007 »

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