基于UDP的文件传输实验报告.doc
文本预览下载声明
实验报告
成 绩
2015年6月 8 日
实验名称: 基于UDP的文件传输
1.实验目的
熟练
2.实验设备和条件
硬件环境:PC机
操作系统: Windows 或者 Linux
语言环境: Visual C++ ,VS,GCC,Java均可
3.实验要求
参考TCP文件传输demo, 基于UDP实现send.mp3文件的传输,并测试接收到的文件与发送的文件是否一致。
请各位同学于第15周星期三或星期四上课时将纸质版(双面打印)上交!
4.实验内容:测试数据与实验结果(可以抓图粘贴)
#include stdafx.h
#include Winsock2.h
#include stdio.h
#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);
显示全部