向国外支付网站开发费找培训机构的网站
介绍套接字
UDP套接字的介绍见另一篇文章:https://zhuanlan.zhihu.com/p/113073033
这篇文章已经介绍了很多基础的嵌套字的函数,在这里不做赘述,这篇实验报告,只介绍UDP中没有的函数.
实际上套接字是互联网应用程序的接口,可以把它理解为你办公室的门:当你想从你的办公室给同事传递消息时,你住需要把信放在门口,然后会有人(传输层等)会把信放到你的同事的门口,最后他就可以从门口拿到信读取其中的信息.这扇门之后发生的传递工作都是传输层的事情,跟应用层没关系.
由于套接字的库很多,在此不做详细解释,程序中使用到的数据类型和函数统一包括在下面的库函数中:
#include
TCP套接字的信息传递建立在链接的基础上,因此TCP是可靠的传递方式.
运行环境
运行环境为Windows子系统Ubuntu 18.04 LTS
程序功能
TCP套接字我实现的功能稍微多一点具体如下:
(1)客户程序接收输入的一段字符串并且把字符串传递给服务器;
(2)服务器接受客户程序传来的字符串,输出客户程序的地址和字符串;
(3)服务器将当前时间、用户的地址、用户传来的字符串返回给客户程序;
(4)客户程序接受服务器传来的信息,并且输出全部信息.
服务器端程序
下面分块介绍服务器端程序.
首先声明套接字,必须要提的是,连接类型是SOCK_STREAM,协议类型是IPPROTO_TCP
// 创建TCP套接字
接下来设置服务器端的地址,并且绑定地址,这里都在UDP嵌套字中讲解过了
// 设置服务器的地址
然后要让服务器端程序建立监听队列,这里储存未处理的请求;
listen函数的第一个参数就是服务器的嵌套字;
第二个参数是队列的长度;
// 创建套接字队列
接下来是一些保存客户端套接字、地址、传来的信息的变量
// 缓冲区长度
服务器循环处理客户端请求的循环结构省略,直接看服务器接受客户端请求的函数accpet;
函数的第一个参数是服务器的套接字;
第二个参数是用来储存客户端地址的参数,注意要将他转成通用的地址结构struct sockaddr *;
第三个参数是地址结构的大小;
// 使用accept函数等待客户的请求
服务器和客户端建立好连接后开始接受客户端的数据.由于已经建立好一对一的链接,因此接收数据的函数read_from_client要比UDP的函数简单的多.
参数就是客户端的套接字(这个套接字不需要在前面和刚刚收到的地址绑定在一起),返回的就是客户端传来数据
// 从客户端接受信息
接下来是向客户端传递信息的函数,这个函数也比UDP简单
第一个参数是客户端的套接字;
第二个参数是传送的字符串;
第三个参数是缓冲区的大小;第四个参数不用管,传0
// 向客户端传递时间
下面是全部的服务器端的代码
#include
客户端程序
客户端详细介绍一下传送信息的函数和接收信息的函数就差不多了,其他的操作都在服务器端里面有.
传递信息的函数wirte,同样由于已经建立好一对一的链接因此函数比较简单:
第一个参数为客户端的套接字;
第二个参数为要传递的字符串;
第三个参数为字符串的最大长度,也就是缓冲区的大小;
// 客户向服务器传输数据时用的函数
接收信息的函数recv:
第一个参数是客户端的套接字;
第二个参数是储存信息的字符串;第三个参数不用管,给0;
这里解释一下返回值是字符串的长度,因此给字符串加上结束符'0';
int
接下来是客户端的全部代码:
#include
运行结果
首先启动服务器程序如下

然后启动客户端程序,客户端程序运行完之后结果如下:

回过头来看服务器程序:

评论
C语言的细节真多,啥时候放一下python的套接字真心无脑……