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相关推荐

  1. Qt 调用 Windows 接口实现窗口置顶

    前言 用 Qt 做 Windows 软件开发,有时候会用到窗口置顶功能,其实 Qt 有自带的接口来实现窗口置顶,但是效果并不太理想,比如说没办法置顶于系统标题栏,或者在全屏状态下如果有键盘事件的时候窗 ...

  2. Qt使用QAxWidget调用Windows组件记录

    1.播放视频.音频 调用Windows Media Player - https://blog.csdn.net/Mr_robot_strange/article/details/119669825 ...

  3. 计算机网络原理 实验1 《Windows Socket编程》

    计算机网络原理 实验1 <Windows Socket编程> 一.实验目的 通过实验,熟悉并掌握计算机Windows 编程的基本知识,进一步加深对课堂所学基本内容的理解,掌握基本的Wind ...

  4. qt 下 原生socket tcp 基本用法

    qt中使用socket, 首先要包含windows.h头文件 还要在pro文件中,增加:LIBS += -lpthread libwsock32 libws2_32 引入相关函数的库 TCP 稳定传输 ...

  5. 【★更新★】高性能 Windows Socket 服务端与客户端组件(HP-Socket v2.0.1 源代码及测试用例下载)...

    HP-Socket 以前为某大型通信项目开发了一套通用 Windows Socket TCP 底层通信组件,组件代号为 HP-Socket.现在把 HP-Socket 的所有代码向大众公开,希望能对大 ...

  6. Windows Socket五种I/O模型——代码全攻略

    如果你想在Windows平台上构建服务器应用,那么I/O模型是你必须考虑的.Windows操作系统提供了选择(Select).异步选择(WSAAsyncSelect).事件选择(WSAEventSel ...

  7. 通用异步 Windows Socket TCP 客户端组件的设计与实现

    编写 Windows Socket TCP 客户端其实并不困难,Windows 提供了6种 I/O 通信模型供大家选择.但本座看过很多客户端程序都把 Socket 通信和业务逻辑混在一起,剪不断理还乱 ...

  8. 高性能 Windows Socket 组件 HP-Socket v2.3.1-beta-1 发布

    HP-Socket 是一套通用的高性能 Windows Socket 组件包,包含服务端组件(IOCP 模型)和客户端组件(Event Select 模型),广泛适用于 Windows 平台的 TCP ...

  9. Windows Socket五种I/O模型

    如果你想在Windows平台上构建服务器应用,那么I/O模型是你必须考虑的.Windows操作系统提供了Select.WSAAsyncSelect.WSAEventSelect.Overlapped ...

  10. Windows Socket五种I/O模型详细介绍(精)

    如果你想在Windows平台上构建服务器应用,那么I/O模型是你必须考虑的.Windows操作系统提供了选择(Select).异步选择(WSAAsyncSelect).事件选择(WSAEventSel ...

最新文章

  1. Crystal Reports图表(上)
  2. wince注册表结构
  3. 10g物理standby主备switchover方式切换详述
  4. mysql特别点_Mysql 特别注意点!
  5. VTK:可视化之LabelContours
  6. flink实时同步mysql_基于Canal与Flink实现数据实时增量同步(一)
  7. python源码笔记_python源码学习笔记(二)
  8. python中的装饰器和抽象类
  9. linux mint 19界面美化,安装完 LinuxMint 19.3 后必做的10件事
  10. 礼物gift(DP)
  11. 参数数组(params)的用法
  12. 10个python爬虫入门实例(小结)
  13. Windows自带工具提取颜色得到十六进制颜色码
  14. 工作两年前端经验分享
  15. matlab 小波变换程序,matlab 小波变换
  16. Java mail outlook发邮件提示升级TLS1.2
  17. 网页连接至数据库(asp->mdb)
  18. EXCEL中实现16进制MAC的下拉
  19. AI 与合成生物学「联姻」的五大挑战:技术、数据、算法、评估与社会学
  20. 算法中的最优化方法总结(中国科学院大学)

热门文章

  1. Centos7安装Docker并配置镜像加速器
  2. c语言rank函数使用实例,rank函数实例(1)
  3. C语言实现15折线U律,Windows程序的设计(C语言)实训报告
  4. 2,2,2,2-((ethene-1,1,2,2-tetrakis(benzene-4,1-diyl))tetrakis-(oxy)tetraacetic acid 2,2,2,2-四(乙烯基-苯氧
  5. 红警2 技术篇 地图基础ini 教程
  6. Linux 脚本修改ps1,Ubuntu修改命令提示符PS1教程(非常详细)
  7. 中国奶茶成海外消费者“囤货标配”;SK海力士将推进对英特尔大连芯片厂收购 | 美通企业日报...
  8. unity android录制视频教程,Unity移动端视频录制,Android和IOS都支持
  9. 戴尔_从偶像派到实力派【我身边的戴尔企业级解决方案】
  10. 局域网传输文件详解(转)