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

环境:vs2015
源码:本文代码

在这里c++ socket学习(1.1)学到了怎么样建立TCP,然后通过TCP连接发送、接收信息。

但是都是一次性的,当时是接收信息后就结束了,最多加个输出把接收的信息打印出来,现在来看一下怎么一直接收信息,直到程序接收到退出命令。

服务端

其实很简单,做个死循环就行了,这样程序就会一直在接收客户端发送过来的信息,直到客户端发送exit

sockaddr_in servSock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);memset(&sockAddr, 0, sizeof(sockAddr));//初始化
sockAddr.sin_family = AF_INET;         //同上,即使用ipv4
sockAddr.sin_addr.s_addr = inet_addr("127.0.0.1"); //说明要监听的ip地址
sockAddr.sin_port = htons(9000);  //说明要监听的端口号
//IP和端口与套接字绑定起来,监听sockAddr设置的ip地址和端口号
bind(servSock, (SOCKADDR*)&sockAddr, sizeof(SOCKADDR));
listen(servSock, 20);sockaddr_in clntAddr;
//初始化clntAddr
memset(&clntAddr, sizeof(SOCKADDR), 0);
//使用accept返回的套接字clntSock来与响应的客户端进行交流,即响应客户端的connect
SOCKET clntSock = accept(servSock, (SOCKADDR*)&clntAddr, &nSize);
while (1) {int len = recv(clntSock, buf, maxlen, 0);std::string s(buf);if (s.compare("exit") == 0) {std::cout << "接收到关闭信息,关闭服务器" << std::endl;break;}std::cout << s << std::endl;
}
//关闭套接字
closesocket(clntSock);

客户端

SOCKET client = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);sockaddr_in servAddr;
memset(&servAddr, 0, sizeof(sockaddr_in));
servAddr.sin_addr.s_addr = inet_addr("127.0.0.1");
servAddr.sin_port = htons(9000);
servAddr.sin_family = AF_INET;//连接到服务端
connect(client, (sockaddr*)&servAddr, sizeof(sockaddr_in));
//循环
while (1) {std::string s;//连接std::cout << "请输入内容(长度为100个字符):";std::cin >> s;//这里就是发送数据了send(client, s.c_str(), s.size() + 1, 0);if (s.compare("exit") == 0) {break;}
}
//关闭套接字
closesocket(client);

记得在程序开头说明所用的winsock 版本号

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

  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. Android基础入门教程——7.6.1 Socket学习网络基础准备

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

  4. Linux Socket学习(十三)

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

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

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

  6. c++ socket学习(1.5)

    本文学习相关资料: C/C++ socket编程教程 环境:vs2015 源码:本文代码 这次来试一下使用TCP来传输文件,其实传输数据和差不多,就是多一个读取文件,和一个写文件而已. 服务端 int ...

  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. 数据库插入时,标识列插入显式值
  2. maven jar包冲突常见报错及解决方法
  3. Matlab的size()函数
  4. PTA 基础编程题目集 7-21 求特殊方程的正整数解 C语言
  5. 深度报告:一文看懂生物芯片产业
  6. 三大阶段,四大领域,详解你不知道的AIoT!
  7. 雁栖湖会议研讨:计算机能代替程序员吗?
  8. vs目录(继承的值)配置
  9. Mac电脑配置Alfred、Go2shell、iTerm2+Oh My Zsh
  10. Android 扫描二维码demo
  11. python从小到大的顺序输出_「小白专栏」Python中使用for循环,为什么输出结果不是按顺序?...
  12. java web 配置教程,javaWeb实战教程0-环境配置,javaweb实战教程0-
  13. 我是京东智能配送机器人,已抵达您的楼下
  14. [TypeScript] Interface and Class
  15. 3GPP定义的IMSnbsp;ECT业务与Conf…
  16. 有效解决jdbc连接mysql提示Access denied for user ‘‘@‘localhost‘ to database ‘mysql1‘
  17. 电脑桌面没有计算机图标鼠标也点不起来,电脑桌面上的图标不见了,鼠标也没用了该怎么办呢?...
  18. 实验二 —— 串口通信
  19. 电影:张嘉佳《从你的全世界路过》:如果是路过,我就在终点等你?
  20. android使用百度地图SDK 去掉百度Logo的小技巧(转)

热门文章

  1. 教你玩转CSS border(边框)
  2. linux动态库ppt,LINUX系统中动态链接库创建与使用补充_区块链白皮书代写|市场计划书项目PPT设计_Tbleg...
  3. 降雨插值_ArcGIS计算土壤侵蚀模数(二)降雨侵蚀力因子R计算
  4. 阿里云mysql创建多个用户_阿里云MySQL创建指定用户访问指定表
  5. java synchronized 对指定代码添加锁-简单样例
  6. 赞!15个来自 CodePen 的酷炫 CSS 动画效果
  7. js对HTML字符转义与反转义
  8. 浏览器的同源策略与跨域
  9. git仓库创建后,由主支变成开发分支
  10. kotlin访问控制符可见性