网络编程文件传输实验报告_第1页
网络编程文件传输实验报告_第2页
网络编程文件传输实验报告_第3页
网络编程文件传输实验报告_第4页
网络编程文件传输实验报告_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、word 网络编程 实验报告 课 程 名 称: 网络编程 实验工程名称: 网络编程 班 级: 实验室名称: 专 业: 网 络 工 程 任 课 教 师: 黄 梅 根 学 号: 姓 名: 基于TCP的网络文件传输实验报告一、 实验目的1、 熟悉TCP/IP协议的功能和网络操作2、 编写小型的socket应用程序,初步了解windows环境下使用sockets编程,实现点对点文本传输。二、 实验原理本程序是基于TCP/IP协议栈的网络编程,使用C语言,利用操作系统提供的套接字网络编程接口进行编写TCP协议是其中重要的传输协议,为应用层提供可靠的 端到端的流传输效劳.其中套接字取值sock_strea

2、m即为TCP的流传输效劳Windows socket包含了人们所熟悉的Berkeley Socket风格的函数库,也包含了一组针对windows的扩展库函数,以使程序员能充分的利用windows驱动消息机制进行编程。Windows Sockets的标准本意在于提供应应用开发者一套简单的API,并让个网络应用软件开发商遵守该协议。此外在一个特定的版本windows根底上,Windows socket也定义了一个二进制借口(ABI),从此来保证Windows socket API应用程序能够在任何符合Windows socket协议的实现上工作。三、 设计概述1、 创立套接字效劳进程和客户进程在实

3、现通信前必须创立各自的套接字,然后才能用相应的套接字进行发送接收操作,效劳进程总是先于客户端进程启动,效劳器端进程和客户端进程创立套接字。Socket函数实现代码如下:SOCKET serSocket=socket(AF_INET,SOCK_STREAM,0);/创立了可识别套接字2、 地址绑定当调用socket创立套接字后,效劳器必须把套接字与自己的地址显式地建立联系,以便客户端向该IP地址和端口号的效劳进程请求效劳,这个过程是通过调用函数bind实现的。bind()函数原型如下:int bindSOCKET s ,const struct sockaddr FAR*name ,int na

4、melen;3、 效劳器套接字置为监听模式将效劳器设置为监听工作方式后,使用API调用listen(): int listen(SOCKET s, int backlog);第一个参数指定套接字。第二个参数指定了正在等待连接的最大队列长度。假设无错误发生,那么listen函数返回0。 4、 建立连接,进行文件传输调用gets(path)获得传输文件的路径和存放文件路径,这个过程中还需调用send函数和recv函数,共同协调实现文件传送。四、 源代码 效劳器端#include <WINSOCK2.H>#include <stdio.h>#pragma comment(li

5、b,"ws2_32.lib")#define SIZE 1024*8void main()/创立套接字WORD myVersionRequest;WSADATA wsaData;myVersionRequest=MAKEWORD(1,1);int err;err=WSAStartup(myVersionRequest,&wsaData);if (!err)    printf("已翻开套接字n"); else    /进一步绑定套接字    printf(&

6、quot;嵌套字未翻开!");    return;SOCKET serSocket=socket(AF_INET,SOCK_STREAM,0);/创立了可识别套接字/需要绑定的参数SOCKADDR_IN addr;addr.sin_family=AF_INET;addr.sin_addr.S_un.S_addr=htonl(INADDR_ANY);/ip地址addr.sin_port=htons(6000);/绑定端口bind(serSocket,(SOCKADDR*)&addr,sizeof(SOCKADDR);/绑定完成listen(ser

