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();
}

最新文章

  1. iOS.StaticLibrary.1-avoid-duplicate-symbol-in-static-library[draft]
  2. [原]My first Python
  3. FastJson与Gson小测试
  4. APAC Practice
  5. Apache虚拟主机设置
  6. MDK常见错误详解集合
  7. Linux系统安装-MacBook网卡驱动问题解决
  8. z-index是什么样式?
  9. JDBC编程流程以及详细代码
  10. React Fiber源码分析 第一篇
  11. flask 自动切换环境
  12. 操作Linux系统环境变量的几种方法
  13. MongoDB服务无法启动,windows提示发生服务特定错误:100
  14. 564. Find the Closest Palindrome
  15. SPSS学习系列之SPSS Modeler怎么修改默认的内存大小(图文详解)
  16. 【bzoj1187】 HNOI2007—神奇游乐园
  17. POJ.3087 Shuffle'm Up (模拟)
  18. [C/C++语言标准] ISO C99/ ISO C11/ ISO C++11/ ISO C++14/ISO C++17 Downloads
  19. 我对PageRank的理解及R语言实现
  20. WPF触控程序开发(四)——MultiTouchVista_-_second_release_-_refresh_2的救赎

热门文章

  1. Python回归分析五部曲(二)—多重线性回归
  2. BZOJ 2402 陶陶的难题II (树链剖分、线段树、凸包、分数规划)
  3. 最近公共祖先lca模板
  4. FileZilla 客户端连接vsftp无法访问 Received unexpected end-of-file from SFTP server 解决之路
  5. centos7下面ruby的升级
  6. Python 文件writelines() 方法和处理双层列表
  7. ubuntu 17.04 添加用户到sudo组
  8. Python——sklearn提供的自带的数据集
  9. Vue + Webpack-simple 怎么修改生产环境下运行的端口?
  10. 机器学习 - 算法 - 集成算法 - 分类 ( Bagging , Boosting , Stacking) 原理概述