• 大小: 102KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-06-03
  • 语言: 其他
  • 标签:

资源简介

计算机网络试验,TCP文件传输的设计与实现,要传输的文件放在Debug文件夹下,cmd调用或者.exe文件使用

资源截图

代码片段和文件信息

////////////////////////////////////////
// 文件传送客户端  小文件123.txt   编号2号客户端
////////////////////////////////////////
#include 
#include 
#include 
// 定义发送缓冲区大小
#define MAX_DATA_BLOCK_SIZE 8192
void error_exit(const char * msg int val);
void send_file(const char * file_name const char * ip u_short port);
// 主函数
int main(int argc char ** argv) {
    u_short port;
    if (argc == 3) {
    // 如果不指定服务器端口,那么默认为 8888
    send_file(argv[1] argv[2] 8888);
    print_socket_detail(argv[1]);
    } else if (argc == 4) {
    // 用户指定了服务器端口
    port = (u_short) atoi(argv[1]);
    if (port == 0) {
    error_exit(“非法的服务器端口“ -1);
    } else {
    send_file(argv[1] argv[2] port);
    }
    } else {
    error_exit(“参数错误“ -1);
    }
    return 0;
}

void print_socket_detail(SOCKET s){
    struct sockaddr_in name;
    int namelen;

    namelen = sizeof(name);
    memset(&name0namelen);
    getsockname(s(struct sockaddr*)&name&namelen);
    printf(“peer:  %s:%d\n“inet_ntoa(name.sin_addr)ntohs(name.sin_port));
}


    // 打印错误、使用说明并退出程序
void error_exit(const char * msg int val) {
    if (msg) {
    printf(“%s\n\n“ msg);
    }
    printf(“使用方法:ft_client <文件名> <服务器 IP 地址> [服务器端口]\n“);
    printf(“服务器端口是可选参数,默认为 8888\n\n“);
    exit(val);
}
// 发送文件到服务器
void send_file(const char * file_name const char * ip u_short port) {
    WSADATA wsaData;
    SOCKET s;
    FILE * fp;
    struct sockaddr_in server_addr;
    char data[MAX_DATA_BLOCK_SIZE];
    int i;
    int ret;
    fp = fopen(file_name “rb“);
    if (fp == NULL) {
    printf(“无法打开文件\n“);
    return;
 }
WSAStartup(0x202 &wsaData);
    // 创建套接字
    s = socket(AF_INET SOCK_STREAM 0);
    // 填写服务器的地址结构
    memset((void *)&server_addr 0 sizeof(server_addr));
    server_addr.sin_family = AF_INET;
    server_addr.sin_addr.s_addr = inet_addr(ip);
    server_addr.sin_port = htons(port);
 // 连接到服务器,注意观察是如何处理连接失败的
    if (connect(s (struct sockaddr *)&server_addrsizeof(server_addr)) == SOCKET_ERROR) {
        printf(“连接服务器失败\n“);
        fclose(fp);
        closesocket(s);
        WSACleanup();
        return;
    }
    // 首先发送文件名以及标志文件名结束的\0
    printf(“发送文件名...\n“);
    send(s file_name strlen(file_name) 0);
    send(s “\0“ 1 0);
    // 然后发送文件内容
    // 注意观察缓冲区 data 是如何使用的,以及 fread、send 函数的返回值是如何处理的
    printf(“发送文件内容“);
    for (;;) {
        memset((void *)data 0 sizeof(data));
        i = fread(data 1 sizeof(data) fp);
        if (i == 0) {
        printf(“\n 发送成功\n“);
        break;
        }
    ret = send(s data i 0);
    putchar(‘.‘);
    if (ret == SOCKET_ERROR) {
        printf(“\n 发送失败,文件可能不完整\n“);
        break;
        }
 }
    fclose(fp);
    closesocket(s);
    WSACleanup();
}

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2019-03-28 19:02  TCP文件传输的设计与实现\
     目录           0  2019-03-28 19:01  TCP文件传输的设计与实现\11.26\
     目录           0  2019-03-28 19:01  TCP文件传输的设计与实现\11.26\test\
     目录           0  2019-03-28 19:01  TCP文件传输的设计与实现\11.26\test\client\
     文件           0  2018-11-25 22:02  TCP文件传输的设计与实现\11.26\test\client\123.txt
     目录           0  2019-03-28 19:01  TCP文件传输的设计与实现\11.26\test\client\bin\
     目录           0  2019-03-28 19:01  TCP文件传输的设计与实现\11.26\test\client\bin\Debug\
     文件       39038  2018-11-26 09:01  TCP文件传输的设计与实现\11.26\test\client\bin\Debug\client.exe
     文件           0  2018-11-26 08:35  TCP文件传输的设计与实现\11.26\test\client\bin\Debug\ly.txt
     文件        1212  2018-11-28 16:41  TCP文件传输的设计与实现\11.26\test\client\client.cbp
     文件         267  2018-11-27 13:04  TCP文件传输的设计与实现\11.26\test\client\client.depend
     文件         356  2018-11-28 16:41  TCP文件传输的设计与实现\11.26\test\client\client.layout
     文件        3080  2018-11-27 13:04  TCP文件传输的设计与实现\11.26\test\client\main.c
     目录           0  2019-03-28 19:01  TCP文件传输的设计与实现\11.26\test\client\obj\
     目录           0  2019-03-28 19:01  TCP文件传输的设计与实现\11.26\test\client\obj\Debug\
     文件        6223  2018-11-27 13:04  TCP文件传输的设计与实现\11.26\test\client\obj\Debug\main.o
     目录           0  2019-03-28 19:01  TCP文件传输的设计与实现\11.26\test\server\
     文件           0  2018-11-26 11:58  TCP文件传输的设计与实现\11.26\test\server\123.txt
     目录           0  2019-03-28 19:01  TCP文件传输的设计与实现\11.26\test\server\bin\
     目录           0  2019-03-28 19:01  TCP文件传输的设计与实现\11.26\test\server\bin\Debug\
     文件       38076  2018-11-26 08:51  TCP文件传输的设计与实现\11.26\test\server\bin\Debug\server.exe
     文件        4480  2018-11-27 20:54  TCP文件传输的设计与实现\11.26\test\server\main.c
     目录           0  2019-03-28 19:01  TCP文件传输的设计与实现\11.26\test\server\obj\
     目录           0  2019-03-28 19:01  TCP文件传输的设计与实现\11.26\test\server\obj\Debug\
     文件        6749  2018-11-27 20:54  TCP文件传输的设计与实现\11.26\test\server\obj\Debug\main.o
     文件        1161  2018-11-25 20:50  TCP文件传输的设计与实现\11.26\test\server\server.cbp
     文件         361  2018-11-26 11:54  TCP文件传输的设计与实现\11.26\test\server\server.depend
     文件         358  2018-11-27 20:58  TCP文件传输的设计与实现\11.26\test\server\server.layout
     目录           0  2019-03-28 19:01  TCP文件传输的设计与实现\11.26\多线程\
     目录           0  2019-03-28 19:01  TCP文件传输的设计与实现\11.26\多线程\client\
     目录           0  2019-03-28 19:01  TCP文件传输的设计与实现\11.26\多线程\client\bin\
............此处省略36个文件信息

评论

共有 条评论