当前位置: 首页 > news >正文

做百度推广送的网站网站栏目策划方案

做百度推广送的网站,网站栏目策划方案,微餐饮网站建设,垡头做网站的公司程序要实现的功能#xff1a;client 从 server 下载一个文件并保存到本地。 编写这个程序需要注意两个问题#xff1a; #xff08;1#xff09;文件大小不确定 有可能比缓冲区大很多#xff0c;调用一次 write()/send() 函数不能完成文件内容的发送。接收数据时也会遇…程序要实现的功能client 从 server 下载一个文件并保存到本地。 编写这个程序需要注意两个问题 1文件大小不确定 有可能比缓冲区大很多调用一次 write()/send() 函数不能完成文件内容的发送。接收数据时也会遇到同样的情况。 要解决这个问题可以使用 while 循环例如 //Server 代码 int nCount; while( (nCount fread(buffer, 1, BUF_SIZE, fp)) 0 ){ send(sock, buffer, nCount, 0); } //Client 代码 int nCount; while( (nCount recv(clntSock, buffer, BUF_SIZE, 0)) 0 ){ fwrite(buffer, nCount, 1, fp); } 对于 Server 端的代码当读取到文件末尾fread() 会返回 0从而结束循环。 但对于 Client 端代码有一个关键的问题读取完缓冲区中的数据后 recv() 并不会返回 0而是被阻塞直到缓冲区中再次有数据。也就是说客户端的recv函数因为阻塞而没有返回值卡在循环判断语句处。在文件传输完成后如何让 recv() 返回 0结束 while 循环呢 2Client 端何时结束 while 循环 Client 端 的 recv() 函数返回 0 的唯一时机就是收到 Server 端 发给它 FIN 包的时候。 FIN 包表示数据传输完毕Client 端收到 FIN 包后就知道 Server 端不会再向自己传输数据当调用 read()/recv() 函数时如果缓冲区中没有数据就会返回 0表示读到了”socket文件的末尾“。 那么如何让 Server 端发出FIN包呢这里我们调用 shutdown() 来发送FIN包。 server 端直接调用 close()/closesocket() 会使输出缓冲区中的数据失效文件内容很有可能没有传输完毕连接就断开了而调用 shutdown() 会等待输出缓冲区中的数据传输完毕。 本节以Windows为例演示文件传输功能Linux与此类似不再赘述。请看下面完整的代码。 服务器端 server.cpp #include stdio.h #include stdlib.h #include winsock2.h #pragma comment (lib, ws2_32.lib) //加载 ws2_32.dll#define BUF_SIZE 1024int main(){ //先检查文件是否存在 char *filename D:\\send.avi; //文件名 FILE *fp fopen(filename, rb); //以二进制方式打开文件 if(fp NULL){ printf(Cannot open file, press any key to exit!\n); system(pause); exit(0); }WSADATA wsaData; WSAStartup( MAKEWORD(2, 2), wsaData); SOCKET servSock socket(AF_INET, SOCK_STREAM, 0);struct sockaddr_in sockAddr; memset(sockAddr, 0, sizeof(sockAddr)); sockAddr.sin_family PF_INET; sockAddr.sin_addr.s_addr inet_addr(127.0.0.1); sockAddr.sin_port htons(1234); bind(servSock, (SOCKADDR*)sockAddr, sizeof(SOCKADDR)); listen(servSock, 20);SOCKADDR clntAddr; int nSize sizeof(SOCKADDR); SOCKET clntSock accept(servSock, (SOCKADDR*)clntAddr, nSize);//循环发送数据直到文件结尾 char buffer[BUF_SIZE] {0}; //缓冲区 int nCount; while( (nCount fread(buffer, 1, BUF_SIZE, fp)) 0 ){ send(clntSock, buffer, nCount, 0); }shutdown(clntSock, SD_SEND); //文件读取完毕断开输出流向客户端发送FIN包 recv(clntSock, buffer, BUF_SIZE, 0); //阻塞等待客户端接收完毕fclose(fp); closesocket(clntSock); closesocket(servSock); WSACleanup();system(pause); return 0; } 客户端代码 #include stdio.h #include stdlib.h #include WinSock2.h #pragma comment(lib, ws2_32.lib)#define BUF_SIZE 1024int main(){ //先输入文件名看文件是否能创建成功 char filename[100] {0}; //文件名 printf(Input filename to save: ); gets(filename); FILE *fp fopen(filename, wb); //以二进制方式打开创建文件 if(fp NULL){ printf(Cannot open file, press any key to exit!\n); system(pause); exit(0); }WSADATA wsaData; WSAStartup(MAKEWORD(2, 2), wsaData); SOCKET sock socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);struct sockaddr_in sockAddr; memset(sockAddr, 0, sizeof(sockAddr)); sockAddr.sin_family PF_INET; sockAddr.sin_addr.s_addr inet_addr(127.0.0.1); sockAddr.sin_port htons(1234); connect(sock, (SOCKADDR*)sockAddr, sizeof(SOCKADDR));//循环接收数据直到文件传输完毕 char buffer[BUF_SIZE] {0}; //文件缓冲区 int nCount; while( (nCount recv(sock, buffer, BUF_SIZE, 0)) 0 ){ fwrite(buffer, nCount, 1, fp); } puts(File transfer success!);//文件接收完毕后直接关闭套接字无需调用shutdown() fclose(fp); closesocket(sock); WSACleanup(); system(pause); return 0; } 在D盘中准备好send.avi文件先运行 server再运行 client Input filename to save: D:\\recv.avi↙ //稍等片刻后 File transfer success! 打开D盘就可以看到 recv.avi大小和 send.avi 相同可以正常播放。 注意 server.cpp 第42行代码recv() 并没有接收到 client 端的数据当 client 端调用 closesocket() 后server 端会收到FIN包recv() 就会返回后面的代码继续执行。
http://www.pierceye.com/news/230536/

