资源简介

基于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


评论

共有 条评论