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

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

开发者学堂课程【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的参数差不多。转发完成后,完成数据传输。

相关文章
|
9天前
|
机器人 API 调度
基于 DMS Dify+Notebook+Airflow 实现 Agent 的一站式开发
本文提出“DMS Dify + Notebook + Airflow”三位一体架构,解决 Dify 在代码执行与定时调度上的局限。通过 Notebook 扩展 Python 环境,Airflow实现任务调度,构建可扩展、可运维的企业级智能 Agent 系统,提升大模型应用的工程化能力。
|
人工智能 前端开发 API
前端接入通义千问(Qwen)API:5 分钟实现你的 AI 问答助手
本文介绍如何在5分钟内通过前端接入通义千问(Qwen)API,快速打造一个AI问答助手。涵盖API配置、界面设计、流式响应、历史管理、错误重试等核心功能,并提供安全与性能优化建议,助你轻松集成智能对话能力到前端应用中。
715 154
|
15天前
|
人工智能 数据可视化 Java
Spring AI Alibaba、Dify、LangGraph 与 LangChain 综合对比分析报告
本报告对比Spring AI Alibaba、Dify、LangGraph与LangChain四大AI开发框架,涵盖架构、性能、生态及适用场景。数据截至2025年10月,基于公开资料分析,实际发展可能随技术演进调整。
963 152
|
负载均衡 Java 微服务
OpenFeign:让微服务调用像本地方法一样简单
OpenFeign是Spring Cloud中声明式微服务调用组件,通过接口注解简化远程调用,支持负载均衡、服务发现、熔断降级、自定义拦截器与编解码,提升微服务间通信开发效率与系统稳定性。
366 156
|
7天前
|
分布式计算 监控 API
DMS Airflow:企业级数据工作流编排平台的专业实践
DMS Airflow 是基于 Apache Airflow 构建的企业级数据工作流编排平台,通过深度集成阿里云 DMS(Data Management Service)系统的各项能力,为数据团队提供了强大的工作流调度、监控和管理能力。本文将从 Airflow 的高级编排能力、DMS 集成的特殊能力,以及 DMS Airflow 的使用示例三个方面,全面介绍 DMS Airflow 的技术架构与实践应用。
|
8天前
|
人工智能 自然语言处理 前端开发
Qoder全栈开发实战指南:开启AI驱动的下一代编程范式
Qoder是阿里巴巴于2025年发布的AI编程平台,首创“智能代理式编程”,支持自然语言驱动的全栈开发。通过仓库级理解、多智能体协同与云端沙箱执行,实现从需求到上线的端到端自动化,大幅提升研发效率,重塑程序员角色,引领AI原生开发新范式。
588 2