实验要求:
安装Tornado ULIP仿真网卡驱动,启动2个vxSim目标系统,其中一个vxSim为TCP Client,另一个为TCP Server。TCP Server与Client通过socket API进行数据的收发。另外要求在VxWorks中集成target shell组件及ping相关组件,能够在两个vxsim上互相ping通,验证网络环境。
最基本要求是能够完成数据收发。具体通信内容及方式不限,可以自由发挥,简单的可以是消息收发,复杂的可以是协议通信。需要将target shell中ping通的截图放在实验报告中。
实验目的:
熟悉Tornado ULIP仿真网卡驱动的安装和使用;熟悉VxWorks bootable工程的创建和VxWorks映像的生成;熟悉VxWorks网络编程。
一、实验原理
TCP的双机通信是基于socket套接字建立连接的。网络的Socket数据传输是一种特殊的I/O,Socket也是一种文件描述符。Socket也具有一个类似于打开文件的函数调用Socket(),该函数返回一个整型的Socket描述符,随后的连接建立、数据传输等操作都是通过该Socket实现的。常用的Socket类型有两种:流式Socket(SOCK_STREAM)和数据报式Socket(SOCK_DGRAM)。流式是一种面向连接的Socket,针对于面向连接的TCP服务应用;数据报式Socket是一种无连接的Socket,对应于无连接的UDP服务应用。在本次实验中要用到的就是流式Socket。两个网络程序之间的一个网络连接包括五种信息:通信协议、本地协议地址、本地主机端口、远端主机地址和远端协议端口。Socket数据结构中包含这五种信息。
二、设计说明
本实验是一个需要使用到客户端/服务器通信模式的问题。主要的设计流程
为,底层的网卡驱动安装好后,调用标准的Socket套接字通过TCP/IP 协议进行通信。服务器端等待服务。一旦有客户端的通信请求,如果通信协议符合,则建立连接,进行通信。服务器一方使用TCP套接字与客户端通信。在服务的主循环中,任务tcpServerWorkTask首先读取来自客户端的请求,并想控制台输出客户信息,如果需要,将向客户端发送应答信息。客户端通过控制台提示输入,建立请求报文,然后发送到服务器,如果需要应答,则等待来自服务器端的回应。
具体的通信流程如下图:
实验具体步骤:
1.安装ULIP适配器
在控制面板里选择“添加删除硬件”->“添加/排除设备故障”->“添加新设
备”-> “从列表选择硬件”->“网卡”->”从磁盘安装”,接着选择tornado\\host\\x86-win32\\bin\下的netULIP.inf,然后确定并关闭窗口;装好之后,在ipconfig /all的输出中可看到多了一个网卡windriver ulip;
2.
3.配置ULIP适配器
在IP栏输入192.168.255.254(可以是x.x.x.254),子网掩码设为
255.255.255.0,点高级,在wins页选择禁用TCP/IP上的NETBIOS,然后确定
关闭,然后可用ping 192.168.255.254验证适配器是否工作正常;
4.启动Routing and Remote Access这个服务,并将该服务设为自动启动;
5. 修改tornado\arget\\config\\simpc\\config.h中的 #if TRUE 为#if FALSE。
6.新建一个Bootable的工程,BSP选为simpc,然后编译,如果你想检验一下网络功能,可在workspace的vxworks页的network components->networking protocols->network applications->ping client点右键include ping client,重新build;
7.Launch simulator,选择custom-built simulator,浏览选中刚才编译出来的vxworks.exe,processor no.设为0(full simulator可支持16个simulator,并且能够互相通信,它们的processor no.分别是0-15),确定;
8.Launch target server,关闭Launch simulator后会提示你launch target server,点Details,选中Full simulator,修改上面的命令行参数,将C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/tsfs改为系统中存在的目录,点OK启动target server,然后你可以双击窗口右下方的target server图标查看启动情况;也可以通过Tornado菜单(Tools->target server->configure)进行target server的配置并启动它;
9.如果Target server启动成功,你点launch shell启动一个shell,输入 “ping "host的ip",3”,回车,ping通了就说明网络仿真已经成功;
10.将所需文件添加到工程,然后build工程。为每一台目标机配置一个target server,然后启动它们。为了实现双向通信,必须将build生成的tcpServer.o和tcpClient.o都分别下载到两台目标机。在两台目标机的命令行下将tcpServer.o和tcpClient.o load到内存,命令如下:-> ld < tcpServer.o和-> ld < tcpClient.o。
11. 在每一台目标机下启动服务器端的任务,命令如下:-> sp tcpServer 查看当前的任务,便可以发现每一台目标机上都启动了tcpServer这个任务,表示都处于监听状态。可以双向通信了,两台目标机ip分别为192.168.225.1和192.168.225.2。
三、运行结果图片
(1) VxSim0 为TCP Client,先执行ping函数,ping 服务器的ip地址,成功ping通,接着运行了函数client(“192.168.255.2”, “my name is Dongwenjing, my number is 2011111785”),192.168.255.2为server的IP地址。Client顺利与Server连接后输入要发送的字符串,确定后成功发送,并收到了server的回复。
(2) VxSim1 为TCP Server,同样ping客户端的ip地址,成功。执行server函数,可以看到client发来的消息。
四、程序调试纪录
在程序调试的过程中花费时间较多的是在前期准备上,主要是ULIP仿真网卡的安装和配置上,可能是由于自己在安装和配置过程中的马虎和步骤遗漏,使得在命令行中ping并没有ping通,后来查找原因又实验了一次,总算在命令行中ping通。后来在同时启动两个VxSim的过程中也遇到了问题,经过向师兄们请教,解决了这个问题。