哈工大嵌入式系统软件作业-基于TCPIP协议范文的CS通信例程
一、引言
TCP协议是面向“流”的传输层网络协议。相比其他传输层协议具有数据传输可靠性高、使用方便等优点,广泛应用于网络通信中。本文使用Socket接口API实现了TCP协议最基本的客户端、服务器网络通信模型,对网络编程接口有了进一步的认识。
客户端的作用是从命令行参数中获得一个字符串并利用网络接口发送给服务器,然后接收经过服务器处理后的字符串并打印;服务器的作用是接收从客户端传来的字符串,并将其中的每个字符转换为大写之后回送给客户端。
为了模拟不同主机之间的通信,需要分别编写客户端、服务器的代码。客户端需要使用loopback地址(127.0.0.1)与服务器通信从而能够在同一台主机上观察通信效果。本文的客户端、服务器选择使用TCP协议来实现,TCP是一种面向流的高可靠性传输层协议,其基本编程模型如图1所示:
TCPServerocket()bind()liten()accept()TCPClientocket()阻塞等待连接建立连接connetc()read()
write()数据数据write()read()cloe()
cloe()图1TCP编程模型
二、程序编写
本文严格按照图1所示的流程编写了客户端、服务器程序。
服务器的编程要点是:
调用ocket()函数建立套接口描述符,在参数中指定网络层使用IPv4协
议、传输层使用TCP协议。从下文可以看到,该套接口描述符用于监听来自指定端口和IP地址的网络连接请求,并不用于具体的通信过程。建立服务器的ockaddr_in结构,该结构是IPv4的地址结构。客户端需
要知道服务器的网络地址和端口号才能向特定服务器发起连接请求。因此服务器程序所监听的端口号通常是固定不变的。此处在ockaddr_in结构中指定服务器端口号为8000。调用bind()函数将上文中的套接口描述符与该地址结构绑定。调用liten()函数使得上文中的套接口
描述符成为被动接受连接的服务
器程序,指定连接队列长度为20。调用accept()使服务器监听ocket描述符所指定IP地址和端口号。如果
此时客户端发起了连接请求,而且“三次握手”过程顺利完成,accept()会返回一个新建的ocket描述符。应用程序可以使用该描述符完成与服务器间的具体通信任务。使用accept()返回的描述符、调用read()函数读取客户端发来的字符串并
保存到本地缓冲区。read()会阻塞直到客户端发来字符串,返回值为实际传输的字节数。使用toupper()函数转换为大写后发送回客户端。
客户端的编程要点是:
从命令行参数中获取用户输入的字符串并存入本地缓冲区。若输入格式
不符合要求则打印正确的使用方式作为提示。调用ocket()函数建立套接口描述符,后面将使用此描述符与服务器通
信。建立ockaddr_in结构,该结构用于描述服务器的地址结构;此处指定
服务器的IP地址为127.0.0.1;调用connect()函数使用客户端建立的ocket描述符与ockaddr_in指定的服务器通信,以完成“三次握手”过程。调用write()将缓冲区的字符串发送给服务器。
调用read()接收经过服务器处理的字符串,并调用write()将这些字符串
tcpip协议中基于tcp协议的应用程序
显示在标准输出。三、编译与运行(1)运行环境
linu某内核版本:3.11.10-301.fc20.i686+PAEgcc编译器版本:4.8.220221017(RedHat4.8.2-1)(2)编译过程gccerver.c–oerver
gccclient.c–oclient(2)运行结果服务器端:
客户端:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。