【TCP回声服务器】一篇文章帮助你看懂TCP! 关于国标GB28181流媒体协议视频平台EasyGBS设备无法接入平台的问题排查 机器学习16 -- Lifelong Learning 终生学习 Vuex中发送mock请求返回数据 JS 正则表达式详解 学习笔记 花了30分钟,给女朋友们写了个最近抖音很火的3D立体动态相册 这 16 个 CSS 伪类,助你提升布局效率! Mysql系列第八讲 详解排序和分页(order by & limit)及存在的坑 SQL语句的一些应用语句 介绍三个开发技术小知识点 数据库系统概论(1) Mysql备份和恢复的类型,备份恢复的几种方法! --个人整理 MySql数据库基本操作(一) 前八月融合创新提升服务,大数据搭建信息网 长三角税收一体化按下“快进键” 一些建议:给当年刚做程序员的我 谁是物联网江湖明日之星?答案是新CIoT 企业信用有效“变现” 江苏银行物联网金融规模达185亿 2020年中国5G物联网行业:中国通信运营商5G投资达1.23万亿元-可下载 搭建 GFS 分布式文件系统-----实操 排障集锦:九九八十一难之第十五难!-------------史上最全rsync报错详解 docker系列1---docker隔离和限制技术 Linux系统安全及应用加固———最适合新手学,新手都能看懂!超详细的理论+超详细的实验!呕心沥血之作完成! LAMP架构集成ownCloud搭建私有云盘 Shell脚本正则表达式(一) Linux第一人称侵入进程的好地方 Windows DOS常用命令(持续更新完善) 大数据驱动新材料研发 变革从内而发,一站式大数据平台和多模数据库雄起 雕佛像、打棒球、开飞机、去北极,这个90后程序员有点不一样 12项特色功能构建施工现场“物联网” 400亿美元!英伟达收购Arm 软银套现离场物联网梦醒 卫星物联网再次引发热议,原因在这里 信用飞:航旅行业数字化前景可期,大数据预防砍头息乱象 大数据加持自动驾驶产业发展 上海智能网联汽车公共数据中心揭牌 恒久科技(002808.SZ):子公司闽保信息与鸿达兴业签署智能制造及大数据平台综合应用项目战略合作框架协议 工业平板电脑如何在物联网中发挥作用? 400亿美元!英伟达收购Arm 软银套现离场物联网梦醒 “数字心脏”动态解析消费密码——国家级消费市场大数据联合实验 重庆:大数据智能化牵引产业结构调整质效提升 分析物联网技术在智能家居中的应用场景 国家级消费市场大数据联合实验室在上海先行先试 山西吕梁培训搬迁户成为大数据标注员 昔日贫困户,玩转高科技 知乎热议:2020年程序员是否过剩? 柯建东:宁波抢抓工业物联网新机遇,要做好四个平台建设 旷视:城市物联网的实现,是从超级应用到操作系统的沉淀过程 排障集合———忘记原密码,如何重新修改MySQL登入密码 【Redis】主从复制 网易2021批笔试题解 msf工具之木马程序制作以及伪装 【JAVA】滴滴-2021校招在线笔试-DE数据开发试卷-0913
您的位置:首页 >数据库 >

【TCP回声服务器】一篇文章帮助你看懂TCP!

基于TCP的回声服务器

1、TCP回声服务器的概念1.1 什么是TCP?1.2 什么是回声服务器?2、TCP回声服务器的编程模型2.1 编程模型2.2 服务器端编程步骤2.3 客户端编程步骤3、代码实现3.1 服务器端代码实现3.2 客户端代码实现4、结尾

1、TCP回声服务器的概念

1.1 什么是TCP?

  TCP 的全称为传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议。

1.2 什么是回声服务器?

  回声服务器是指一种收到客户端发送的消息后,将消息回传至客户端服务器,这种服务器代码简单,但功能健全,非常适合帮助初学者理解网络编程中TCP协议。

2、TCP回声服务器的编程模型

2.1 编程模型

服务器端 S客户端 C创建套接字socket创建套接字socket准备通信地址(服务器的地址)准备通信地址(服务器的地址)绑定套接字和通信地址连接服务器端S监听–等待连接–接收/发送数据发送/接收数据关闭套接字关闭套接字

2.2 服务器端编程步骤

  //创建套接字

  //准备通信地址

  //绑定socket与通信地址

  //监听

  //等待连接(因为TCP是有连接的通信,所以相比UDP多一个等待连接的过程)

  //接收数据,将接收到的数据存入缓冲区

  //发送数据,将缓冲区的数据发送出去

  //关闭套接字

2.3 客户端编程步骤

  //初始化网络库

  //创建套接字

  //准备通信地址

  //连接

  //发送数据

  //接收数据

  //关闭套接字

3、代码实现

3.1 服务器端代码实现

#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#include <sys/socket.h>#include <netinet/in.h>typedef struct sockaddr* SP;int main(int argc,const char* argv[]){// 创建socketint sockfd = socket(AF_INET,SOCK_STREAM,0);if(0 > sockfd){perror("socket");return EXIT_FAILURE;}// 准备地址struct sockaddr_in addr = {};addr.sin_family = AF_INET;addr.sin_port = htons();addr.sin_addr.s_addr = INADDR_ANY;socklen_t addrlen = sizeof(addr);// 绑定if(bind(sockfd,(SP)&addr,addrlen)){perror("bind");return EXIT_FAILURE;}// 监听if(listen(sockfd,5)){perror("listen");return EXIT_FAILURE;}// 等待连接int clifd = accept(sockfd,(SP)&addr,&addrlen);if(0 > clifd){perror("accept");return EXIT_FAILURE;}char buf[4096] = {};size_t buf_size = sizeof(buf);for(;;){// 接收/返回数据size_t ret_size = read(clifd,buf,sizeof(buf));if(0 == strcmp("quit",buf)){printf("通信结束!\n");break;}if(0 == ret_size){printf("连接断开!\n");break;}printf("recv:[%s] bits:%d\n",buf,ret_size);strcat(buf,":return");write(clifd,buf,strlen(buf)+1);}// 关闭socketclose(clifd);}

3.2 客户端代码实现

#include <stdio.h>#include <stdlib.h>#include <string.h>#include <winsock2.h>int main(int argc, char const *argv[]){// 初始化网络库WSADATA wsaData;if(WSAStartup(MAKEWORD(2,2),&wsaData)){perror("WSAStartup");return EXIT_FAILURE;}// 创建socketint clifd = socket(AF_INET,SOCK_STREAM,0);if(0 > clifd){perror("socket");return EXIT_FAILURE;}// 准备通信地址(由服务端决定)struct sockaddr_in addr = {};addr.sin_family = AF_INET;addr.sin_port = htons(9876);addr.sin_addr.s_addr = inet_addr("47.97.229.46");// 连接if(connect(clifd,(struct sockaddr*)&addr,sizeof(addr))){perror("connect");return EXIT_FAILURE;}char buf[4096] = {};size_t buf_size = sizeof(buf);for(;;){printf(">>>");gets(buf);send(clifd,buf,strlen(buf),0);if(0 == strcmp("quit",buf)){printf("通信结束!\n");break;}size_t ret_size = recv(clifd,buf,buf_size,0);printf("recv:[%s],bits:%d",buf,ret_size);}// 关闭socketclosesocket(clifd);return 0;}

4、结尾

  本文主要展示了TCP回声服务器的基本概念,及代码的实现,旨在更好的帮助初学者理解TCP通信的规则及格式,代码较为简单,功能实现的也很简单,但相信通过阅读本文一定能对TCP模式的通信有一个更深的认识。

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。