资源简介
模版来自http://blog.csdn.net/ljd_1986413/article/details/7940938,只是添加了断点功能,本人新手,欢迎大家指正错误。
代码片段和文件信息
#include // sockaddr_in
#include // socket
#include // socket
#include // printf
#include // exit
#include // bzero
#include
#include
#define SERVER_PORT 8000
#define BUFFER_SIZE 1024
#define FILE_NAME_MAX_SIZE 512
int main()
{
// 声明并初始化一个客户端的socket地址结构
struct sockaddr_in client_addr;
bzero(&client_addr sizeof(client_addr));
client_addr.sin_family = AF_INET;
client_addr.sin_addr.s_addr = htons(INADDR_ANY);
client_addr.sin_port = htons(0);
// 创建socket,若成功,返回socket描述符
int client_socket_fd = socket(AF_INET SOCK_STREAM 0);
if(client_socket_fd < 0)
{
perror(“Create Socket Failed:“);
exit(1);
}
// 绑定客户端的socket和客户端的socket地址结构 非必需
if(-1 == (bind(client_socket_fd (struct sockaddr*)&client_addr sizeof(client_addr))))
{
perror(“Client Bind Failed:“);
exit(1);
}
// 声明一个服务器端的socket地址结构,并用服务器那边的IP地址及端口对其进行初始化,用于后面的连接
struct sockaddr_in server_addr;
bzero(&server_addr sizeof(server_addr));
server_addr.sin_family = AF_INET;
if(inet_pton(AF_INET “127.0.0.1“ &server_addr.sin_addr) == 0)
{
perror(“Server IP Address Error:“);
exit(1);
}
server_addr.sin_port = htons(SERVER_PORT);
socklen_t server_addr_length = sizeof(server_addr);
// 向服务器发起连接,连接成功后client_socket_fd代表了客户端和服务器的一个socket连接
if(connect(client_socket_fd (struct sockaddr*)&server_addr server_addr_length) < 0)
{
perror(“Can Not Connect To Server IP:“);
exit(0);
}
// 输入文件名 并放到缓冲区buffer中等待发送
char file_name[FILE_NAME_MAX_SIZE+1];
bzero(file_name FILE_NAME_MAX_SIZE+1);
printf(“Please Input File Name On Server:\t“);
scanf(“%s“ file_name);
// 打开文件,准备写入
int fp= open(file_name O_WRONLY | O_APPEND | O_CREAT 0666);
if(-1 == fp)
{
printf(“File:\t%s Can Not Open To Write\n“ file_name);
exit(1);
}
const int n = lseek(fp 0 SEEK_END);
char str[20]= “&“;
sprintf(str “&%d“ n);
strcat(file_name str);
// 向服务器发送buffer中的数据
char buffer[BUFFER_SIZE];
bzero(buffer BUFFER_SIZE);
strncpy(buffer file_name strlen(file_name)>BUFFER_SIZE?BUFFER_SIZE:strlen(file_name));
if(send(client_socket_fd buffer BUFFER_SIZE 0) < 0)
{
perror(“Send File Name Failed:“);
exit(1);
}
// 从服务器接收数据到buffer中
// 每接收一段数据,便将其写入文件中,循环直到文件接收完并写完为止
bzero(buffer BUFFER_SIZE);
int length = 0;
while((length = recv(client_socket_fd buffer BUFFER_SIZE 0)) > 0)
{
if(write(fp buffer length) < length)
{
printf(“File:\t%s Write Failed\n“ file_name);
break;
}
bzero(buffer BUFFER_SIZE);
}
// 接收成功后,关闭文件,关闭socket
printf(“Receive File:\t%s From Server IP Successful!\n“ file_name);
close(fp);
//fp = NULL;
close(client_socket_fd);
return 0;
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2015-09-01 14:22 FTP\cli\
文件 3310 2015-09-01 14:21 FTP\cli\client.c
目录 0 2015-09-01 14:22 FTP\ser\
文件 3850 2015-09-01 11:20 FTP\ser\server.c
目录 0 2015-09-01 14:22 FTP\
- 上一篇:C#实时监测usb设备的插拔情况,winform的Demo
- 下一篇:C语言钢琴程序
评论
共有 条评论