16面向连接的客户端服务器端

1./etc/services里面存储服务信息

ruptimed 4000/tcp

这条就是一个服务信息。因为文件中没有这条信息,所以在运行时,出现, servname not supported for ai_socktype。

所以只需要把ruptimed 4000/tcp添加到/etc/services文件中。

ruptimed是服务名,4000是端口号,tcp是连接类型(4000没有被其他服务占用)

打开这个文件,会看见很多相似条目,比如dns,smtp,pop3等。

自定义的端口号小于1024。

2.客户端输出

09:14:28 up  1:22,  3 users,  load average: 0.04, 0.07, 0.16

3.daemonize函数可以不调用。

4.客户端流程

1)socket函数创建fd,只是具有基本类型,并没有添加服务器参数。相当与只是声明了一个容器。

2)getaddrinfo用来查询服务ruptimed的信息。其中包括了服务的端口号,类型(这些属于服务器信息,只是注册为了标准服务信息/etc/services)。

3)connect函数建立连接,参数是客户端的fd和客户端的地址,这个地址应该是服务器的地址信息。因为两个程序再同一台主机运行,所以直接使用了本机地址。但是如果在不同机器运行,需要填对方地址,否则没有目标发送报文。

4)就是recv接收服务器发送来的信息,用fd客户端作为识别标志。

5服务器端流程

1)gethostname获取主机名,这个在文件/etc/hosts中可以查到。

2)daemonize函数是释放线程资源函数,此处可以注释掉。

3)getaddrinfo用来查询服务ruptimed的信息。其中包括了服务的端口号,类型(这些属于服务器信息,只是注册为了标准服务信息/etc/services)。

4)socket函数创建了服务器端的fd。

5)bind将服务器端的fd与自身的ip绑定。可以参见16.3.4。

6)listen服务器端的fd。

7)如果listen成功,就可以等待accept接受客户端请求,参数是服务器端的fd,如果有客户端连接了就返回一个clfd作为监听到的客户端标识。

8)send数据到客户端,以监听到clfg作为目标标识。

客户端代码

 

服务器端代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值