7、Socket,5);/其中第二个参数代表能够接收的最多的连接数/开始进行监听/SOCKADDR_IN clientsocket;int len=sizeof(SOCKADDR);SOCKET serConn;char sendBuf50;serConn=accept(serSocket,(SOCKADDR*)&clientsocket,&len);/如果这里不是accept而是conection的话。就会不断的监听sprintf(sendBuf,"welcome %s to bejing",inet_ntoa(clientsocket.sin_addr);/

8、找对对应的IP并且将这行字打印到那里/发送欢送信息send(serConn,sendBuf,strlen(sendBuf)+1,0);FILE *fp;lable1: printf("客户端已翻开n请输入存放文件地址:n");char path100="0"int i=0;while(pathi!='0')   if(pathi='/')    pathi=''   i+;gets(path);if(fp=fopen(path,"

9、;wb")=NULL)   printf("文件未翻开n");   goto lable1;else   printf("文件已翻开 开始文件传输.n");   /发送开始标志   send(serConn,"开始传送",strlen("开始传送")+1,0);    /得到文件大小   char datalength20;   long int

10、length=0;   recv(serConn,datalength,21,0);   length=atol(datalength);   printf("得到文件大小: %dn",length);   /开始传送   double cent=0.0;   char receiveBufSIZE;   long int x=0;   while (1)      

11、 x=x+SIZE;    if(x<length)         cent=(double)x*100.0/(double)length;     printf("已接收: %4.2fn",cent);     recv(serConn,receiveBuf,SIZE+1,0);     fwrite(receiveBuf,1,SIZE,fp);&

12、#160;       else         recv(serConn,receiveBuf,length+SIZE-x+1,0);     printf("文件接收完毕n");     fwrite(receiveBuf,1,length+SIZE-x,fp);     fclose(fp);   &#

13、160; break;       closesocket(serConn);/关闭WSACleanup();/释放资源的操作system("pause");客户端#include <WINSOCK2.H>#include <stdio.h>#pragma comment(lib,"ws2_32.lib")#define SIZE 1024*8void main()FILE *fp;int err;int length=0;SOCKET clientSocket;SOCKADDR_

14、IN clientsock_in;char receiveBuf100="0"char ip_addr16="127.0.0.1"WORD versionRequired;WSADATA wsaData;versionRequired=MAKEWORD(1,1);err=WSAStartup(versionRequired,&wsaData);/协议库的版本信息if (!err)    printf("客户端嵌套字已经翻开!n");else    printf(&qu

15、ot;客户端的嵌套字翻开失败!n");    return;/结束clientSocket=socket(AF_INET,SOCK_STREAM,0);printf("请输入主机IP:n");scanf("%s",ip_addr);/连接效劳器clientsock_in.sin_addr.S_un.S_addr=inet_addr(ip_addr);clientsock_in.sin_family=AF_INET;clientsock_in.sin_port=htons(6000);connect(clientSo

16、cket,(SOCKADDR*)&clientsock_in,sizeof(SOCKADDR);/开始连接recv(clientSocket,receiveBuf,101,0);printf("%sn",receiveBuf); char path100="0"gets(path);int i=0;do   printf("请输入文件地址:n");    gets(path);   while(pathi!='0')    

17、;   if(pathi='/')     pathi=''    i+;      i=0;   if(fp=fopen(path,"rb")=NULL)       i=1;    printf("文件未翻开n");   while(i); fseek(fp,0L,SEEK

18、_END);    length=ftell(fp);printf("待传送文件大小: %dn",length);printf("文件已经翻开 等待主机消息.n");/得到主机开始传送消息recv(clientSocket,receiveBuf,101,0);printf("%sn",receiveBuf);if(strcmp(receiveBuf,"开始传送")=0)   /传送文件长度   char sendBuf20;  

19、; ltoa(length,sendBuf,10);   send(clientSocket,sendBuf,21,0);   fseek(fp,0L,SEEK_SET);   /传送文件   long int y=0;   double cent;   char transSIZE;   while(!feof(fp)          fread(trans,1,SIZE,fp);    y=y+SIZE;    if(y<length)         cent=(double)y*100.0/(double)length;     printf("已发

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论