资源简介

代码为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


评论

共有 条评论