博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
网络编程Demo, 下载文件。
阅读量:4071 次
发布时间:2019-05-25

本文共 3434 字,大约阅读时间需要 11 分钟。

将以前一篇Demo调整下格式, 另外此代码不完善, 仅做网络通讯API测试Demo, 客户端接收数据有BUG,可能因为发送端发送太快, 以及接收端接收字节数量不对引起。

另外发现同一机器做测试Socket通讯数据为内存拷贝, 会导致原发送的文件大小有变化,变化数量跟实际发送的数据大小有关。

客户端代码

#include
#include
#include
#include
#include
#include
#include
#define BUFF_SIZE 100int main(int argv,char *args[]){ int servsock; struct sockaddr_in servaddr; if(argv!=3){ printf("Usage:%s
\n",args[0]); exit(1); } servsock = socket(PF_INET,SOCK_STREAM,0); if(servsock == -1) { printf("socket() error\n"); exit(1); } memset(&servaddr,0,sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_addr.s_addr = inet_addr(args[1]); servaddr.sin_port = htons(atoi(args[2])); if(connect(servsock,(struct sockaddr*)&servaddr,sizeof(servaddr)) ==-1) { printf("connect() error. %s:%s\n", args[1], args[2]); exit(1); }else{ printf("connected.....%s:%s\n", args[1], args[2]); } printf("please input filename:"); char filename[BUFF_SIZE]; memset(filename,0,sizeof(char)*BUFF_SIZE); scanf("%s",filename); write(servsock,filename,strlen(filename)); int successFlag; read(servsock,&successFlag,sizeof(successFlag)); if(successFlag!=1){ printf("input file is not existed!\n successFlag is %d\n",successFlag); exit(1); }else{ FILE *fp = fopen(filename,"w"); while(1){ memset(filename,0,BUFF_SIZE); int revlen = read(servsock,filename,BUFF_SIZE); if(revlen ==0) break; fputs(filename,fp); } fclose(fp); printf("complete!\n"); } close(servsock); return 0;}

服务端代码

#include
#include
#include
#include
#include
#include
#include
#define MAX_SEND_LENGTH 65536int main(int argv,char *args[]){ int servsock,clntsock; struct sockaddr_in servaddr,clntaddr; if(argv!=2){ printf("Usage:%s
\n", args[0]); exit(1); } servsock = socket(PF_INET,SOCK_STREAM,0); memset(&servaddr,0,sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_addr.s_addr = htonl(INADDR_ANY); servaddr.sin_port = htons(atoi(args[1])); if(bind(servsock,(struct sockaddr*)&servaddr,sizeof(servaddr)) ==-1) { printf("bind() error\n"); exit(1); } if(listen(servsock,5) ==-1) { printf("listen() error %s\n", args[1]); exit(1); } else { printf("socket listen to %s\n", args[1]); } socklen_t len = sizeof(clntaddr); clntsock = accept(servsock, (struct sockaddr*)&clntaddr, &len); char filename[100]; memset(filename, 0, 100); read(clntsock, filename, 100); printf("receiver filename is: %s\n",filename); FILE *fp = fopen(filename, "r+b"); int successFlag = 1; if(!fp) { successFlag = 0; write(clntsock, &successFlag, sizeof(successFlag)); printf("NULL\n"); close(clntsock); close(servsock); return 0; } write(clntsock, &successFlag, sizeof(successFlag)); fseek(fp, 0, SEEK_END); uint32_t uDataLen = ftell(fp); fseek(fp, 0, SEEK_SET); printf("will be send data: %s, len = %u Byte\n", filename, uDataLen); uint8_t * ptempFileData = new uint8_t[uDataLen]; uint8_t * pSendBuffer = new uint8_t[uDataLen]; fread(ptempFileData, 1, uDataLen, fp); memcpy(pSendBuffer, ptempFileData, uDataLen); delete ptempFileData; uint32_t cursor = 0; while(cursor < uDataLen) { uint32_t sendLen = uDataLen - cursor; if(sendLen > MAX_SEND_LENGTH) sendLen = MAX_SEND_LENGTH; cursor += sendLen; write(clntsock, pSendBuffer + cursor, sendLen); printf("sent length: %d Byte\n", cursor); } printf("sent complete: %d Byte\n", uDataLen); fclose(fp); delete pSendBuffer; close(clntsock); close(servsock); return 0;}

转载地址:http://frhji.baihongyu.com/

你可能感兴趣的文章
我们发送一个请求时,服务端的javax.servlet.http.HttpServletRequest帮我们做了什么?
查看>>
一、实现多线程的三种方式
查看>>
新手报到第一天
查看>>
折半查找法
查看>>
VirtualBox安装Centos6.4不能为虚拟电脑打开一个新的任务
查看>>
Virtual 下安装CentOs6.4
查看>>
CentOS下配置软RAID
查看>>
GET http://test01.com/jquery-1.9.1.min.js [HTTP/1.1 404 Not Found 3ms]
查看>>
echo(),print(),print_r()之间的区别?
查看>>
jQuery中$('#selector).html('')是清空??----html()、text()、val()的区别
查看>>
欢迎使用CSDN-markdown编辑器
查看>>
Python使用web.py读取Mysql的数据
查看>>
web.py操作mysql的数据
查看>>
python类的详析
查看>>
web.py的两种更新Mysql数据的方法
查看>>
前端网址总结
查看>>
前端知识总结一
查看>>
Python 字符串的操作
查看>>
python安装依赖modules pysnmp pyasn1.type pexpect configparser
查看>>
Python操作Mongodb插入数据的两种方法:insert_one()与insert_many()
查看>>