• 大小: 553KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-16
  • 语言: 其他
  • 标签: tcp  socket编程  

资源简介

该资源只是简单的实现TCP文件的传输,仅供初学者,没有生命太大的技术含量,下载者请注意

资源截图

代码片段和文件信息

#include 
#include 
#include 
#define  MAX_DATA_BLOCK_SIZE 8192
void error_exit(const char * msgint val);
void send_file(const char * file_nameconst char * ipu_short port);
int main(int argcchar** argv){
    u_short port;
    if(argc==3){
        send_file(argv[1]argv[2]8888);
    }
    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 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_nameconst 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_INETSOCK_STREAM0);
    memset((void *)&server_addr0sizeof(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(struct sockaddr_in))==SOCKET_ERROR){
        printf(“连接服务器失败\n“);
        fclose(fp);
        closesocket(s);
        WSACleanup();
        return;
        }
    printf(“发送文件名。。。\n“);
    send(sfile_namestrlen(file_name)0);
    send(s“\0“10);
    printf(“发送文件内容“);
    for(;;){
        memset((void *)data0sizeof(data));
        i=fread(data1sizeof(data)fp);
        if(i==0){
            printf(“\n发送成功\n“);
            break;
            }
        ret=send(sdatai0);
        putchar(‘.‘);
        if(ret==SOCKET_ERROR){
            printf(“\n发送失败,文件可能不完整\n“);
            break;
            }
        }
    fclose(fp);
    closesocket(s);
    WSACleanup();


}

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件          0  2018-11-23 14:23  server\a.txt

     文件          0  2018-11-23 11:26  server\bin\Debug\a.txt

     文件     409117  2018-11-23 14:17  server\bin\Debug\server.exe

     文件       3749  2018-11-23 13:56  server\main.c

     文件       3972  2018-11-23 13:12  server\new.c

     文件     389878  2018-11-23 13:57  server\obj\Debug\main.o

     文件       1236  2018-11-23 14:48  server\server.cbp

     文件        139  2018-11-23 14:15  server\server.depend

     文件        539  2018-11-23 14:48  server\server.layout

     文件        111  2018-11-23 11:54  test\2.c

     文件          0  2018-11-23 13:21  test\bin\Debug\a.txt

     文件     409700  2018-11-23 14:10  test\bin\Debug\test.exe

     文件       3990  2018-11-23 14:17  test\main.c

     文件     390226  2018-11-23 14:10  test\obj\Debug\main.o

     文件       1336  2018-11-23 14:48  test\test.cbp

     文件        226  2018-11-23 14:04  test\test.depend

     文件        355  2018-11-25 12:55  test\test.layout

     文件         16  2018-11-25 13:17  client\bin\Debug\a.txt

     文件     406412  2018-11-23 13:15  client\bin\Debug\client.exe

     文件       1123  2018-11-21 17:01  client\client.cbp

     文件        125  2018-11-23 13:20  client\client.depend

     文件        355  2018-11-25 12:55  client\client.layout

     文件       2248  2018-11-23 13:15  client\main.c

     文件     388230  2018-11-23 13:15  client\obj\Debug\main.o

     目录          0  2018-11-23 14:17  server\bin\Debug

     目录          0  2018-11-23 13:57  server\obj\Debug

     目录          0  2018-11-23 14:10  test\bin\Debug

     目录          0  2018-11-23 14:10  test\obj\Debug

     目录          0  2018-11-23 13:15  client\bin\Debug

     目录          0  2018-11-23 13:15  client\obj\Debug

............此处省略12个文件信息

评论

共有 条评论