資源簡介
在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“?< 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?<“數據長度發送失敗“?< 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“?< break;
}
senddata?=?senddata?+?ret;
//cout?< //cout?<“發送第“?<
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????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
- 上一篇:quartus_II_13.1鏈接
- 下一篇:飛思卡爾 圓環.rar )
評論
共有 條評論