server

#include <stdio.h>
#include <iostream>
#include <cstring>
#include <fstream>
#include <winsock2.h> #pragma comment(lib, "ws2_32.lib") using namespace std; SOCKET m_Client; void SendFile(); int main(int argc, char* argv[])
{
//初始化WSA
WORD sockVersion = MAKEWORD(2,2);
WSADATA wsaData;
if(WSAStartup(sockVersion, &wsaData)!=0)
{
return 0;
} //创建套接字
SOCKET slisten = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if(slisten == INVALID_SOCKET)
{
printf("socket error !");
return 0;
} //绑定IP和端口
sockaddr_in sin;
sin.sin_family = AF_INET;
sin.sin_port = htons(8888);
sin.sin_addr.S_un.S_addr = INADDR_ANY;
if(bind(slisten, (LPSOCKADDR)&sin, sizeof(sin)) == SOCKET_ERROR)
{
printf("bind error !");
} //开始监听
if(listen(slisten, 5) == SOCKET_ERROR)
{
printf("listen error !");
return 0;
} //循环接收数据
sockaddr_in remoteAddr;
int nAddrlen = sizeof(remoteAddr);
char revData[255];
while (true)
{
printf("等待连接...\n");
m_Client = accept(slisten, (SOCKADDR *)&remoteAddr, &nAddrlen);
if(m_Client == INVALID_SOCKET)
{
printf("accept error !");
continue;
}
printf("接受到一个连接:%s \r\n", inet_ntoa(remoteAddr.sin_addr));
SendFile();
closesocket(m_Client);
} closesocket(slisten);
WSACleanup();
return 0;
}
void SendFile(){
int haveSend = 0;
const int bufferSize = 1024;
char buffer[bufferSize] = {0};
int readLen = 0;
string srcFileName = "in";
ifstream srcFile;
srcFile.open(srcFileName.c_str(),ios::binary);
if(!srcFile){
return;
}
while(!srcFile.eof()){
srcFile.read(buffer,bufferSize);
readLen = srcFile.gcount();
send(m_Client,buffer,readLen,0);
haveSend += readLen;
}
srcFile.close();
cout<<"send: "<<haveSend<<"B"<<endl;
}

client

#include <stdio.h>
#include <iostream>
#include <cstring>
#include <fstream>
#include <winsock2.h> #pragma comment(lib, "ws2_32.lib") using namespace std; SOCKET m_Client; void RecvFile(); int main()
{
WORD sockVersion = MAKEWORD(2, 2);
WSADATA data;
if(WSAStartup(sockVersion, &data)!=0)
{
return 0;
}
//while(true){
m_Client = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if(m_Client == INVALID_SOCKET)
{
printf("invalid socket!");
return 0;
} sockaddr_in serAddr;
serAddr.sin_family = AF_INET;
serAddr.sin_port = htons(8888);
serAddr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
if(connect(m_Client, (sockaddr *)&serAddr, sizeof(serAddr)) == SOCKET_ERROR)
{ //连接失败
printf("connect error !");
closesocket(m_Client);
return 0;
}
RecvFile();
closesocket(m_Client);
//} WSACleanup();
return 0; } void RecvFile(){
cout<<"start recv!"<<endl;
const int bufferSize = 1024;
char buffer[bufferSize] = {0};
int readLen = 0;
string desFileName = "new_in";
ofstream desFile;
desFile.open(desFileName.c_str(), ios::binary);
if (!desFile)
{
return ;
}
do
{
readLen = recv(m_Client,buffer,bufferSize, 0);
if (readLen == 0)
{
break;
}
else
{
desFile.write(buffer, readLen);
}
} while(true);
desFile.close();
}

