TCP 协议实现文件传输 使用TCP 协议实现传输文件 程序分为发送端和接收端。首先在传输文件数据之前,发送端会把将装有文件名称和文件长度等 信息的数据包发送至接收端。接收端收到文件名称和文件长度信息后会创建好空白文件。接着开始传输 文件数据。下面介绍实现功能的主要过程: 1.创建套接字、绑定、监听、连接、接受连接 //创建TCP 协议的套接字 m_Socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if(SOCKET_ERROR == m_Socket) AfxMessageBox("Create Socket Error! ", 0, 0); //绑定与监听 SOCKADDR_IN addrSrv; addrSrv.sin_addr.s_addr = inet_addr(sIP); addrSrv.sin_family = AF_INET; addrSrv.sin_port = htons(Port); int ret = bind(m_Socket, (SOCKADDR *)&addrSrv, sizeof(SOCKADDR)); if(ret==SOCKET_ERROR) AfxMessageBox("Bind Socket Error!", 0, 0); //连接 SOCKADDR_IN ServerAddr; ServerAddr.sin_addr.s_addr = inet_addr(ServerAddr_in); ServerAddr.sin_family = AF_INET; ServerAddr.sin_port = htons(ServerPort); int Result = connect(m_Socket, (struct sockaddr*)&ServerAddr, sizeof(struct sockaddr)); if(SOCKET_ERROR == Result) AfxMessageBox("Connet Failed!"); //接受连接 SOCKADDR_IN ClientAddr; int len = sizeof(SOCKADDR_IN); SOCKET ClientSock = accept(m_Socket, (struct sockaddr*)&ClientAddr, &len); if(SOCKET_ERROR == ClientSock) AfxMessageBox("Accept Failed!"); 2.声明宏和结构体 声明套接字缓冲区和一次发送文件数据的缓冲区大小 #define SOCKET_BUFF 80000 //套接字缓冲区大小 #define PACK_BUFF 50000 //数据包缓冲区大小 声明文件 I/O 缓冲区和最大文件路径长度 #define FILE_NAME_MAX 100 //文件路径最大长度 #define FILE_IO_BUFF PACK_BUFF //文件 IO 缓冲区 //文件信息 typedef struct _FileInfor { u_long ulFileLen; char sFileName[ FILE_NAME_MAX ]; }_FileInfor; //数据包 typedef struct _DataPack { char cType; //'D'为数据 'M'为文件信息 int nPackLen; char sContent[ PACK_BUFF ]; //数据包缓冲区 u_long nPosition; //数据在文件中的位置 int nContentLen; //数据字节数 _FileInfor FileInfor; /...