服务端编程示例|学习笔记

简介: 快速学习服务端编程示例

开发者学堂课程【TCP/IP 网络基础:服务端编程示例】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/791


服务端编程示例


内容简介

一、用c语言编写一个TDP和UDP服务器和客户端的程序

二、用TCP协议去编写客户端和服务器的程序

三、编写客户端的程序

一、用c语言编写一个TDP和UDP服务器和客户端的程序

如下图的Demo,这是使用TCP协议客户端和服务器进行的一个通信。

image.png

四个Demo,TCP,直接运行一个服务器的程序,打开另外一个客户端,两个窗口的提示就是两个不同的进程,这里进行一下TCP的客户端的程序。

实现客户端发送信息到服务端的功能,服务端接收并显示收到内容,并把收到内容再次发送给客户端。

如果想要退出,用exit就可以退出了。

image.png

二、用TCP协议去编写客户端和服务器的程序

主要用c语言,建立一个文件夹,重头开始编写,建立一个文件。

在编写之前,需要用到一些文件,系统库的文件或者是socket的文件。

image.png

第一个定义请求队列的个数,第二个是格式的大小。接下来写main函数,参数是空。首先需要定义socket,直接用socket函数,因为是TCP的Demo,所以用流式的socket string,socket就定义完成。

定义socket信息结构体,用sockaddr定义。然后进行填充,有三个成员。列一个参数绑定端口号,随意写一个8887。

调用一个转换函数,写本机的IP地址。先退出来,在系统上填写一个指令,打印所有的IP信息,地址:192.168.86.129

根据实力情况看,然后填充进去,第三步是bind绑定,成功是0,不成功是-1。

现在做一个出错的判断,我们可以直接在if里面判断bind内容。如下图。

image.png

image.png

image.png

image.png

image.png

image.png

打印一下信息,这里是bind出错,退出程序,错误码写1,填充一下参数。第一个是socket的文件描述,第二个参数是socket信息结构体,需要取一下地址,

这里参数的类型是socket string,转换一下,转换成sockadd类型。然后对已经初始化完成结构体进行取地址,最后填充大小。

下一步就是listen监听,把初始化完成的socket操作换成监听socket,成功返回0,不成功返回-1。

同样进行出错的判断,如果listen里面的东西执行后等于负一,同样打印一下出错的信息,属于listen出错,然后退出。

填充一下listen里面的内容,主要有两个参数。一个是socket文件描述符,第二个人监听队列的大小,那么监听函数就写好了。

初始化一下客户端的socket信息结构体,收发数据后,也需要buffer存储,同样也需要一个buffer。先定义一个buffer,数据大小就填已经定义完成的buffer size。接着定义客户端的socket信息结构体,可以直接定义大小,同样用sizeof函数储存bind里面。

定义完成sizeof函数,调用完成后返回socket文件描述符,然后用socket文件描述符去收发数据,并填写参数。第一个参数申请好的server socket。第二个是是客户端的socket信息结构体,进行类型转化。第三个参数是地址。

同样进行出错判断,如果出错就打印一下,然后返回一下出错码

数据的收发。

运用well进行数据的收发,首先在收发里把buffer清空,用memset函数清零,再填大小。然后可以调用函数接收数据,返回值就是接受到一个字母数。

第一个参数就是socket文件描述符,第二个参数是buffer,第三个参数是buffer大小,第四个参数是如图。

当客户端接收exit时可以退出,具体操作如下图。放输入exit按回车,其实加了while函数。

数据显示到终端上,第一个参数是buffer,第二个参数是内容,希望把buffer里的数据显示出来,显示到标准输出。把数据重新发回给客户端,调用send函数,这里数据的收发,在while里。

如果接收到客户端发的exit,退出需要把socket关闭,同时把初始socket关闭,即server socket,最后return,完成TCP客户端的Demo的编写。

编译用gcc,检查错误。反复编译,确保正确。

三、编写客户端的程序

image.png

image.png

可以把之前的文件复制,都是通用的。写程序不可能每次都正确,需要一边写一边调试。再起一个文件,把之前的文件复制过来,不需要重复操作。写一个main函数,第一步定义一个socket,定义一下socket信息结构体,这里填写服务器的信息,对旁边的site进行清空,然后填充里面的成员,首先是协议图,然后是端口号,最后是IP地址。

下一步连接服务器,用connect函数,这里做出错判断,如果为0,就退出并打印错误信息,这里再填充一下参数,填写服务器的socket信息结构体,同样要先转化为socksaddr类型,最后对结构体大小进行测量,这个函数就完成。

