QT中点击一个按钮把文本栏的IP地址传递到另一个线程中,并完成对数值的更改赋值。或直接传递一个标志位,数据我提前进行写死操作完成对数据的传输。我想用信号与槽机制,但设计到不同线程之间转换,要传递过去的函数已经写好了,新建一个槽函数会让线程不好运行。
// 发送ARP报文
void ArpSendThread::run()
{
if( this->mAdapterHandle == nullptr){
qDebug() << "网卡设备没有开启";
return;
}
char tmp[18] = {0};
Utils::macToHexString(this->mMacAddr,tmp);//hex形式的mac
qDebug() <<"begin:" << tmp;
// 构造ARP请求包 ,2字节及以上的 存在大小端对齐问题,需要转换为网络字节序
ArpPackage package;
// 以太网 头部
uint64_t ethBroadcastAddr = 0xffffffffffff;// 6字节 以太网 广播地址,局域网主机无条件接受
memcpy(package.ethHead.destEthAddr,ðBroadcastAddr,6);
memcpy(package.ethHead.srcEthAddr,this->mMacAddr,6);
package.ethHead.frameType = htons(0x0806);
memset(tmp,0,18);
Utils::macToHexString(this->mMacAddr,tmp);
qDebug() <<"origin:" << tmp;//起始的mac
memset(tmp,0,18);
Utils::macToHexString(package.ethHead.srcEthAddr,tmp);
qDebug() <<"now:" << tmp;
// 构造ARP请求体内容
package.arpBody.hardType = htons(1);// 以太网类型
package.arpBody.protocolType = htons(0x0800); // IP地址
package.arpBody.hardLen = 6;
package.arpBody.protocolLen = 4;//IP地址长度
package.arpBody.op = htons(1);//1是请求;2是应答
memcpy(package.arpBody.srcEthAddr,this->mMacAddr,6);
// 硬件厂商 Mac地址 http://standards-oui.ieee.org/oui/oui.txt
Utils::htonN(reinterpret_cast<uint8_t*>(&(this->mCurIPAddr)),package.arpBody.srcIpAddr,4);
memset(package.arpBody.destEthAddr,0,6);
//设置padd++++++++++
if(uipflag != 1){
memset(package.arpBody.padd,1,10);
package.arpBody.padd[0] = 'X';
package.arpBody.padd[1] = 'J';
package.arpBody.padd[2] = 'X';
package.arpBody.padd[3] = 'Y';
}

没看懂,直接发过去不就完事了么