资源简介
在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 )
相关资源
- VisualStudioUninstaller vs卸载工具
- 组态王驱动开发包3.0.0.7(中文)
- 多窗口后台鼠标连点器
- 使用选择性重传协议实现UDP可靠通信
- 通信软件的具体实例──基于Socket的
- VC 获得文件属性 获取文件的创建时
- 用Socket编程实现FTP
- 读者写者问题(读者优先,写者优先
- 用VC 编写的仿QQ聊天室程序源代码
- websocket实现一对一聊天
- 外点法程序
- 外罚函数程序
- qt-电子点菜系统
- 推箱子及人工智能寻路C 源代码
- 自己写的航空订票系统c 版--数据结构
- 数据结构实验魔王语言
- MUSIC算法c 实现
- C 餐厅叫号系统(QT平)
- 国际象棋c 完整版
-
ob
jectARX给Auto CAD加工具条 - 画图程序MFC/VC/VC CRectTracker 串行化
- MFC网络编程实例
- c 课程设计 职工信息管理系统
- VC 游戏编程—附源代码
- IpHlpApi.h&IpHlpApi.lib
- 清华大学 c 郑莉 ppt课件
- c 程序判断离散数学中命题公式
- 多项式求和(数据结构C 版)
- vc 6.0开发的流程图编辑器
- VC 天空盒(skyBox)实现(附源代码)
评论
共有 条评论