首页 理论教育ARM嵌入式系统开发实践

ARM嵌入式系统开发实践

【摘要】:面向连接的echo服务编程实例echo_client.c是客户端程序,在和服务端建立连接后发送字符串到服务端,并且接收服务端发送的字符串显示在屏幕上。client request:timeclient request:quit服务端打印了创建套接字成功,绑定套接字成功,之后进入循环等待客户端的数据,最后两行打印出了客户端发送来的命令,最后程序退出。

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

echo_client.c是客户端程序,在和服务端建立连接后发送字符串到服务端,并且接收服务端发送的字符串显示在屏幕上。

程序在第24行使用socket()函数创建了套接字句柄,之后设置sockaddr结构,填入服务端IP地址端口号。第40行使用connect()函数向服务端发起连接,如果连接成功,开始数据传输。第48行~55行通过send()函数发送字符串到服务端,使用recv()函数接收服务端发送的数据,并且打印在屏幕上,第53行判断如果服务端发送字符串“quit”,则退出循环。第57行关闭套接字。

两个程序编译后,需要在不同的控制台界面执行。执行服务端程序s后,打印信息如下:

success to create socket3

success to bind address!

success to listen

表示套接字创建成功,并且绑定到指定的端口上。之后在另一个控制台运行客户端程序,控制台输入如下。

success to create socket3

success connect to server!

data send:def receive:def

data send:test receive:test

data send:hello receive:hello

data send:quit receive:quit

显示出成功创建套接字的提示,并且打印5行信息,客户端发送的字符串并未接收到服务端返回的字符串,最后一个字符串是“quit”,表示退出连接。在服务端也会得到类似的信息:

number of receive bytes=100 data=abc

number of receive bytes=100 data=def(www.chuimin.cn)

number of receive bytes=100 data=test

number of receive bytes=100 data=hello

number of receive bytes=100 data=quit

【例10.7】无连接的套接字通信服务编程实例

客户端的操作很简单,创建套接字成功后就可以收发数据了。程序第22行调用socket()函数创建套接字,注意第二个参数是SOCK_DGRAM表示创建无连接的数据报套接字。第30~32行设置了服务端的IP和端口号。第37行使用sendto()函数向服务端发送“time”命令,第44行使用recvfrom()函数接收服务端返回并且打印。第55行发送“quit”命令,通知服务端退出。第62行关闭套接字。

服务器端和客户端程序编译后在不同的控制台界面执行,服务端输出结果如下:

Create socket:Success

Bind socketwaiting request from client…

client request:time

client request:quit

服务端打印了创建套接字成功,绑定套接字成功,之后进入循环等待客户端的数据,最后两行打印出了客户端发送来的命令,最后程序退出。客户端的执行结果如下:

Create socket:Success

Send time request

time from server:Sat Jun 15 09:36:03 2013

send quit command

从结果可以看出,客户端创建套接字后不需要连接就可以直接收发数据,先是发送时间请求,之后得到服务器返回的时间,最后发送退出命令,关闭连接。