mSocket = socket(PF_INET,SOCK_STREAM,IPPROTO_TCP); if(mSocket == INVALID_SOCKET){ ui->label->setText(QString("连接失败!!!")); ui->label->setStyleSheet("color:red;"); return; } mAddrStr = ui->lineEdit->text(); char ip[1024] = {0}; int port = 0; sscanf(mAddrStr.toUtf8().data(),"%[^:]:%d",ip,&port); qDebug() << ip; qDebug() << port; SOCKADDR_IN addr; addr.sin_family = PF_INET; addr.sin_port = htons((u_short)port); addr.sin_addr.S_un.S_addr = inet_addr(ip);//点分十进制转ip地址 int val = ::connect(mSocket,(SOCKADDR*)&addr,sizeof(addr)); int error; if( val == SOCKET_ERROR){ ui->label->setText(QString("连接失败!!!")); ui->label->setStyleSheet("color:red;"); error = WSAGetLastError(); qDebug() << "connect error:" << error; return; } ui->label->setText(QString("连接成功")); ui->label->setStyleSheet("color:orange;"); //创建处理和服务端通信的线程 mMsgThread = new MsgThread(mSocket); mMsgThread->start(); //信号槽连接 connect(this,&client::isSend,mMsgThread,&MsgThread::dealSend); connect(mMsgThread,&MsgThread::isMsg,this,&client::dealMsg); connect(mMsgThread,&MsgThread::isClose,this,&client::dealClose);什么意思
时间: 2024-04-05 09:30:59 浏览: 106
UDP传输.rar_EZI_UDP socket_VC6.0 UDP_vc6 udp_vc6.0 UDP socket
这段代码主要是用于建立客户端与服务器之间的连接,并且创建处理和服务器通信的线程。
首先,使用 socket() 函数创建一个套接字 mSocket,用于与服务器进行通信。如果创建失败,会在界面上显示连接失败的提示信息,并且返回。
然后,从界面上获取服务器的 IP 地址和端口号,并且使用 inet_addr() 函数将字符串类型的 IP 地址转换成二进制格式的 IP 地址。然后将 IP 地址和端口号填充到 SOCKADDR_IN 结构体中,调用 connect() 函数与服务器建立连接。如果连接失败,同样会在界面上显示连接失败的提示信息,并且返回。
如果连接成功,界面上会显示连接成功的提示信息,并且会创建一个 MsgThread 对象,该对象用于处理客户端和服务器之间的通信。然后会将客户端发送消息的信号与 MsgThread 对象的处理函数进行连接,将 MsgThread 对象接收到消息的信号与客户端的处理函数进行连接,将 MsgThread 对象关闭的信号与客户端的处理函数进行连接。
需要注意的是,在程序结束时,需要调用 closesocket() 函数关闭套接字,调用 WSACleanup() 函数释放 Winsock 资源。同时,需要等待 MsgThread 线程执行完成后,再将其停止并释放该对象。
阅读全文