qt tcp接收缓冲区设置_详解 QT 多线程 TCP 文件接收服务器实例

本文介绍的是QT 多线程 TCP文件接收服务器实例,如果你想深入了解这方面的资料的话,请关注本文末尾,不多说,我们先来看内容。

因为项目需要,需要跨平台编写网络传输程序。

目标:

用户端:linux(arm平台),完成文件的传输

服务器:windows ,使用多线程的文件的接收

实现无线的文件传输功能

用户端程序,用标准的socket完成文件传输的功能,代码如下:

// Linux下网络编程,客户端程序代码

//程序运行参数:

// ./client IPADDRESS PORTNUMBER

// (其中IPADDRESS是服务端IP地址,PORTNUMBER是服务端用于监听的端口)

//

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

//用这个my_read()函数代替本来的read()函数原因有以下几点:

//

//ssize_t read(int fd,void *buf,size_t nbyte)

//read函数是负责从fd中读取内容。当读成功时,read返回实际所读的字节数;如果

//返回的值是0,表示已经读到文件的结束了;小于0表示出现了错误。

//

// 1)如果错误为EINTR说明read出错是由中断引起的,继续读。

// 2)如果是ECONNREST表示网络连接出了问题,停止读取。

size_t min(size_t a,size_t b)

{

return( (a

}

ssize_t my_write(int fd,void *buffer,size_t length)

{

size_t bytes_left; //尚未写的文件大小

size_twritesize=4* 1024;

ssize_t written_bytes; //已经写的文件大小

char *ptr;

ptr=buffer;

bytes_left=length;

while(bytes_left>0)

{

//开始写

written_bytes=write(fd,ptr,min(bytes_left,writesize));

//出现了写错误

if(written_bytes<=0)

{

//中断错误,置零重新写

if(errno==EINTR)

written_bytes=0;

//其他错误,退出不写了

else

return(-1);

}

//从剩下的地方继续写

bytes_left-=written_bytes;

ptr+=written_bytes;

}

return(0);

}

: int main(int argc, char *argv[])

{

int sockfd; //通信套接字描述符

char *buffer; //缓冲区

struct sockaddr_in server_addr; //服务器地址结构

struct hostent *host; //主机地址与名称信息结构

int nbytes; //端口号、字节数

FILE *fp; //文件指针

int nfilesize; //文件大小

char str[128]; //文件名

charyes='Y'; //流程控制

struct timeval tpstart,tpend; //用于记录文件传输时间

float timeuse; //文件传输所用时间

char *hostname="127.0.0.1";//主机名/ip地址

intportnumber=4321;//端口号

//提示用户输入完整的命令行参数

if(argc!=3)

{

fprintf(stderr,"Usage:%s hostname portnumber\a\n",argv[0]);

printf("using defaults:\nhostname: %s\nportnumber: %d\n",hostname,portnumber);

}

//如果利用用户输入的域名无法获得正确的主机地址信息,则退出

if (argc>1)

{

if((host=gethostbyname(argv[1]))==NULL)

{

fprintf(stderr,"Gethostname error\n");

exit(1);

}

}

else

if((host=gethostbyname(hostname))==NULL)

{

fprintf(stderr,"Gethos

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值