资源简介
基于Linux的C源代码——一个简单的从服务器上下载文件的程序
先启动服务器端
再启动客户端,在启动客户端的时候需要同时填写服务器的IP地址
如:./client 127.0.0.1
连接成功之后输入要下载的文件的文件路径名
回车后再输入在本地机的存储路径及文件名

代码片段和文件信息
#include // for sockaddr_in
#include // for socket
#include // for socket
#include // for printf
#include // for exit
#include // for bzero
#include
#include
#include
#include
#include
#include
void err_sys(const char* ...);
static void err_doit(int const char *va_list);
long get_filesize(char *filename);
#define HELLO_WORLD_SERVER_PORT 6789
#define BUFFER_SIZE 1024
#define FILE_NAME_MAX_SIZE 512
#define MAXLINE 4069
fd_set rdfds;
int
main(int argc char **argv)
{
if (argc != 2)
{
printf(“Usage: ./%s ServerIPAddress\n“argv[0]);
exit(1);
}
//设置一个socket地址结构client_addr代表客户机internet地址 端口
struct sockaddr_in client_addr;
bzero(&client_addrsizeof(client_addr)); //把一段内存区的内容全部设置为0
client_addr.sin_family = AF_INET; //internet协议族
client_addr.sin_addr.s_addr = htons(INADDR_ANY);//INADDR_ANY表示自动获取本机地址
client_addr.sin_port = htons(0); //0表示让系统自动分配一个空闲端口
//创建用于internet的流协议(TCP)socket用client_socket代表客户机socket
int client_socket = socket(AF_INETSOCK_STREAM0);
if( client_socket < 0)
{
perror(“socket“);
exit(1);
}
printf(“Socket is Createed!\n“);
//把客户机的socket和客户机的socket地址结构联系起来
if( -1 == bind(client_socket(struct sockaddr*)&client_addrsizeof(client_addr)))
{
perror(“bind“);
exit(1);
}
printf(“Bind Success!\n“);
//设置一个socket地址结构server_addr代表服务器的internet地址 端口
struct sockaddr_in server_addr;
bzero(&server_addrsizeof(server_addr));
server_addr.sin_family = AF_INET;
if(inet_aton(argv[1]&server_addr.sin_addr) == 0) //服务器的IP地址来自程序的参数
{
perror(“inet_aton“);
exit(1);
}
printf(“Inet_aton Success!\n“);
server_addr.sin_port = htons(HELLO_WORLD_SERVER_PORT);
socklen_t server_addr_length = sizeof(server_addr);
//向服务器发起连接连接成功后client_socket代表了客户机和服务器的一个socket连接
if(-1 == connect(client_socket(struct sockaddr*)&server_addr server_addr_length))
{
perror(“connect“);
// printf(“Can Not Connect To %s!\n“argv[1]);
exit(1);
}
printf(“Connected!\n“);
char file_name[FILE_NAME_MAX_SIZE+1];
char loc_file_name[FILE_NAME_MAX_SIZE+1];
bzero(file_name FILE_NAME_MAX_SIZE+1);
bzero(loc_file_nameFILE_NAME_MAX_SIZE+1);
printf(“Please Input File Name On Server:\t“);
scanf(“%s“ file_name);
char buffer[BUFFER_SIZE];
bzero(bufferBUFFER_SIZE);
strncpy(buffer file_name strlen(file_name));
printf(“send the file name is :%s\n“buffer);
//向服务器发送buffer中的数据
if(-1 == send(client_socketbufferBUFFER_SIZE0))
{
perror(“send“);
exit(1);
}
printf(“Please Input File Name On location:\t“);
scanf(“%s“ loc_file_name);
FILE *wstr
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 3945 2009-05-05 15:31 ftp——1.0\test_client.c
文件 4807 2009-05-05 15:00 ftp——1.0\test_server.c
目录 0 2009-05-05 15:34 ftp——1.0
文件 8769 2009-05-07 11:26 test_client
文件 10019 2009-05-06 14:44 test_server
文件 183 2009-05-07 12:00 使用说明.txt
----------- --------- ---------- ----- ----
27723 6
- 上一篇:RSA加密解密网络课程设计
- 下一篇:人工神经网络bp.m文件
相关资源
- FTP课程设计(服务端+客户端)
- uboot到linux logo显示不间断 补丁
- phong模型(简单光照模型)
- UNIX/LINUX编程实践教程的源码
- 一个超简单的企业管理系统(带ACCE
- 八三编码器设计 VHDL代码 简单,包附
- Linux任务管理器
- linux应用层的华容道游戏源代码
- 黑白棋(带简单AI)
- python实现的ftp自动上传、下载脚本
- jQuery ajax实现简单登录验证
- 编写简单的RMI程序 多线程web 服务器
- 用Socket编程实现FTP
- 旋转矩阵求欧拉角的简单算法
- 51单片机基于protues的几个仿真实例
- 小型抽签程序 C 简单实用
- 一个简单的verilog编写的DMA IP CORE,和
- ubuntu9.10 可加载内核模块和字符设备驱
- 简单的房屋租赁系统
- 静态网页简单的作业
- MP3文件ID3v2ID3v2APEv2标签读取
- IOCP 类 简单的IOCP(IO完成端口)服务
- midi电子琴简单设计(附源代码).ra
- 操作系统实验——虚存管理实验
- linux下的发包工具sendip
- 尚观培训linux许巍关于c 的笔记和讲义
- 尚观培训linux董亮老师关于数据结构的
- windows下制作macOS安装U盘,绝对简单好
- linux 线程池源码 c 版
- tftp文件传输工具
评论
共有 条评论