• 大小: 4KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-05-23
  • 语言: 其他
  • 标签: socket  C++  

资源简介

在windows下实际测试过,能实现超过百兆或上G的文件传输,使用前需要更改ip为本地IP,还有文件格式根据实际传输的文件修改

资源截图

代码片段和文件信息

// socket-client1.cpp : 定义控制台应用程序的入口点。
//

#include “stdafx.h“
#ifndef _CLOCK_T_DEFINED
typedef long clock_t;
#define _CLOCK_T_DEFINED
#endif

#include
#include
#include
#include
#include
#include
#include 
#include  
using namespace std;
#pragma comment(lib “ws2_32.lib“)
#define debug 0
int main()
{
WORD sockVersion = MAKEWORD(2 2);
WSADATA data;

clock_t startTime endTime;
struct timeval timeout = { 3 0 };
if (WSAStartup(sockVersion &data) != 0)
{
return 0;
}
while (true)
{
SOCKET sclient = socket(AF_INET SOCK_STREAM IPPROTO_TCP);
if (sclient == INVALID_SOCKET)
{
printf(“invalid socket!“);
return 0;
}
sockaddr_in serAddr;
serAddr.sin_family = AF_INET;
serAddr.sin_port = htons(8000);
#if debug
serAddr.sin_addr.S_un.S_addr = inet_addr(“127.0.0.1“); //inet_addr
#else
serAddr.sin_addr.S_un.S_addr = inet_addr(“169.254.154.252“);// (“169.254.169.227“); //inet_addr(“127.0.0.1“);//
#endif
// int nSendBuf = 128 * 1024;//设置为32K
// setsockopt(sclient SOL_SOCKET SO_SNDBUF (const char*)&nSendBuf sizeof(int));
// int nRecvBuf = 32 * 1024;//设置为32K
// setsockopt(sclient SOL_SOCKET SO_RCVBUF (const char*)&nRecvBuf sizeof(int));
if (connect(sclient (sockaddr *)&serAddr sizeof(serAddr)) == SOCKET_ERROR)
{  //连接失败 
printf(“connect error !“);
closesocket(sclient);
return -1;
}

char Buffer[8192] = { 0 };
char revData[8192];
char sendbuf[6] = {0x5a00000x55};
int count = 0;
int ret = 0;
startTime = clock();
//ifstream infile(“E:\\uEye-Full-490-64-WHQL.zip“ ifstream::binary);
ifstream infile(“E:\\111.bmp“ ifstream::binary);
if (!infile.is_open())
{
cout << “open bmp failed“ << endl;
return -1;
}
long int lengthsendlength;
long int realdatasenddata;
infile.seekg(0 ios::end);
length = infile.tellg();
infile.seekg(0 ios::beg);
senddata = 0;
/*step1 发送需要发送数据的长度 */
sendbuf[1] = length;
sendbuf[2] = length>>8;
sendbuf[3] = length >> 16;
sendbuf[4] = length >> 24;
ret = send(sclient sendbuf6 0);
/* step2 接收服务器返回的数据判定是否接收正确 */
ret = recv(sclient revData 6 0);
if ((revData[0] == 0x5a) && (revData[5] == 0x55))
{
realdata = revData[4] * 256 * 256 * 256 + revData[3] * 256 * 256 + revData[2] * 256 + revData[1];
}
if (realdata != length)
{
cout << “数据长度发送失败“ << endl;
return 3;
}
/* step3 发送数据 */
while (length > 0)

if (length < 8192)
sendlength = length;
else
sendlength = 8192;

count++;
length = length - 8192;
infile.read(Buffer sendlength);
ret = send(sclient Buffer sendlength 0);
if (ret == -1)
{
closesocket(sclient);
cout << “send data failed step 1“ << endl;
break;
}
senddata = senddata + ret;
//cout << ret << endl;
//cout << “发送第“ << count << “条信息“ << re

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2017-12-02 18:41  socke\
     文件        3774  2017-12-01 17:27  socke\socket-client1.cpp
     文件        3484  2017-12-02 14:38  socke\socket-server1.cpp

评论

共有 条评论