基本信息
源码名称:基于CS的TCP文件传输程序设计
源码大小:0.03M
文件格式:.7z
开发语言:C/C++
更新时间:2020-10-17
   友情提示:(无需注册或充值,赞助后即可获取资源下载链接)

     嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300

本次赞助数额为: 2 元 
   源码介绍

本课程设计的文件传输系统基于TCP/IP协议的C/S模式,在服务器和客户端分别以socket为中心进行编程,客户端和服务器端的界面分别是由文件发送模块和文件接收模块组成,实现多线程文件传输系统功能模块。客户端检查是否连接到服务器,在正确连接的情况下实现对文件的传输;服务器检查是否有客户端连接,在正确连接的情况下接受客户端发送的文件。



 while (true)
    {
        //创建套接字    
        SOCKET sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
        connect(sock, (SOCKADDR*)&sockAddr, sizeof(SOCKADDR));

        //获取服务器地址端口相关
        SOCKADDR_IN address;
        GetAddressBySocket(sock, address);
        cout << "IP: " << ::inet_ntoa(address.sin_addr) << "  PORT: " << ntohs(address.sin_port) << endl;

        //获取文件位置
        std::ifstream file;
        do
        {
            cout << "请输入文件名" << std::endl;
            std::string filename = "";
            cin >> filename;
            file.open(filename, std::ifstream::binary);
        } while (!file.is_open());


        //传输文件
        //发送完毕标志
        bool flag = true;
        for (int  i = 0; !file.eof();)
        {
            char buf[1024] = { '\0' };
            memset(buf, 0, sizeof(buf));
            file.read(buf, sizeof(buf) - 1);

            int n = file.gcount();
            int send_char_num= send(sock, buf, n, 0);
            if (send_char_num==0)
            {
                cout << "服务器已连接断开" << endl;
                flag = false;
                break;
            }
            if (send_char_num<0)
            {
                cout << "发生错误,我也不知道是啥错误^_^" << endl;
                flag = false;
                break;
            }
            i = send_char_num;
            cout << "已发送:" << i << "字节" << endl;
        }
        if (flag)
        {
            cout << "文件已发送完毕" << endl;
        }
        closesocket(sock);  //关闭套接字  
    }
    WSACleanup();  //终止使用 DLL    
    return 0;
}