资源简介
该项目实现了在linux环境下的文件传输功能,能够将客户端的文件上传给服务器,同时能够将服务器的文件下载到客户端,可以在客户端查看更改双方路径及目录,并且支持多任务。在项目中应用了TCP网络编程,文件IO,多任务编程,进程间通信等相关知识,熟练综合运用了linux应用层相关知识。
代码片段和文件信息
#include
#include
#include
#include
#include
#include
#include “client_process.h“
int handle_server_ack(sockfd)
{
int ret;
uint32_t body_len;
uint32_t total_len;
msg_head_ctrl_t *msg;
ret = recv( sockfd &body_len sizeof(body_len) MSG_PEEK);
if ( ret<=0 ){
printf(“connectionn lost ... \n“);
exit(-1);
}
body_len = ntohl(body_len);
total_len = body_len + sizeof(msg_head_ctrl_t);
msg = malloc( total_len + 1 );
if ( NULL == msg ){
perror(“out of memeory\n“);
return ;
}
memset( msg 0 total_len + 1);
ret = recv( sockfd msg total_len MSG_WAITALL);
if ( ret<=0 ){
printf(“connectionn lost ... \n“);
exit(-1);
}
msg->body_len = ntohl(msg->body_len);
msg->command = ntohl(msg->command);
if ( (COMMAND_LS==msg->command) || (COMMAND_PWD==msg->command) ){
printf(“\n%s\n“msg->msg_body);
}
else if ( COMMAND_GET == msg->command ){
save_file_to_disk(msg->msg_body);
}
free(msg);
}
int send_command_to_server( int sockfd char *user_input command_type_t type)
{
ssize_t ret;
msg_head_ctrl_t *msg;
int body_len;
int total_len;
body_len = strlen(user_input);
total_len = body_len + sizeof(msg_head_ctrl_t);
msg = malloc(total_len);
if ( NULL == msg ){
printf(“out of memeory!\n“);
return FAILED;
}
msg->command = htonl(type);
msg->body_len = htonl(body_len);
memcpy(msg->msg_body user_input body_len);
ret = send(sockfd msg total_len 0);
if ( ret < total_len ){
printf(“connection lost ...\n“);
free(msg);
return SOCK_ERROR;
}
free(msg);
return SUCCESSFUL;
}
int get_file_from_server(int sockfd char *user_input command_type_t type)
{
int ret;
int fd=-1;
uint32_t len;
fd_set fs_client;
struct timeval timeout;
msg_head_ctrl_t *msg;
ret = send_command_to_server(sockfd user_input type);
if ( ret != SUCCESSFUL){
return ret;
}
msg = malloc(sizeof(msg_head_ctrl_t) + MAX_READ_BYTES + 1);
if ( NULL == msg ){
printf(“out of memory!\n“);
return FAILED;
}
while(true){
FD_ZERO(&fs_client);
FD_SET( sockfd &fs_client);
timeout.tv_sec = DEFAULT_CLIENT_TIME_OUT;
timeout.tv_usec = 0;
ret = select(sockfd+1 &fs_client NULL NULL NULL);
if ( 0 == ret ){
//time out
printf(“time out....\n“);
ret = SOCK_ERROR;
break;
}
if ( -1 == ret ){
continue;
}
memset(msg 0 sizeof(msg_head_ctrl_t) + MAX_READ_BYTES + 1);
ret = recv(sockfd &len sizeof(msg->body_len) MSG_PEEK);
if (ret <= 0){
printf(“sock error!\n“);
ret = SOCK_ERROR;
goto Exit;
}
len = ntohl(len);
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2010-01-23 11:08 tcp\
文件 6764 2010-01-07 19:34 tcp\client_process.c
文件 355 2010-01-07 19:34 tcp\client_process.h
文件 1843 2010-01-07 19:34 tcp\common.c
文件 1401 2010-01-07 19:34 tcp\common.h
文件 1279 2010-01-07 19:34 tcp\ftpclient.c
文件 1769 2010-01-07 19:34 tcp\ftpserver.c
文件 340 2010-01-07 19:34 tcp\Makefile
文件 5825 2010-01-07 19:34 tcp\serv_client.c
文件 157 2010-01-07 19:34 tcp\serv_client.h
- 上一篇:35GHzVCO研制
- 下一篇:地铁自动售票机计算当前站和目的站的站数
相关资源
- 嵌入式时钟、计算器设计报告
- linux下文件及目录的监控程序
- 基于庞加莱嵌入式层次学习表示法的
- linux下QT中文滚屏小程序
- 嵌入式LINUX基础教程中文第2版 --百度
- 基于TCP,socket通信,简单小程序
- LinuxVM虚拟机镜像.docx
- SSLSocket双向认证通信(含证书库及证
- 经典Linux系统裁剪指南
- Linux DHCP图形化管理工具
- linux下QT5十字路口红绿灯信号灯模拟程
- 跟老男孩学linux三剑客命令
- Linux下C实现的聊天室
- linux下的QT登陆界面用户名,密码
- linux2.6.32exp
- linux_sntp精确到秒级服务器
- linux系统下实现聊天室
- Ov9650-Coms摄像头在Linux环境下的代码开
-
VNC viewer for em
bedded WIN CE system (在嵌 - 用Xlib库进行基本图形编程 PDF
- Linux环境高级编程实验2
- OpenGL完整测试文件
- QT和linux简易远程聊天源代码
- linux SCSI-UFS协议总图
- SocketTool工具源码
- linux内核实现url重定向
- Linux文件管理系统代码注释
- 基于CSocKet的网络应用五子棋设计与实
- Delphi 下ServerSocket和ClientSocket 的通信
- Qt扫雷游戏源码
评论
共有 条评论