1.Qt
变量说明:
char msg : 用于存储从socket读取的数据
head.length:这个变量也是右socket传过来,第一次先传长度(或包含长度的结构体)
int recvNum:用于存储read socket数据的实际长度;
(QTcpSocket mp_qTcpSocket; ->这个是指用于通讯的socket)
char* msg = new char[head.length];
int remainLen = head.length;//记录总长度,以及之后未读数据的长度
int recvNum = 0;//用于记录read实际从缓冲区读取到的数据长度
int offset = 0;//read读取数据后内存地址的指向的位置
while (remainLen > 0) {
//msg+offset指的是内存中指针的位置,第一次从0开始,之后每次都从上次读取数据总长度后面继续读取数据
recvNum = mp_qTcpSocket->read(msg + offset, remainLen);
if (recvNum == -1) {
//断开socket连接(判断errno,socket不可用需要重新断开重连)
tcp_disconnect();
} else if (recvNum == 0) {
//对端的连接断开,继续等待其他socket连接
qDebug() << "recvNum == 0" << endl;
continue;
} else {
//正常接收数据,返回从缓冲区