NVIDIA Jetson TX1 系列开发教程之十一:TCP/IP文件传输
来源:互联网 发布:js log 编辑:程序博客网 时间:2024/05/22 15:58
NVIDIA Jetson TX1 系列开发教程之十一:TCP/IP文件传输
- 转载请注明作者和出处:http://blog.csdn.net/u011475210
- 嵌入式平台:NVIDIA Jetson TX1
- 嵌入式系统:Ubuntu16.04
- 虚拟机系统:Ubuntu14.04
- 编者: WordZzzz
写在前面:
本篇博文设计的内容是TCP/IP文件传输,只是简单的实现文档、图片等二进制文件的传输,并将大包进行分包发送,不涉及select等机制。
一、服务端程序:
/* * common.h * * Created on: Aug 11, 2017 * Author: wordzzzz */#ifndef COMMON_H_#define COMMON_H_#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <string.h>#include <sys/types.h>#include <sys/stat.h>#include <sys/socket.h>#include <netinet/in.h>#define PORT 6000#define LISTENQ 20#define BUFFSIZE 4096#define FILE_NAME_MAX_SIZE 512#endif /* COMMON_H_ */
/* * fileserver.c * * Created on: Aug 11, 2017 * Author: wordzzzz */#include "common.h"int main(int argc, char **argv[]){ //Create socket int sockfd,connfd; struct sockaddr_in svraddr,clientaddr; bzero(&svraddr,sizeof(svraddr)); bzero(&clientaddr,sizeof(clientaddr)); svraddr.sin_family=AF_INET; svraddr.sin_addr.s_addr=htonl(INADDR_ANY); svraddr.sin_port=htons(PORT); sockfd=socket(AF_INET,SOCK_STREAM,0); if(sockfd<0) { perror("socket"); exit(1); } //bind if(bind(sockfd,(struct sockaddr*)&svraddr,sizeof(svraddr))<0) { perror("bind"); exit(1); } //listen if(listen(sockfd,LISTENQ)<0) { perror("listen"); exit(1); } while(1) { socklen_t clientaddrlen=sizeof(clientaddr); //accept connfd=accept(sockfd,(struct sockaddr*)&clientaddr,&clientaddrlen); if(connfd<0) { perror("connect"); exit(1); } //recv file imformation char buff[BUFFSIZE]; char filename[FILE_NAME_MAX_SIZE]; int count; bzero(buff,BUFFSIZE); count=recv(connfd,buff,BUFFSIZE,0); if(count<0) { perror("recv"); exit(1); } strncpy(filename,buff,strlen(buff)>FILE_NAME_MAX_SIZE?FILE_NAME_MAX_SIZE:strlen(buff)); printf("Preparing recv file : %s\n",filename); //recv file FILE *fd=fopen(filename,"wb+"); if(NULL==fd) { perror("open"); exit(1); } bzero(buff,BUFFSIZE); int length=0; while(length=recv(connfd,buff,BUFFSIZE,0)) { if(length<0) { perror("recv"); exit(1); } int writelen=fwrite(buff,sizeof(char),length,fd); if(writelen<length) { perror("write"); exit(1); } bzero(buff,BUFFSIZE); } printf("Receieved file:%s finished!\n",filename); fclose(fd); close(connfd); } close(sockfd); return 0;}
二、客户端程序:
/* * fileclient.c * * Created on: Aug 11, 2017 * Author: wordzzzz */#include "common.h"int main(int argc, char **argv[]){ int clientfd; if(argc!=3) { fprintf(stderr,"Usage:./fileclient <IP_Address> <filename>\n"); exit(1); } //Input the file name char filename[FILE_NAME_MAX_SIZE]; bzero(filename,FILE_NAME_MAX_SIZE); strcpy(filename, argv[2]); struct sockaddr_in clientaddr; bzero(&clientaddr,sizeof(clientaddr)); clientaddr.sin_family=AF_INET; clientaddr.sin_addr.s_addr=htons(INADDR_ANY); clientaddr.sin_port=htons(0); clientfd=socket(AF_INET,SOCK_STREAM,0); if(clientfd<0) { perror("socket"); exit(1); } //bind if(bind(clientfd,(struct sockaddr*)&clientaddr,sizeof(clientaddr))<0) { perror("bind"); exit(1); } struct sockaddr_in svraddr; bzero(&svraddr,sizeof(svraddr)); if(inet_aton(argv[1],&svraddr.sin_addr)==0) { perror("inet_aton"); exit(1); } svraddr.sin_family=AF_INET; svraddr.sin_port=htons(PORT); socklen_t svraddrlen=sizeof(svraddr); if(connect(clientfd,(struct sockaddr*)&svraddr,svraddrlen)<0) { perror("connect"); exit(1); } //send file imformation char buff[BUFFSIZE]; int count; bzero(buff,BUFFSIZE); strncpy(buff,filename,strlen(filename)>FILE_NAME_MAX_SIZE?FILE_NAME_MAX_SIZE:strlen(filename)); count=send(clientfd,buff,BUFFSIZE,0); if(count<0) { perror("Send file information"); exit(1); } //read file FILE *fd=fopen(filename,"rb"); if(fd==NULL) { printf("File :%s not found!\n",filename); } else { bzero(buff,BUFFSIZE); int file_block_length=0; while((file_block_length=fread(buff,sizeof(char),BUFFSIZE,fd))>0) { printf("file_block_length:%d\n",file_block_length); if(send(clientfd,buff,file_block_length,0)<0) { perror("Send"); exit(1); } bzero(buff,BUFFSIZE); } fclose(fd); printf("Transfer file finished !\n"); } close(clientfd); return 0;}
系列教程持续发布中,欢迎订阅、关注、收藏、评论、点赞哦~~( ̄▽ ̄~)~
完的汪(∪。∪)。。。zzz
阅读全文
0 0
- NVIDIA Jetson TX1 系列开发教程之十一:TCP/IP文件传输
- NVIDIA Jetson TX1 系列开发教程之五:CAFFE安装与NVIDIA多媒体例程测试
- NVIDIA Jetson TX1 系列开发教程之一:开箱测试
- NVIDIA Jetson TX1 系列开发教程之二:刷机与开发前准备
- NVIDIA Jetson TX1 系列开发教程之三:Nsight Eclipse Edition基础
- NVIDIA Jetson TX1 系列开发教程之四:Nsight Eclipse Edition进阶
- NVIDIA Jetson TX1 系列开发教程之六:SSD安装与测试
- NVIDIA Jetson TX1 系列开发教程之七:FFMPEG安装与测试
- NVIDIA Jetson TX1 系列开发教程之八:Qt安装与配置
- NVIDIA Jetson TX1 系列开发教程之九:USB摄像头MJPEG格式图像采集
- NVIDIA Jetson TX1 系列开发教程之十:V4L2+OpenCV2.4.13实现预览、拍照功能
- NVIDIA Jetson TX1 系列开发教程之十二:libcurl、RapidJSON安装
- NVIDIA Jetson TX1 系列开发教程之十三:使用OpenCV在图像上添加汉字
- NVIDIA Jetson TX1 系列开发教程之十四:YOLO安装与优化加速
- NVIDIA嵌入式开发板Jetson TX1教程
- 【并行计算-CUDA开发】 NVIDIA Jetson TX1
- Jetson TX1 NVIDIA CUDA
- NVIDIA Jetson Tx1(1)
- 高斯消元
- 201612-1 中间数
- LintCode_单词接龙
- CPU使用率
- jsp/html页面图片上传并展示上传的图片
- NVIDIA Jetson TX1 系列开发教程之十一:TCP/IP文件传输
- caffe安装以及LeNet实现手写数字体识别
- 操作DOM
- c++的异常处理
- [排序] 希尔排序(Python)
- 穷举法
- 数学建模常规方法
- 二分图匹配水题列表
- John’s Inversions 2011-2012 ACM-ICPC, NEERC, Northern Subregional Contest