windows环境下使用C++&Socket实现文件传输的更多相关文章

  1. Windows环境下用C#编程将文件上传至阿里云OSS笔记

    Windows环境下用C#编程将文件上传至阿里云OSS笔记 本系列文章由ex_net(张建波)编写,转载请注明出处. http://blog.csdn.net/ex_net/article/detai ...

  2. maven在windows环境下加载settings.xml文件

    今天发现maven在windows环境下加载的settings.xml文件是c:下的,就算修改conf下的settings.xml里的<localRepository>给他明确指向也没用.

  3. [转]windows环境下启动与停止.jar文件

    原文地址:https://www.jianshu.com/p/b12fc379d171 1 .启动 在xx.jar同级目录下建立run.bat文件,在run.bat文件中编辑下列文本. @echo o ...

  4. windows环境下创建 .文件夹

    一.windows环境下创建 .文件夹 1.新建一个文件夹 2.重命名为.properties.(名字前后都加点) 二.windows环境下创建 .文件 1.上面的方法对文件同样适用 2.运行CMD, ...

  5. windows环境下svn同步web文件[转]

    windows环境下svn同步web文件 SVN在团队开发中使用非常普遍,是一个很方便的版本控制系统. 如果要是能将SVN服务器上的数据自动发布到Web服务器,那将是整个项目开发.测试更加便捷.利用S ...

  6. Windows环境下C++中关于文件结束符的问题

    参考资料:http://www.cnblogs.com/day-dayup/p/3572374.html 一.前言 在不同的OS环境下,程序中对应的文件结束符有所不一样,根据<C++ Prime ...

  7. Windows环境下文件的彻底删除与恢复,推荐几个工具(整理)

    1. 背景 在Windows(从XP到Win7)中删除文件时,无论是Delete或者是Shift+Delete,都不能真正的删除文件,它做的事情只是从文件分配表中删除了该文件的信息,而并未将文件从存储 ...

  8. 在windows环境下运行compass文件出现的错误提示解决方案

    在windows环境下运行compass文件出现的错误提示解决方案 例如:经常在项目中运行grunt命令编译scss文件的时候,会出现下面的错误提示 (Encoding::CompatibilityE ...

  9. windows环境下备份与恢复,与文件拷贝

    mySQL数据库在windows环境下备份与恢复 解压版需进入数据库安装目录.安装版可以忽略本步骤: 1.先在运行中输入CMD,启动命令行2.进入Mysql的Bin目录:E:\Program File ...

随机推荐

  1. Codeforces 1009 E. Intercity Travelling(计数)

    1009 E. Intercity Travelling 题意:一段路n个点,走i千米有对应的a[i]疲劳值.但是可以选择在除终点外的其余n-1个点休息,则下一个点开始,疲劳值从a[1]开始累加.休息 ...

  2. 2017 ZSTU寒假排位赛 #4

    题目链接:https://vjudge.net/contest/148543#overview. A题:n个罪犯,每个人有一个犯罪值,现在要从里面选出连续的c个人,每个人的犯罪值都不能超过t,问选法的 ...

  3. springMVC配置拦截器、过滤器、前端控制器时遇到的问题总结

    1.业务场景:使用vuejs+springMVC+spring框架搭建一个mis系统,集成SSO单点登录: 2.遇到问题:使用interceptor拦截器配置SSO单点登录,直接敲域名,或者ip+端口 ...

  4. Django知识

    复习下django的知识. 1,安装: #pip install django 2.安装完毕后,在当前目录创建工程: #django-admin startproject mysite 执行上方的命令 ...

  5. Android View的加载流程

    什么是Activity? Activity是 用户操作的可视化界面:它为用户提供了一个放置视图和交互操作的窗口.采用setContentView的方法提供.因此,可以理解Activity.Window ...

  6. LC 738. Monotone Increasing Digits

    Given a non-negative integer N, find the largest number that is less than or equal to N with monoton ...

  7. Java访问Oracle服务器

    Java访问Oracle服务器--orcl数据库---emp表 private static String driver =         "oracle.jdbc.driver.Orac ...

  8. Android启动页面的正确打开方式 (转载)

    最近由于领导要求写一个手机APP,于是自学开始,不经意间想到使用过的手机APP在打开的时候都是会有一个启动页面,这是如何实现的呢?比较好奇,于是在网上搜到了以下这篇文章,经过个人实验的确可行,不过原文 ...

  9. Python - 二叉树, 堆, headq 模块

    二叉树 概念 二叉树是n(n>=0)个结点的有限集合,该集合或者为空集(称为空二叉树), 或者由一个根结点和两棵互不相交的.分别称为根结点的左子树和右子树组成. 特点 每个结点最多有两颗子树,所 ...

  10. spring cloud consul上下线体验

    spring cloud consul中默认会将spring.application.name作为ID 同一服务起多个实例时,ID默认会变成${spring.application.name}-${s ...