用Socket API建立简易TCP服务端

// 1 建立一个socket
// 2 绑定接受客户端连接的端口 bind
// 3 监听网络端口 listen
// 4 等待新客户端连接 accept
// 5 等待客户端请求 recv
// 6 向客户端返回请求的数据send
//–循环5-6
// 7 关闭socket closesocket

用Socket API建立简易TCP客户端

// 1 建立一个socket
// 2 连接服务器 connect
// 3 向服务端发送请求 send
// 4 接收服务器返回的数据 recv
//–循环3-4
// 5 关闭socket closesocket

//------mySever
#define WIN32_LEAN_AND_MEAN      //避免引用会产生冲突的依赖库(windows.h包含有WinSock2.h的一些宏定义,防止产生重定义错误!)
#define _WINSOCK_DEPRECATED_NO_WARNINGS
#include <windows.h>                       //windows系统API头文件
#include <WinSock2.h>                      //最新windows下Socket API头文件
#include <cstdio>
/*无法解析。。。一般由于没有引入链接库文件导致,有两种方法*/
/*方法1:预编译方式。弊端:不能跨平台,在非windows平台下不支持这种方式*/
#pragma comment(lib,"ws2_32.lib")
/*方法2:在连接器中添加:链接器->输入->附加依赖项*/int main()
{/*——建立简易TCP服务端——*//*创建WORD的版本号 和 WSADATA变量*/WORD version = MAKEWORD(2, 2);WSADATA data;/*启动WindowsSocket 2.x环境*/WSAStartup(version, &data);/*1 建立一个socket (套接字)*///Parameters:[1]socket协议簇AF_INET(IPV4),[2]网络类型,SOCK_STREAM面向数据流,[3]protocol网络协议SOCKET _sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);/*2 绑定接受客户端连接的端口 bind*///Parameters:[1]socket,[2]sockaddress Socket网络地址,[3]namelen 第二个参数的长度sockaddr_in _sin = {};                                                   //如果直接使用sockaddr,这个结构体中的类型不便于我们填写变量_sin.sin_family = AF_INET;_sin.sin_port = htons(4567);                                        //host to net unsigned short端口号,主机上的数据类型和网络字节序不同_sin.sin_addr.S_un.S_addr = INADDR_ANY;                 //inet_addr("127.0.0.1");这是本机地址,不是外网地址,这种方法可以防止外网的访问。INADDR_ANY是所有IP地址都可以访问if (SOCKET_ERROR == bind(_sock, (sockaddr*)&_sin, sizeof(_sin))){printf("错误,绑定网络端口失败...\n");}else {printf("绑定网络端口成功...\n");}//3 监听网络端口 listenif (SOCKET_ERROR == listen(_sock, 5))                    //最多可以有多少监听对象连接{printf("错误,监听网络端口失败...\n");}else {printf("监听网络端口成功...\n");}//4 等待接受客户端连接 acceptsockaddr_in clientAddr = {};int nAddrLen = sizeof(sockaddr_in);SOCKET _csock = INVALID_SOCKET;char msgBuf[] = "Hello, I'm Server.";_csock = accept(_sock, (sockaddr*)&clientAddr, &nAddrLen);    //最后一个参数传入结构体的长度if (INVALID_SOCKET == _csock){printf("错误,接收到无效客户端SOCKET. . .\n");}printf("新客服端加入: _csockIP =  %d , %s \n", (int)_csock, inet_ntoa(clientAddr.sin_addr)); //inet_ntoa需要定义宏:_WINSOCK_DEPRECATED_NO_WARNINGSchar _recvBuf[128] = {};while (true){//5 接收客户端数据int nLen = recv(_csock, _recvBuf, 128, 0);if (nLen <= 0){printf("客户端已经退出,任务结束。");break;}printf("收到命令:%s\n", _recvBuf);//6 处理请求if (0 == strcmp(_recvBuf, "getName")){char msgBuf[] = "田晓萌大王";//7 向客户端发送一条数据sendsend(_csock, msgBuf, strlen(msgBuf) + 1, 0);}else if (0 == strcmp(_recvBuf, "getAge")){char msgBuf[] = "23";//7 向客户端发送一条数据sendsend(_csock, msgBuf, strlen(msgBuf) + 1, 0);}else{char msgBuf[] = "???...";//7 向客户端发送一条数据sendsend(_csock, msgBuf, strlen(msgBuf) + 1, 0);}}//8 关闭socket套接字  closesocketclosesocket(_sock);/*关闭清除WindowsSocket环境*/WSACleanup();printf("已退出。");getchar();return 0;
}
//------myClient
#define WIN32_LEAN_AND_MEAN#include<windows.h>
#include<WinSock2.h>
#include<stdio.h>#pragma comment(lib,"ws2_32.lib")int main()
{/*——建立简易TCP客户端——*//*创建WORD的版本号 和 WSADATA变量*/WORD version = MAKEWORD(2, 2);WSADATA data;/*启动WindowsSocket 2.x环境*/WSAStartup(version, &data);//1 建立一个socketSOCKET _sock = socket(AF_INET, SOCK_STREAM, 0);if (INVALID_SOCKET == _sock){printf("错误,建立Socket失败...\n");}else {printf("建立Socket成功...\n");}
//2 连接服务器 connectsockaddr_in _sin = {};_sin.sin_family = AF_INET;_sin.sin_port = htons(4567);//与服务端一致_sin.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");int ret = connect(_sock, (sockaddr*)&_sin, sizeof(sockaddr_in));if (SOCKET_ERROR == ret){printf("错误,连接服务器失败...\n");}else {printf("连接服务器成功...\n");}while (true){//3 用户输入命令char cmdBuf[128] = {};scanf("%s", cmdBuf);//4 处理请求命令if (0 == strcmp(cmdBuf, "exit")){printf("收到退出命令,任务结束。");break;}else{//5 向服务器发送请求send(_sock, cmdBuf, strlen(cmdBuf) + 1, 0);}//6 接收服务器信息 recvchar recvBuf[128] = {};int nlen = recv(_sock, recvBuf, 128, 0);if (nlen > 0){printf("接收到的数据:%s\n", recvBuf);}}//7 关闭socket套接字  closesocketclosesocket(_sock);/*关闭清除WindowsSocket环境*/WSACleanup();getchar();return 0;
}

