资源简介
基于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文件
相关资源
- 基于arm平台的MP3播放器
- LABVIEW 简单的启动欢迎界面
- 优秀简历模板最简单的简历模板
- 计算机网络课程设计:简单FTP客户端
- ( linux常用命令集PDF版.pdf )
- NI采集卡 linux驱动
- libncurses.so.5.5
- 简单环形条格进度条
- CentOS-7-x86_64镜像文件
- libjpeg.so.62
- linux qt4.7 v4l2 YUV(YUYV) mmap 显示视频
- tc8 x64 openssl库文件补丁
- 东南大学计算机图形学实验二 简单
- 一个简单的HBuilder
- 一个简单的读取二进制文件并进行排
- LCD的简单初始化
- linux下将yuv转换成jpg
- linux shell编程与服务器管理 范例程序
- 虚拟机linux和开发板网卡通信.pdf
- db2 v9.7 linux授权文件
- gmt-sar安装教程.docx
- 一个简单的 QT5编写的 串口工具代码
- 一个简单QT5编写的录音机代码
- 树莓派 Ubuntu mate16.04 2个usb转串口互相
- 嵌入式Linux系统设计QT计算器
- linux tcpmodbus服务端
- Cygwin1.5.24-2
- arm-linux-gcc-4.3.2交叉编译
- Linux课程设计 实现qq通信
- 最简单的hc06蓝牙模块控制led灯
评论
共有 条评论