QT 调用windows socket
pro添加
LIBS += -lws2_32#ifndef WINSOCKET_H
#define WINSOCKET_H#include <WinSock2.h>
#include <QThread>class WinSocket : public QThread
{Q_OBJECT
public:explicit WinSocket();~WinSocket();void init(QString localIp,int localPort);void sendData(char data[],int length,QString remoteIp,int remotePort);
private:SOCKET msocket;sockaddr_in localAddr;sockaddr_in recvAddr;sockaddr_in remoteAddr;bool initSuccess;char vrecvData[500];char vsendData[500];void run();
signals:void sendRecvData(char *data,int length,QString recvIp);
public slots:void dealRecvData(char *data,int length,QString recvIp);
};#endif // WINSOCKET_H#include "winsocket.h"
#include <QMessageBox>
#include <QDebug>
WinSocket::WinSocket()
{initSuccess=false;
}WinSocket::~WinSocket()
{if(initSuccess){::closesocket(msocket);::WSACleanup();requestInterruption();//要求中断wait();//等待线程释放}
}void WinSocket::init(QString localIp,int localPort)
{int retValue;//初始化网络环境WSADATA wsaData;WORD sockVersion = MAKEWORD(2, 2);retValue=::WSAStartup(sockVersion, &wsaData);if(retValue!=0){QMessageBox::information(NULL,"错误提示","Socket环境初始化失败");return;}//创建socketmsocket = ::socket(AF_INET, SOCK_DGRAM, 0);if (msocket == INVALID_SOCKET){QMessageBox::information(NULL,"错误提示","创建socket出错");::WSACleanup();return;}localAddr.sin_family = AF_INET;localAddr.sin_addr.s_addr = inet_addr(localIp.toLatin1());localAddr.sin_port = ::htons(localPort);//绑定函数retValue= ::bind(msocket, (struct sockaddr*)&localAddr, sizeof(sockaddr_in));if(retValue==-1){QMessageBox::information(NULL,"错误提示","绑定IP和端口出错");::closesocket(msocket);::WSACleanup();return;}//信号槽连接函数connect(this,SIGNAL(sendRecvData(char *,int,QString)),this,SLOT(dealRecvData(char *,int,QString)));//设置阻塞函数int imode =0;ioctlsocket(msocket,FIONBIO,(u_long FAR*)&imode);if(retValue==SOCKET_ERROR){QMessageBox::information(NULL,"错误提示","阻塞函数设置失败");::closesocket(msocket);::WSACleanup();return;}//线程调用start();initSuccess=true;
}void WinSocket::run()
{int length=0;int sockAddrSize=sizeof(sockaddr_in);while(false==this->isInterruptionRequested()){memset(vrecvData,0,500);length=0;length=::recvfrom(msocket, (char*)vrecvData,sizeof(vrecvData), 0, (struct sockaddr*)&recvAddr, &sockAddrSize);if(length!=-1){memcpy(vsendData,vrecvData,length);emit sendRecvData(vsendData,length,::inet_ntoa(recvAddr.sin_addr));}}
}void WinSocket::dealRecvData(char data[],int length,QString recvIp)
{qDebug()<<data<<" "<<length<<" "<<recvIp;
}void WinSocket::sendData(char data[],int length,QString remoteIp,int remotePort)
{if(initSuccess){remoteAddr.sin_family = AF_INET;remoteAddr.sin_addr.s_addr = ::inet_addr(remoteIp.toLatin1());remoteAddr.sin_port = ::htons(remotePort);::sendto(msocket, data,length,0, (sockaddr*)&remoteAddr,sizeof(sockaddr_in));}
}
QT 调用windows socket相关推荐
- Qt 调用 Windows 接口实现窗口置顶
前言 用 Qt 做 Windows 软件开发,有时候会用到窗口置顶功能,其实 Qt 有自带的接口来实现窗口置顶,但是效果并不太理想,比如说没办法置顶于系统标题栏,或者在全屏状态下如果有键盘事件的时候窗 ...
- Qt使用QAxWidget调用Windows组件记录
1.播放视频.音频 调用Windows Media Player - https://blog.csdn.net/Mr_robot_strange/article/details/119669825 ...
- 计算机网络原理 实验1 《Windows Socket编程》
计算机网络原理 实验1 <Windows Socket编程> 一.实验目的 通过实验,熟悉并掌握计算机Windows 编程的基本知识,进一步加深对课堂所学基本内容的理解,掌握基本的Wind ...
- qt 下 原生socket tcp 基本用法
qt中使用socket, 首先要包含windows.h头文件 还要在pro文件中,增加:LIBS += -lpthread libwsock32 libws2_32 引入相关函数的库 TCP 稳定传输 ...
- 【★更新★】高性能 Windows Socket 服务端与客户端组件(HP-Socket v2.0.1 源代码及测试用例下载)...
HP-Socket 以前为某大型通信项目开发了一套通用 Windows Socket TCP 底层通信组件,组件代号为 HP-Socket.现在把 HP-Socket 的所有代码向大众公开,希望能对大 ...
- Windows Socket五种I/O模型——代码全攻略
如果你想在Windows平台上构建服务器应用,那么I/O模型是你必须考虑的.Windows操作系统提供了选择(Select).异步选择(WSAAsyncSelect).事件选择(WSAEventSel ...
- 通用异步 Windows Socket TCP 客户端组件的设计与实现
编写 Windows Socket TCP 客户端其实并不困难,Windows 提供了6种 I/O 通信模型供大家选择.但本座看过很多客户端程序都把 Socket 通信和业务逻辑混在一起,剪不断理还乱 ...
- 高性能 Windows Socket 组件 HP-Socket v2.3.1-beta-1 发布
HP-Socket 是一套通用的高性能 Windows Socket 组件包,包含服务端组件(IOCP 模型)和客户端组件(Event Select 模型),广泛适用于 Windows 平台的 TCP ...
- Windows Socket五种I/O模型
如果你想在Windows平台上构建服务器应用,那么I/O模型是你必须考虑的.Windows操作系统提供了Select.WSAAsyncSelect.WSAEventSelect.Overlapped ...
- Windows Socket五种I/O模型详细介绍(精)
如果你想在Windows平台上构建服务器应用,那么I/O模型是你必须考虑的.Windows操作系统提供了选择(Select).异步选择(WSAAsyncSelect).事件选择(WSAEventSel ...
最新文章
- Crystal Reports图表(上)
- wince注册表结构
- 10g物理standby主备switchover方式切换详述
- mysql特别点_Mysql 特别注意点!
- VTK:可视化之LabelContours
- flink实时同步mysql_基于Canal与Flink实现数据实时增量同步(一)
- python源码笔记_python源码学习笔记(二)
- python中的装饰器和抽象类
- linux mint 19界面美化,安装完 LinuxMint 19.3 后必做的10件事
- 礼物gift(DP)
- 参数数组(params)的用法
- 10个python爬虫入门实例(小结)
- Windows自带工具提取颜色得到十六进制颜色码
- 工作两年前端经验分享
- matlab 小波变换程序,matlab 小波变换
- Java mail outlook发邮件提示升级TLS1.2
- 网页连接至数据库(asp->mdb)
- EXCEL中实现16进制MAC的下拉
- AI 与合成生物学「联姻」的五大挑战:技术、数据、算法、评估与社会学
- 算法中的最优化方法总结(中国科学院大学)
热门文章
- Centos7安装Docker并配置镜像加速器
- c语言rank函数使用实例,rank函数实例(1)
- C语言实现15折线U律,Windows程序的设计(C语言)实训报告
- 2,2,2,2-((ethene-1,1,2,2-tetrakis(benzene-4,1-diyl))tetrakis-(oxy)tetraacetic acid 2,2,2,2-四(乙烯基-苯氧
- 红警2 技术篇 地图基础ini 教程
- Linux 脚本修改ps1,Ubuntu修改命令提示符PS1教程(非常详细)
- 中国奶茶成海外消费者“囤货标配”;SK海力士将推进对英特尔大连芯片厂收购 | 美通企业日报...
- unity android录制视频教程,Unity移动端视频录制,Android和IOS都支持
- 戴尔_从偶像派到实力派【我身边的戴尔企业级解决方案】
- 局域网传输文件详解(转)