资源简介
在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
- 上一篇:quartus_II_13.1链接
- 下一篇:飞思卡尔 圆环.rar )
相关资源
- WebSocket .net聊天室源代码
- Labview网络通讯DataSocket
- 进程调度的设计与实现图形界面实现
- 目前.NET最强SOCKET框架组“北风之神”
- tcp socket server
- socket服务端和客户端完整代码
- socket定时发送数据小程序
- Zbar库好不容易找到的有configure的源码
- 比较两篇纯英文文本的相似度
- VS2010编写CSocket大文件TCP传送
- Linux下的Socket聊天系统,QT完整界面
- inttypes.h
- 基于QT的方块消除游戏
- 多项式相乘一元稀疏多项式简单计算
- QT录音
- TCP UDP socket调试工具
- 数据结构课程设计--校园最短路径
- AUTO_CAD.rar
- linux Qt局域网聊天
- windows平台抓屏源代码
- CSDN-TCP基于数据包通讯框架
- 视频小车QT客户端
- QRGenerator.zip
- STDLIB.H头文件
- Printer打印类
- 基于socket的联网五子棋游戏源码
- QT TCP Socket 通信
- express4.X框架中使用socket.io
- tcp socket代理服务器
- 银行业务模拟
评论
共有 条评论