Page 1 of 1

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

Posted: Sun Sep 24, 2017 1:55 pm
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处理 
这样可以保证数据的完整 但是感觉这样效率并不是很高。
请问有没有更好的解决办法!

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

Posted: Tue Sep 26, 2017 2:32 am
by Ellan
你使用strlen的时候肯定计算出来的长度不对,你是不是应该使用socket read的返回值作为接收字符串的长度

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

Posted: Tue Sep 26, 2017 2:43 am
by fengzhu2007
已经解决,
根据读取的长度 进行mask操作 然后在把数据保存到string 里面就没问题了。
谢谢!