Linux平台的Socket中级应用-TCP文件传输
一、实验目的和任务
- 复习ubuntu的IP配置知识。
- 本实验要求掌握TCP通讯流程。
- 了解TCP编程的基本方法,拼包现象及文件传输的实现。
*4. 将程序布署在开发板上,从PC主机向开发板传输文件。
二、实验设备介绍
1.软件需求: win7操作系统,VMware workstation,ubuntu12 [配置交叉编译环境]。
2.硬件需求: PC内存大于1G,硬盘空间大于20G;smart210开发板。
三、注意事项和要求
1.启动虚拟机前应首先使用"虚拟网络编辑器"配置要桥接的网卡。
2.检查网线是否连接正常。
3.TCP通信流程中,send和recv方法数据缓冲区有不对应现象。
4.开发板运行结果请用手机拍照后放入实验报告中。
四、实验内容和步骤
4.1实验室网络配置
B703主机配有两张网卡,本文称其为A网卡和B网卡,每个机位也配有两个网络插口,其中A网卡直接连接到网络插口,平时全机房的所有主机的A网卡连接到交换机,连同教师机一起组成互联互通的局域网,这个局域网的网段为192.168.200.XX,这样教师可通过中控软件进行授课广播。
B网卡上接有网线,而该网线空接摆放在台面,该网线则用来连接开发板,当开发板与PC主机B网卡用网线连通后,则PC与开发板则组成了一个极小的局域网。网络要进行实际通信还需要设置相应的网络IP地址。
4.2 配置开发板与PC直接用网线连接的网络IP地址
首先查看win7主机网卡配置信息,如果IP配置为192.168.200.5这样的IP,这个网卡连接到了交换机,我们不去理会它,保留,则另一个网卡是连接到开发板的。
将另一个网卡IP地址配置成192.168.1.5
查看两个网卡的名称,弄清楚每个网卡的地址信息。很明显,虚拟机此时需要使用192.168.1.5这个网卡与开发板联通。
下面轮到虚拟机上场了,不过此时不能打开虚拟机,要先配虚拟机的网卡。选中VMnet0这个网卡,它专门实现桥接功能,桥接的是那个192.168.1.5的网卡啊。桥接错了ubuntu与开发板是连不通的。
编辑虚拟机的硬件信息,确保是桥接模式。
启动虚拟机后,再启动ubuntu的网络连接,然后配置IP地址。
保存配置信息后看到了这个提示信息。
经过上述操作,ubuntu终于和虚拟机联通啦,这就是虚拟机拥有网络功能了。开发板与PC都网线连接构成一个极小的局域网,则将PC主机与开发板都配置为192.168.1.xx网段即可,此种情况下需配置win7主机的B网卡信息,通过串口配开发板的ip地址。因为开发板开机默认IP配置就是192.168.1.230,无需配置,双机可以连通。
在网络连通的情况下,开发板可以使用多种网络协议实现与ubuntu的文件传输了,例如:tftp,http,ftp,nfs。
4.3 编译PC平台的文件发送端程序
发送文件的程序运行在pc端,在ubuntu12中使用gcc直接编译。该程序执行监听,在运行时要先于开发板的接收程序启动。
//《TCP/IP网络编程》page121 fsend.c 030.c 文件传输发送端
//本程序执行socket监听,文件发送操作
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#define BUF_SIZE 30
void error_handling(char *message);
int main(int argc,char *argv[])
{
int serv_sd,clnt_sd;
FILE * fp;
char buf[BUF_SIZE];
int read_cnt;
struct sockaddr_in serv_adr,clnt_adr;
socklen_t clnt_adr_sz;
if(argc!=2)
{
printf("Usage: %s <port>\n",argv[0]);
exit(1);
}
//读入文件
fp=fopen("file_send.c","rb");
//用于监听的socket资源
serv_sd