C++网络(四)持续处理请求的C/S网络相关推荐

  1. 超硬核!!!一篇文章搞定TCP、UDP、Socket、HTTP(详细网络编程内容+现实解释三次握手四次挥手+代码示例)【网络编程 1】

    TCP.UDP.Socket 一天面试的经验: 什么是网络编程 网络编程中两个主要的问题 网络协议是什么 为什么要对网络协议分层 计算机网络体系结构 1 TCP / UDP 1.1 什么是TCP/IP ...

  2. 极验第四代滑块验证码破解(四):请求分析及加密参数破解

    极验第四代滑块验证码破解(四):请求分析及加密参数破解 声明 一.极验请求分析 1. 滑块测试网站入口 2. 滑块验证过程抓包 3. 请求详解 3.1. adaptive-captcha-demo 3 ...

  3. 三大通识知识:进程,线程,网络(四)

    三大通识知识(一) :进程,线程,网络之间的关系 三大通识知识(二):进程实现原理 三大通识知识(三):线程实现原理 三大通识知识(四):网络 三大通识知识(五):TCP服务器 进程,线程,网络视频连 ...

  4. Mysql知识网络(持续更新)

    Mysql知识网络(持续更新) 前言 好记性不如烂笔头.最近学习了MYSQL的相关知识,方便以后复习以及知识点查询,记录一些知识点.本文通过基础知识+mysql优化+实战经验进行总结.也会分享一些自己 ...

  5. cdn 中移集采_华为鲲鹏CDN规模中标中国移动内容网络四期集采

    近日,中国移动内容网络四期集采落下帷幕,华为近千台鲲鹏CDN服务器中标本期集采项目,标志着华为鲲鹏CDN服务器即将大规模服务中国移动内容网络. 内容网络是中国移动以视频.网页.游戏.应用等多种业务分发 ...

  6. 5G信令(就是用户身份信息)——手机开机后,先从USIM中读取之前运营商分配的临时身份信息GUTI/TMSI,发送携带该身份信息的信令给基站,请求接入运营商网络。...

    5G时代,跟IMSI-CATCHER SAY GOODBYE from:https://unicorn.360.com/blog/2018/04/18/GoodBye_5G_IMSI-Catcher/ ...

  7. IOS开发基础之网易新闻环境搭建异步请求json,AFN网络封装第1天

    IOS开发基础之网易新闻环境搭建异步请求json,AFN网络封装第1天 视频资料是2015年的,但是AFN是导入框架的关键文件,我尝试使用cocoapods安装最新的AFN,虽然成功了,但是版本太高, ...

  8. Soul 网关源码阅读(四)Dubbo请求概览

    Soul 网关源码阅读(四)Dubbo请求概览 简介     本次启动一个dubbo服务示例,初步探索Soul网关源码的Dubbo请求处理流程 示例运行 环境配置     在Soul源码clone下来 ...

  9. 网络四.通过接入网进入互联网内部

    网络四.通过接入网进入互联网内部(了解) 4.1 ADSL 接入网的结构和工作方式 4.1.1 互联网的基本结构和家庭.公司网络是相同的 互联网与家庭和公司网络之间的区别之一就是距离,互联网的传输,比 ...

最新文章

  1. 杀进程和取文件最近使用时间
  2. 语言生成不自闭迷宫_4招教你分清自闭症、多动症、发育迟缓、抑郁症的区别...
  3. kubeadm 线上集群部署(四) k8s node 节点初始化安装
  4. c++产生死锁的必要条件?已经如何预防死锁?
  5. 北京第一个公共云计算平台即将诞生
  6. ContactsContract.Contacts与ContactsContract.CommonDataKinds.Phone的区别
  7. 职业中专计算机基础试讲课,职业中专计算机基础教育分析
  8. CUDA 网格级并发-流(2)
  9. 解决outlook无法启动
  10. java 判断 nan_判断NaN,js和java中取小数点后几位
  11. 华为HarmonyOS 2.0 手机开发者Beta版发布
  12. 2019开发者调查:Python 或成赢家,Java 最不赚钱?
  13. 2022华为杯研究生数学建模竞赛E题思路解析
  14. 五款优秀的端口扫描工具
  15. 个人发卡网站源码内置2套模板 对接码支付
  16. 华为3COMSOX法案IT内控实践
  17. python 找零问题 动态规划
  18. android 9 8 对比,米9安卓对比荣耀Flyme 8,这几点不同拉开了差距!
  19. 将open目录及子目录和文件删除
  20. 开发板ARM+FPGA架构运动控制卡 运动控制器

热门文章

  1. Java习题集第八章Java的网络程序设计
  2. Smart Link相关学习
  3. 科目一科目四理论考试助手藏文驾考藏语版
  4. 转专业计算机的面试自我介绍,转专业面试自我介绍范文
  5. APP store 大行其道
  6. linux小白系列-各种软件包的下载
  7. IMX6ULL裸机篇之DDR3参数配置分析
  8. Vue2.0源码解析 - 知其然知其所以然之keep-alive
  9. Chrome 浏览器打开页面变成下载html文件的问题
  10. Windows ECP技术浅谈