相关文章:

  • wordpress typo3seo排名优化哪家好
  • 做pc端网站什么开头参考消息网国内新闻
  • 济南网站开发xywlcn宁波公司注册代理公司
  • 网站怎么找的中国外贸出口网站
  • 个人备案网站可以做商城吗做视频点播网站的要求
  • 那个网站点击率高域名解析大全
  • 做优化排名会不会影响网站速度广州网匠营销型网站建设公司
  • 南京林业大学实验与建设网站如何查询网站备案时间查询
  • 做食品网站有哪些凡科建站做的网站收录慢吗
  • 做平面还有什么素材网站集团网站建设
  • seo网站营销推广公司不错的免费网站建设
  • 怎么做自助交易网站平面设计师工资一般多少钱一个月
  • 网站建设如何运营seoul是什么意思
  • 51CTO学院个人网站开发视频营销策划包括哪些内容
  • 专做排名的网站wordpress样式乱了
  • 网站空间域名维护协议网站备案的意义
  • word可以做网站链接吗网站推广的基本方法有哪些
  • 公司展示型网站wordpress后台邮箱怎么设置
  • 小程序咸鱼之王2022年搜索引擎优化指南
  • 企业网站建设 价格wordpress汉化主题
  • 兰州市建设厅官方网站做网站用的编程工具
  • 网站建设及维护招聘周口航迪科技网站建设公司怎么样
  • 服装外贸网站建设discuz应用
  • flash个人网站欣赏网站营销单页怎么做
  • 设计网站用什么语言网站建设需求范文
  • seo织梦网站建设步骤昆明网络营销软件
  • 企业网站 静态页面成都设计公司邮箱
  • 创世网站建设 优帮云北京网站建设工作室
  • 网站空间提供商哪个网站可以做英文兼职
  • 社区网站制作平台网站建设调研报告