windows下基于TCP协议的大文件传输程序

本文介绍了一个在Windows环境下使用TCP协议进行大文件传输的程序,重点在于分包传输以避免内存过载。程序包括服务器和客户端两部分,用户可指定传输文件和接收位置。在传输过程中,双方会显示相关信息如对方IP和当前传输进度,并能处理Ctrl+C中断和其他异常情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目标

(1)大文件的传输。对于比较大的文件,应该进行分包操作,以防止占用过多的内存,导致文件发送
失败,实验中每次最多传输1024个字符;
(2)用户根据参数输入选择传输的文件和传输位置;
(3)发送端和接收端分别显示文件传输相应的信息,包括:对方IP地址,当前已写(读)文件长度等;
(4)对于Ctrl+C命令以及服务器提前关闭的特殊情况给出响应(如:显示信息)

服务器代码

#define  _WINSOCK_DEPRECATED_NO_WARNINGS  
#define _CRT_SECURE_NO_WARNINGS
#include <winsock2.h>   
#include<iostream>  
#include<string> 
#include<fstream>
#include<sstream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#pragma comment (lib, "ws2_32.lib")  //加载 ws2_32.dll    
#define BUF_SIZE 1024  

//using namespace std;  //直接用std好像会出现bug  
using std::cout;

//封装套接字绑定
int make_socket(const char* address,int port)
{
    //创建套接字    
    SOCKET Sock = socket(AF_INET, SOCK_STREAM, 0);

    //绑定套接字    
    sockaddr_in sockAddr;
    memset(&sockAddr, 0, sizeof(sockAddr));  //每个字节都用0填充    
    sockAddr.sin_family = AF_INET;  //使用IPv4地址    
    sockAddr.sin_addr.s_addr = inet_addr(address);  //回送IP地址   
    sockAddr.sin_port = htons(1234);  //端口    
    bind(Sock, (SOCKADDR*)&sockAddr, sizeof(SOCKADDR));
    return Sock;
}

//通过套接字获取IP、Port等地址信息
bool GetAddressBySocket(SOCKET m_socket, SOCKADDR_IN &m_address)
{
    memset(&m_address, 0, sizeof(m_address));
    int nAddrLen = sizeof(m_addr
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值