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

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

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

相关文章
|
7月前
Socket网络编程练习题四:客户端上传文件(多线程版)
Socket网络编程练习题四:客户端上传文件(多线程版)
|
7月前
Socket网络编程练习题三:客户端上传文件到服务器
Socket网络编程练习题三:客户端上传文件到服务器
|
6月前
|
缓存 网络协议 Linux
c++实战篇(三) ——对socket通讯服务端与客户端的封装
c++实战篇(三) ——对socket通讯服务端与客户端的封装
155 0
|
3月前
|
网络协议 C语言
C语言 网络编程(十一)TCP通信创建流程---服务端
在服务器流程中,新增了绑定IP地址与端口号、建立监听队列及接受连接并创建新文件描述符等步骤。`bind`函数用于绑定IP地址与端口,`listen`函数建立监听队列并设置监听状态,`accept`函数则接受连接请求并创建新的文件描述符用于数据传输。套接字状态包括关闭(CLOSED)、同步发送(SYN-SENT)、同步接收(SYN-RECEIVE)和已建立连接(ESTABLISHED)。示例代码展示了TCP服务端程序如何初始化socket、绑定地址、监听连接请求以及接收和发送数据。
|
存储 JSON API
带你掌握开发者必备的WebStorageAPI,客户端案例细讲
带你掌握开发者必备的WebStorageAPI,客户端案例细讲
|
存储 XML JSON
c语言使用protobuf与后台前置通信优点及使用总结
c语言使用protobuf与后台前置通信优点及使用总结
|
存储 Java
Java网络编程-服务端程序实现
Java网络编程-服务端程序实现
108 0
|
网络协议 Java 测试技术
Java网络编程之通过代码实现Socket通信
Java网络编程之通过代码实现Socket通信
211 1
|
存储 网络协议 C语言
服务端编程示例|学习笔记
快速学习服务端编程示例
103 0
服务端编程示例|学习笔记
|
网络协议 网络架构
网络通讯原理简介以及演示通讯过程
网络通讯原理简介以及演示通讯过程
188 0
网络通讯原理简介以及演示通讯过程