ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

QT 读写线程编写

2022-04-13 04:31:05  阅读:209  来源: 互联网

标签:QT socketAddr 读写 socket 线程 函数 缓冲区 recv 255


小熊派:TCP服务器

QT:TCP客户端

环境:Win10  Qt 5.9.8

①pro文件加入 network  和

LIBS += -lpthread libwsock32 libws2_32

 

 

 

②工程目录下加入ws2_32文件   在C盘 window->system32->ws2_32

 

 

 

 

一、QT实现客户端

新建netWork类,继承object,可以发送信号(也可以不继承,不一定有用)

宏定义:


#define PORT 8888           //端口号
#define IP "192.168.199.xxx"   //小熊派开发板的ip

1、定义一个函数进行连接socket的操作

/************************************

函数名称:NetToBearpi()

函数参数:无

函数返回值:无

**********************************/

2、NetToBearpi实现

  ①在window下使用socket,需要加入:

   WORD sockVersion = MAKEWORD(2, 2);
    WSADATA data;
    if(WSAStartup(sockVersion, &data)!=0)
    {
        return ;
    }
  ②创建套接字
  SOCKET socketfd=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP)
  ③创建结构体
sockaddr_in socketAddr;
memset(&socketAddr,0,sizeof(socketAddr));
socketAddr.sin_family=AF_INET;
socketAddr.sin_addr.s_addr=inet_addr(IP);
socketAddr.sin_port=htons(PORT);
  ④connect连接
if(::connect(socketfd,(SOCKADDR*)&sockAddr,sizeof(sockAddr))== SOCK_EEOR);
{
  cout<<"连接失败"
}
  ⑤读取服务器传来的数据
  char recData[255];//定义字符串数组
  int ret=recv(socketfd,recData,255,0);// WINSOCK_API_LINKAGE int WSAAPI recv(SOCKET s,char *buf,int len,int flags);
/*******************************************************************************************************************
recv函数 的实质就是从socket的缓冲区里拷贝出数据 返回值就是拷贝出字节数的大小。
上面定义的载体(revData)大小是255,所以recv的第三个参数最大只能设置为255, 如果设置为大于255的数值,
当执行recv函数时恰好缓冲区的内容大于255, 就会导致内存泄漏,导致ret值小于零,解除阻塞状态。因此这里最好将第三个参数
设置为revData的大小,那么当缓冲区内的数据小于255的时候 只需要执行一次recv就可以将缓冲区的内容都拷贝出来,
但当缓冲区的数据大 于255的时候,就要执行多次recv函数。当缓冲区内没有内容的时候,会处于阻塞 状态,
这个while函数会停在这里。直到新的数据进来或者出现异常。 ************************************************************************/
  if(ret>0)
  {
    recData[ret]=0x00;//正常可以不这么写,为了字符输出需要
    printf(recData);
  }
  ⑥传递数据给服务器
  string buf="hello world";
  const char * sendData;
  sendData=buf.c_str();
  send(socketfd,sendData,strlen(sendData),0);
  
(5条消息) c语言socket 断线重连,Windows C语言 Socket编程 client端(客户端)--断线重连版_低调·Smile的博客-CSDN博客




 

 

  

 

标签:QT,socketAddr,读写,socket,线程,函数,缓冲区,recv,255
来源: https://www.cnblogs.com/hhy-2216/p/16138468.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有