下一步数据收发环节,首先定义一下buffer的接收和发送。进行数据收发,写一个while循环,用gets持续循环判断,如果gets里不为空,进行收发。标准输入内容储存,然后获得数据发送,填写socket文件描述符,然后从sendbuf里获取数据,数据大小就是实际内容大小,可以用strien进行测量。接着写判断,如果接收匹配,就退出程序,服务器会把从客户端收到的东西转发回来,用recv接收。里面的参数跟send参数一样,不同的是收到recvbuf里,收到东西打印到fputs里。因为循环,所以recvbuf和sendbuf的内容要进行清空。那么接收exit退出后,退出了循环,并关闭socket,进行close函数。

现在进行编译是否程序完成,再验证。

先让程序运行,把另外一个服务端程序给执行,接受到后正常退出。这里完成TCP客户端和服务器Demo的编写。

下面进行UDP客户端和服务器程序的编写。

首先看一下小的Demo,先执行服务端的程序,再执行客户端的程序。可以看到服务端收到的是客户端发给它的,写一个while循环完成数据的收发。

到udpserver里查看,编写更加简洁,不需要监听等内容,其他文件一样。

然后看一下main函数,首先定义socket文件描述符,用的是socketdgram,初始化后,进行判断,判断内容同上。

然后定义两个socket结构体。serveraddress要对它清空。填充完,用buffer函数对它进行绑定。

然后进行出错判断,出错后退出。然后定义一个recvbuffer,对它进行清零,这里调用recvfrom函数,跟前面不同。这个函数前面几个参数差不多,接收客户端socket信息结构体。

用print打印接收到的信息,告诉服务端客户端收到消息,调用sendto和recvfrom的参数差不多。转发完成后,完成数据传输。

相关文章
|
JavaScript 搜索推荐 前端开发
Vue的SSR 是什么,优缺点分析
Vue的服务器端渲染(SSR)是一种将Vue组件在服务器上执行,并生成完整的HTML页面的技术,这个HTML页面随后被发送至客户端的浏览器进行展示。
|
Cloud Native 测试技术 持续交付
Docker Compose 解析:定义和管理多容器应用,从多角度探索其优势和应用场景
Docker Compose 解析:定义和管理多容器应用,从多角度探索其优势和应用场景
628 0
|
11月前
|
JSON 搜索推荐 API
京东店铺所有商品接口系列(京东 API)
本文介绍如何使用Python调用京东API获取店铺商品信息。前期需搭建Python环境,安装`requests`库并熟悉`json`库的使用。接口采用POST请求,参数包括`app_key`、`method`、`timestamp`、`v`、`sign`和业务参数`360buy_param_json`。通过示例代码展示如何生成签名并发送请求。应用场景涵盖店铺管理、竞品分析、数据统计及商品推荐系统,帮助商家优化运营和提升竞争力。
419 23
|
JavaScript 前端开发
第三问:与、或、非与其截断原理
本文介绍了逻辑运算符“与”(&&)、“或”(||)和“非”(!)的基本功能及其真值表,并详细解释了它们的截断原理(短路求值)。文章还强调了在使用这些运算符时需要注意的类型转换、短路行为、优先级和可读性问题。
|
机器学习/深度学习 自然语言处理 数据可视化
用Python分析文本数据的词频并词云图可视化
用Python分析文本数据的词频并词云图可视化
640 0
|
供应链 监控 安全
深入探究ERP系统的仓库与库存管理模块
深入探究ERP系统的仓库与库存管理模块
1007 7
|
机器学习/深度学习 人工智能 搜索推荐
AIGC有效提升病理诊断效率、缩短药品研发周期
【1月更文挑战第18天】AIGC有效提升病理诊断效率、缩短药品研发周期
462 2
AIGC有效提升病理诊断效率、缩短药品研发周期
|
存储 SQL 关系型数据库
PolarDB架构
PolarDB分布式版产品架构
670 2
|
运维 监控 安全
【软件设计师备考 专题 】系统运行和维护:确保系统的稳定和高效
【软件设计师备考 专题 】系统运行和维护:确保系统的稳定和高效
1318 0
|
监控 数据挖掘 BI
物流架构介绍
订单管理中心 订单管理中心是整个物流架构中的核心组成部分,它负责接收、处理和管理所有的订单信息。订单管理中心可以实现订单的自动化处理和跟踪,包括订单生成、订单审核、订单分配、订单配送、订单结算等流程。此外,订单管理中心还可以提供订货人、收货人、发货人等相关信息的管理和查询功能。
667 0
物流架构介绍