资源简介
代码为openwrt 路由器文件的传输。Linux C socekt文件传输 客户端和服务端代码
代码片段和文件信息
/******* 客户端程序 client.c ************/
// client
// client 192.168.1.1 1234 /root/filename
/************************************************/
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include // 文件读写
//#include //目录读取
// linux 下读取大于2GB文件时,需指定
#define _FILE_OFFSET_BITS 64
// 定义包的大小为512KB
#define PACK_SIZE 1024*512
char* get_file_name(char* fn);
unsigned long get_file_size(const char *path);
int main(int argc char *argv[])
{
if(argc < 3) {
printf(“please input: .\n“);
return 0;
}
// 设置输出缓冲
setvbuf(stdout NULL _IONBF 0);
fflush(stdout);
char* filePath = argv[3];
/*******************************************************************/
struct stat info;
stat(filePath&info);
if(S_ISDIR(info.st_mode)){ //判断是否为一个目录
printf(“This is a directory\n“);
return 0;
}
if(access(filePath F_OK) != 0){ //F_OK则是用来判断该文件是否存在
printf(“file not existed!\n“);
return 0;
}
/*******************************************************************/
int sockfd;
char buff[1024] = {‘\0‘};
struct sockaddr_in server_addr;
struct hostent *host;
int portnumbernbyteswbyte;
const char* ip = argv[1];
if((host=gethostbyname(ip))==NULL) {
fprintf(stderr“Gethostname error\n“);
exit(1);
}
const char* port = argv[2];
if((portnumber=atoi(port))<0) {
fprintf(stderr“Usage:%s hostname portnumber\a\n“argv[0]);
exit(1);
}
/* 客户程序开始建立 sockfd描述符 */
if((sockfd=socket(AF_INETSOCK_STREAM0))==-1) {
fprintf(stderr“Socket Error:%s\a\n“strerror(errno));
exit(1);
}
/* 客户程序填充服务端的资料 */
bzero(&server_addrsizeof(server_addr));
server_addr.sin_family=AF_INET;
server_addr.sin_port=htons(portnumber);
server_addr.sin_addr=*((struct in_addr *)host->h_addr);
/* 客户程序发起连接请求 */
if(connect(sockfd(struct sockaddr *)(&server_addr)sizeof(struct sockaddr))==-1) {
fprintf(stderr“Connect Error:%s\a\n“strerror(errno));
exit(1);
}
/* 连接成功了&读取指令 */
if((nbytes=read(sockfdbuff1024))==-1) {
fprintf(stderr“Read Error:%s\n“strerror(errno));
exit(1);
}
buff[nbytes]=‘\0‘;
printf(“I have received:%s\n“buff);//输出从服务端发来的信息
/******* 发送指令 ********/
bzero(buff1024);
// 指令ID
int order = 0x0010;
int order_h = order >> 8;
buff[0] = (char)order_h;
buff[1] = (char)order;
// 文件长度
unsigned long len = get_file_size(filePath);
printf(“file size = %lu\n“ len);
// 高16位
int len_h = len >> 16;
int len_h_1 = len_h >> 8;
buff[2] = (char)len_h_1;
buff[3] = (char)len_h;
// 低16位
int len_l = len;
int
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 5216 2016-08-19 12:33 tfclient.c
文件 8226 2016-08-25 12:23 tfservers.c
----------- --------- ---------- ----- ----
13442 2
相关资源
- Zedboard ov7725板端Linux下tcp视频发送
- 北京地铁最新的shp文件
- stc12c5a60s2的头文件
- 小型飞机票预定系统,源代码+数据库
- 不同策略的词频统计和检索
- OpenGL 库glut读取obj文件并使用显示列表
- Keil中的C51FPS.LIB文件
- C5402 DSP FIR IIR滤波器仿真文件
- 获取mp3文件的播放时间
- 广工操作系统课程设计文档+代码+可执
- bat自动拉取服务器上的文件
- txt文件和DataGridView控件的操作等.rar
- CUBEMX生成STM32代码删除编译信息文件(
- ARCGIS9.3 license 破解文件延期!附wind
- 用链表实现的一个电话本小程序
- 3d max x文件插件2015-2018版本Axe_free_v2
- FastDFS配置文件详解
- 多线程字符串代码文件搜索器
- UpdateVersion 修改exedll文件版本源码
- Window文件监控微过滤驱动
- 用DS18B20测量温度并在12864液晶屏上显
- CUDA_BY_EXAMPLE自带的几个头文件
- 玫瑰飘落JS文件
- labview读取文本文件到数组
- WAV文件提取数据工具
- 使用HTTP上传文件到WEB服务器
- mqtt订阅和发送及mqttws31.js
- 福州市shp底图文件
- 方维o2o最新版授权文件
- 吴恩达老师深度学习第二课第二周2
评论
共有 条评论