#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
//winsock 初始化
WSAStartup(MAKEWORD(2,2),&mWasData);
}
Widget::~Widget()
{
::closesocket(mListen);
WSACleanup();
delete ui;
}
//启动服务器
void Widget::on_pushButton_clicked()
{
if(INVALID_SOCKET != mListen)
return;
//端口校验
QString str = ui->lineEdit->text();
QRegExp reg("[0-9]{1,5}");//0到65535
QRegExpValidator validator(reg,this);
int pos = 0;
if( QValidator::Acceptable != validator.validate(str,pos)){
ui->label_2->setText("启动失败!!!");
ui->label_2->setStyleSheet("color:red;");
return;
}
int port = str.toInt();
if( port < 0 || port > 65535){
ui->label_2->setText("启动失败!!!");
ui->label_2->setStyleSheet("color:red;");
return;
}
//创建套接字,正确返回有效的套接字
mListen = socket(PF_INET,SOCK_STREAM,IPPROTO_TCP);
int error;
if(mListen == INVALID_SOCKET){
error = WSAGetLastError();
qDebug() << "socket error:" << error;
return;
}
sockaddr_in addr;
addr.sin_family = PF_INET;
addr.sin_port = htons((u_short)port);
addr.sin_addr.S_un.S_addr = INADDR_ANY;//服务端可以这样写,主机的任意合适的地址
//绑定套接字和地址信息
int ret = bind(mListen,(sockaddr*)&addr,sizeof(addr));
if( ret == SOCKET_ERROR){
error = WSAGetLastError();
qDebug() << "bind error:" << error;
return;
}
//端口监听
ret = ::listen(mListen,SOMAXCONN);
if( ret == SOCKET_ERROR){
error = WSAGetLastError();
qDebug() << "listen error:" << error;
return;
}
ui->label_2->setText("启动成功");
ui->label_2->setStyleSheet("color:orange;");
//启动后台进程和客户端进行连接,必须这样,因为ui线程不能被阻塞!
mSocketThread = new SocketThread(mListen);
mSocketThread->start();
//信号槽连接
connect(mSocketThread,&SocketThread::isMsg,[=](QString msg){
ui->listWidget->addItem(msg);
});
}
void Widget::closeEvent(QCloseEvent *event){
if(mSocketThread != nullptr){
mSocketThread->requestInterruption();
mSocketThread->terminate();
qDebug() << "释放 mSocketThread";
mSocketThread->quit();
mSocketThread->wait();
delete mSocketThread;
}
}
void Widget::on_pushButton_2_clicked()
{
ui->listWidget->clear();
}
没有合适的资源?快使用搜索试试~ 我知道了~
Qt实现Winsock网络编程-Tcp服务端和客户端通信(多线程)示例demo
共17个文件
cpp:7个
h:5个
ui:2个
需积分: 5 0 下载量 194 浏览量
2024-11-12
11:38:01
上传
评论
收藏 12KB ZIP 举报
温馨提示
qt 【项目资源】:包含前端、后端、移动开发、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源,毕业设计等各种技术项目的源码。包括C++、Java、python、web、C#、EDA等项目的源码。 【适用人群】:适用于希望学习不同技术领域的初学者或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。
资源推荐
资源详情
资源评论
收起资源包目录
Qt实现Winsock网络编程—Tcp服务端和客户端通信(多线程)示例demo.zip (17个子文件)
myqtDemo
Socket_Tcp_Server
socketthread.cpp 2KB
widget.ui 2KB
widget.cpp 3KB
main.cpp 164B
Socket_Tcp_Server.pro 1KB
msgthread.cpp 1KB
msgthread.h 576B
socketthread.h 617B
widget.h 541B
Socket_Tcp_Client
widget.ui 2KB
widget.cpp 2KB
main.cpp 164B
Socket_Tcp_Client.pro 1KB
msgthread.cpp 1KB
msgthread.h 479B
widget.h 643B
.gitignore 125B
共 17 条
- 1
资源评论
白话Learning
- 粉丝: 4601
- 资源: 2983
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功