首页 理论教育ARM嵌入式系统开发指南

ARM嵌入式系统开发指南

【摘要】:面向连接的echo服务编程实例本节给出一个echo服务的编程实例,echo_serv.c是服务端源代码,提供创建服务端,绑定套接字到本机IP和8080端口,当收到客户端发送的字符串就在屏幕打印出来,并把字符串发送给客户端,如果客户端发送“quit”,服务器端退出。第77行关闭和用户建立的连接,第78行关闭服务端监听的套接字。

【例10.4】面向连接的echo服务编程实例

本节给出一个echo服务的编程实例,echo_serv.c是服务端源代码,提供创建服务端,绑定套接字到本机IP和8080端口,当收到客户端发送的字符串就在屏幕打印出来,并把字符串发送给客户端,如果客户端发送“quit”,服务器端退出。

程序定义了两个套接字句柄sock_fd和clientfd,sock_fd是服务端用来监听的套接字,clientfd是用户发起请求后与客户端建立的套接字。第25行调用socket()函数创建了套接字,之后设置sockaddr结构,填入本机IP和需要监听的端口号。第41行使用bind()函数绑定套接字到本机的8080端口,如果绑定成功,第50行使用listen()函数设置程序监听用户请求的参数。第60行调用accept()函数阻塞监听用户请求,如果有请求,则accept()函数返回和用户建立的套接字句柄,从此建立连接。第68行~75行通过recv()函数读取用户发送的字符串,打印后通过send()函数发送给用户,第73行判断用户发送的字符串是否等于“quit”,如果是则跳出循环。第77行关闭和用户建立的连接,第78行关闭服务端监听的套接字。

【例10.5】无连接的套接字通信服务编程实例(www.chuimin.cn)

无连接的套接字通信比较简单,这里讲给出获得一个时间的例子,服务端程序time_serv.c负责创建socket并且绑定到9090端口,然后等待客户端发出请求,当收到客户端发送的请求时间命令“time”以后,生成当前时间的字符串发送给客户端。客户端建立socket以后,直接向指定的服务端发送请求时间命令,之后等待服务端返回,发送退出命令,关闭连接。

程序第18行和第19行定义了两个地址结构变量,local表示服务端监听的地址,from用来存放发送数据到服务端的客户端地址。首先在第25行调用socket()函数创建了套接字,之后设置要绑定的IP和端口号,在第38行使用bind()函数绑定套接字到指定的端口。第48行~68行循环处理客户端发来的数据,第50行调用recvfrom()函数接收客户端发来的数据。如果收到数据,函数会设置from参数指定的sockaddr结构,内容为客户端的IP和端口。第59行和第62行判断用户发送的字符串,如果是“time”请求,在64行使用的时间函数asctime()生成当前时间的字符串形式,并用sendto()函数发送给客户端;如果是“quit”请求,则跳出循环。第69行关闭套接字,对应的连接也随之关闭。