本文学习相关资料:
C/C++ socket编程教程

环境:vs2015
源码:本文代码

这次来试一下使用TCP来传输文件,其实传输数据和差不多,就是多一个读取文件,和一个写文件而已。

服务端

int readlan = 100;
std::ifstream infile;SOCKET client = accept(servSock, (sockaddr*)&clntAddr, &nSize);//获取
do {//接收获取的文件名recv(client, buf, maxlen, 0);std::cout << buf << std::endl;//打开文件infile.open(buf, std::ios::binary | std::ios::in);if (infile.is_open()) { //如果打开文件成功就退出,否则继续等待break;}else {std::cout << "文件打开失败" << std::endl;send(client, "False", 6, 0);}
} while (1);if (infile.is_open()) {//打开文件成功,通知客户端接收文件send(client, "True", 5, 0);std::cout << "准备发送文件" << std::endl;int num = 0;//获取文件的大小infile.seekg(0, std::ios::end);int length = infile.tellg();//设置文件指针在第一个位置infile.seekg(std::ios::beg);//循环读取while (length > 0) {std::cout << "正在发送文件,目前还剩余" << length << "字节" << std::endl;memset(&buf, maxlen, 0);//读取内容,每次读readlen个字节if (length >= readlen) { length -= readlen;infile.read(buf, readlen);num = readlen;}else {num = length;infile.read(buf, length);length = 0;}//发送内容send(client, buf, num, 0);}
}
else {std::cout << "文件打开失败,即将关闭" << std::endl;
}
//发送断开连接信息
shutdown(client, SD_SEND);
//关闭文件和套接字
infile.close();
closesocket(client);

客户端

std::ofstream f;
std::string fileName;//连接到服务端
connect(client, (sockaddr*)&servAddr, sizeof(sockaddr));
while (1) {memset(buf, maxlen, 0);std::cout << "请输入要下载的文件名称:";//输入文件名称std::cin >> fileName;send(client, fileName.c_str(), fileName.size() + 1, 0);recv(client, buf, readlen, 0);if (strcmp(buf, "True") == 0) {break;}
}
//打开文件
f.open(fileName.c_str(), std::ios::binary | std::ios::out);
while (1) {int nlen = recv(client, buf, readlen, 0);if (nlen <= 0) {std::cout << "文件接收完毕!" << std::endl;break;}else {//写入文件f.write(buf, nlen); f.flush();}
}
f.close();
closesocket(client);

可能会注意到这里服务端能接收到连接,是因为调用了listen,但是客户端没有listen,服务端是怎么知道要把数据发送到哪里呢?

原来服务端在调用accept的时候,就已经获取到了客户端的IP地址端口号,保存在了clntAddr

那么客户端又没有bind 又怎么来IP地址端口呢?

简单地来说是当客户端调用connect的时候,系统自动分配的,毕竟需要个IP地址端口才能进行3次握手

c++ socket学习(1.5)相关推荐

  1. Android socket 学习记录 之 执行new socket(ip, port)程序崩溃

    这段时间在学习Android的socket编程,我不是专做APP的,做的是bootloader.驱动.hal.framework这个线的,也就是系统搭建和功能优化设计.为了打通这整条线,为此学习了不少 ...

  2. c++ socket学习(1.6)

    本文学习相关资料: C/C++ socket编程教程 环境:vs2015 源码:本文代码 这次来看看UDP 之前在c++ socket学习(1.2)讲过UDP怎么发送了,那现在来做一个可以一直发送的. ...

  3. c++ socket学习(1.3)

    本文学习相关资料: C/C++ socket编程教程 环境:vs2015 源码:本文代码 在这里c++ socket学习(1.1)学到了怎么样建立TCP,然后通过TCP连接发送.接收信息. 但是都是一 ...

  4. Android基础入门教程——7.6.1 Socket学习网络基础准备

    Android基础入门教程--7.6.1 Socket学习网络基础准备 标签(空格分隔): Android基础入门教程 本节引言: 为了照顾没学过Java Socket的初学者,或者说捋一捋Andro ...

  5. Linux Socket学习(十三)

    使用UDP进行广播 如果通信只能在两个单体之间完成,这样的方式是没有效率的.另一方面,广播允许同时要多个接收者传播信息. 在这一章,我们将会学习下列内容: 建立一个UDP广播套接口 使用套接口发送广播 ...

  6. Linux Socket学习(十八)--完

    一个实际的网络工程 不论我们的头脑是否在由上一章的学习中清醒过来,现在我们需要休息一下了.在这一章我们并不讨论新的内容,而是用我们所学到的这些东西来实现一些有趣的事情.在学习了这么多的东西之后来一些有 ...

  7. c++ socket学习(1.4)

    本文学习相关资料: C/C++ socket编程教程 环境:vs2015 源码:本文代码 前面学到了TCP怎么循环发包,但是TCP连接的话会出现一个问题粘包. TCP连接接收到的数据并不是马上读取到内 ...

  8. c++ socket学习(1.2)

    本文学习相关资料: C/C++ socket编程教程 环境:vs2015 源码:本文代码 windows 如何创建客户端与服务端通信? UDP: 这次就没什么客户端服务端好说了,UDP是没有无连接的 ...

  9. c++ socket学习(1.1)

    本文学习相关资料: C/C++ socket编程教程 环境:vs2015 源码:本文代码 windows 如何创建客户端与服务端通信? TCP: 服务端 在windows先告诉程序我们要使用哪个版本的 ...

最新文章

  1. 解决visual studio已安装的问题
  2. Lesson 6.动态计算图与梯度下降入门
  3. stn,spatial transformer network总结
  4. CodeForces - 1321E World of Darkraft: Battle for Azathoth(二维偏序+线段树)
  5. javascript学习系列(3):数组中的foreach方法
  6. 在struts2中push方法的使用_【干货】网版印刷中水墨使用注意事项及助剂使用方法...
  7. python入门--常见的异常类型,常见错误
  8. 【转】TreeList 选中节点时图标状态和背景色
  9. Failed to load selinux policy, Freezing | CentOS | Redhat | RHEL
  10. c语言程序网吧管理,C语言网吧计费系统(小项目).doc
  11. matlab对离散曲线积分,matlab实现曲线积分
  12. java从网络Url中下载文件例子
  13. 计算机网络故障提出问题,列控系统及其计算机网络的故障诊断与故障容错研究...
  14. C51单片机实验——7段数码管实验
  15. 海康摄像头4G内网连接方案
  16. 美国国家安全局(NSA)“酸狐狸”漏洞攻击武器平台技术分析报告
  17. 满减折扣促销功能代码优化实战
  18. 台式机fiddler手机抓包
  19. VBA基础知识整理(字典,自定义函数)
  20. matlab常用函数与常用指令大全

热门文章

  1. Myesclipe+SSH+jsp+mysql+tomcate实现一个简单的CRM客户关系管理系统
  2. 如何学好初中计算机,初中生怎么学习方法好 十大方法告诉你
  3. 【工具使用】Xray与Burp联动--流量转发插件Passive Scan Client
  4. 1-9其他数据库注入
  5. linux php 版本切换,linux更换PHP版本,多个PHP版本切换
  6. http 路径 |_HTTP 请求與响应的格式及 curl 命令使用
  7. 本地项目antd 修改.less文件导致内存溢出
  8. html5表单与PHP交互
  9. 移动端 fixed 固定按钮在屏幕下方,然后按钮被键盘顶上来...顶上来了有没有~
  10. express接受get数据