基于UDP的文件传输实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验报告
成 绩
2015年6月 8 日 课程名称 《数据库技术》 学生姓名 *** 学 号 ******** 专业班级 电子信息工程 指导教师
实验名称:基于UDP的文件传输
1.实验目的
(1)熟练掌握Socket编程;
(2)分析UDP与TCP的异同。
2.实验设备和条件
硬件环境:PC机
操作系统:Windows 或者Linux
语言环境:Visual C++ ,VS,GCC,Java均可
3.实验要求
参考TCP文件传输demo, 基于UDP实现send.mp3文件的传输,并测试接收到的文件与发送的文件是否一致。
请各位同学于第15周星期三或星期四上课时将纸质版(双面打印)上交!
4.实验内容:测试数据与实验结果(可以抓图粘贴)
(1)发送端代码。
#include"stdafx.h"
#include
#include
#define MAX_LENGTH 1024
int_tmain(int argc, _TCHAR* argv[])
{
WORD wVersionRequested;
WSADATA wsaData;
wVersionRequested = MAKEWORD(2, 2);
if (WSAStartup(wVersionRequested, &wsaData) != 0)//初始化ws2_32.dll动态库
{
printf("WSAStartup() failed!\n");//Winsock初始化错误
exit(-1);
}
if (wsaData.wVersion != wVersionRequested)
{
printf("The version of Winsock is not suited!\n");//Winsock版本不匹配WSACleanup();//结束对ws2_32.dll的调用
exit(-2);
}
//说明ws2_32.dll正确加载
printf("Load ws2_32.dll successfully!\n");
//创建套接字
SOCKET servsock;
printf("Create Socket...\n");
servsock = socket(AF_INET, SOCK_DGRAM, 0);//数据报套接字
int servport = 5555;
int iSockErr = 0;
//定义服务器地址结构
sockaddr_in udpaddr;
int len = sizeof(udpaddr);
memset(&udpaddr, 0, sizeof(udpaddr));
udpaddr.sin_family = AF_INET;
udpaddr.sin_port = htons(servport);
//将一个点分十进制IP地址字符串转换成32位数字表示的IP地址udpaddr.sin_addr.s_addr = inet_addr("172.16.4.94");////INADDR_ANY
//读取mp3文件
FILE *fp = NULL;
errno_t err;
err = fopen_s(&fp, "七里香.mp3", "rb");
if (fp == NULL){
printf("Open File Failed!\n");
getchar();
exit(-5);
}
char buffer[MAX_LENGTH] = "\0";
char *bufptr = buffer;
int i = 0;
while (!feof(fp))
{
int iBytesRead = fread(bufptr, 1, MAX_LENGTH, fp);
int iRet = sendto(servsock, buffer, sizeof(buffer), 0, (struct sockaddr*)&udpaddr, len);
if (iRet != SOCKET_ERROR)
{
iRet = recvfrom(servsock, buffer, sizeof(buffer), 0, (struct sockaddr*)&udpaddr, &len);
}
else
{
printf("send file failed!\n");
break;
}
if (iRet == SOCKET_ERROR)
{
//closesocket(clisock);
printf("send file failed!\n");
break;
}
else if (iRet == 0)
{
printf("send mp3 file successfully!\n");
break;
}
if (iBytesRead == 0)
{
printf("send mp3 file successfully!\n");
break;
}
//printf("%d", &len);
printf("send packet %d lenth: %d\n", i++, iBytesRead);
Sleep(10);
}
sendto(servsock, "", 0, 0, (struct sockaddr*)&udpaddr, len);