淮阴工学院
Linux操作系统及嵌入式应用
实验报告
系(院):计算机工程学院
专业:计算机科学与技术(物联网工程)
班 级:物联网1111
姓名:蒋振 学号:116
指导教师:孙成富
学年学期:2014?2015学年 第_1_学期
实验1 Socket全双工通信实验
1实验目的
1)了解网络套接字编程
2)掌握网络通信服务器和客户端的工作过程
3)利用多线程实现全双工通信
4)下载并运行网络应用程序
2实验环境
1)宿主机:Fedora 10
2)嵌入式Linux软硬件系统:TQ2440 (基于S3C2440A)开发板
3实验准备
Linux下的多线程编程
进程是程序执行时的一个实例,即它是程序已经执行到何种程度的数据结构 的汇集。从内核的观点看,进程的目的就是担当分配系统资源(CPU时间、内
存等)的基本单位。
线程是进程的一个执行流,是 CPU调度和分派的基本单位,它是比进程更 小的能独立运行的基本单位。一个进程由几个线程组成(拥有很多相对独立的执 行流的用户程序共享应用程序的大部分数据结构),线程与同属一个进程的其他 的线程共享进程所拥有的全部资源。
本实验使用多线程解决了并行通信的难题。关于多线程的函数主要是使用 pthread.h头文件中定义的多线程操作函数,女口 pthread_create pthread_cancel等。
TCP/IP 概述
3.2.1 TCP/IP的分层模型
OSI协议参考模型,是基于国际标准化组织(ISO)的建议发展起来的,它 分为7个层次:应用层、表示层、会话层、传输层、网络层、数据链路层及物理 层。这个7层的协议模型虽然规定得非常细致和完善,但在实际中却得不到广泛 的应用,其重要的原因之一就在于它过于复杂。但它仍是此后很多协议模型的基 础。与此相区别的TCP/IP协议模型将OSI的7层协议模型简化为4层,从而更 有利于实现和使用。
TCP/IP的协议参考模型和OSI协议参考模型的对应关系如下图1所示:
图1 TCP/IP协议与OSI协议参考模型对比图
3.2.2 TCP的三次握手
TCP是面向连接的,所谓面向连接,就是当计算机双方通信时必需先建立连 接,然后进行数据通信,最后拆除连接三个过程。TCP在建立连接时又分三步走:
第一步(A->B):主机A向主机B发送一个包含 SYN即同步(Synchronize) 标志的TCP报文,SYN同步报文会指明客户端使用的端口以及 TCP连接的初始 序号;
第二步(B->A):主机B在收到客户端的SYN报文后,将返回一个SYN+ACK 的报文,表示主机 B的请求被接受,同时 TCP序号被加一,ACK即确认
(Ack no wledgme nt)。
第三步(A->B):主机A也返回一个确认报文ACK给服务器端,同样TCP 序列号被加一,到此一个TCP连接完成。
3.3套接字(socket)概述
331套接字类型
流式套接字(SOCK_STREAM)
流式套接字提供可靠的、面向连接的通信流;它使用 TCP协议,从而保证 了数据传输的可靠性和顺序性。
数据报套接字(SOCK_DGRAM)
数据报套接字定义了一种无可靠、 面向无连接的服务,数据通过相互独立的 报文进行传输,是无序的,并且不保证是可靠、无差错的。它使用数据报协议
UDP
3)原始套接字(SOCK_RAW)
原始套接字允许对底层协议如IP或ICMP进行直接访问,它功能强大但使 用较为不便,主要用于一些协议的开发。
332套接字编程
使用TCP时Socket编程流程图如图2所示。
服务器端客户端
图2 TCP时Socket编程流程图
使用UDP时Socket编程如图3所示。
图3 TCP时Socket编程流程图
4实验过程
4.1 简单的Socket通信程序设计
在Fedora 10操作系统的/home目录下创建 NetCommunicator目录,并新建
client.c和 server.c源文件,NetCommunicator 目录如图 4 所示。
图 4
图 4 NetCommunicator 截图
分别编写Socket通信的客户端和服务器端源代码。编写完毕,使用gcc编
译上述client.c和server.c源文件生成client和server可执行程序(x86平台),编译
过程如图5所示。使用arm-linux-gcc编译上述client.c和server.c源文件生成
a_client和a_server可执行程序(ARM平台)。编译过程如图6所示.
丈件心编辑CE)查看
丈件心编辑CE)查看少终端丁标签①帮助⑹
'rootOj ones-fedo ra NetCoirmunicato r' ;root^james-fedora NetCommun