网络文件传输实验设计_第1页
网络文件传输实验设计_第2页
网络文件传输实验设计_第3页
网络文件传输实验设计_第4页
网络文件传输实验设计_第5页
免费预览已结束,剩余2页可下载查看

下载本文档

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

文档简介

1、网络文件传输实验流程:Server 端Client 端J创立ServerSocket对象,在某端口提供监听效劳Client端I等待来自Client端的效劳请求T接受Client端的请求,用返回的创立Socket对象,向ServerSocket建立连接的监听端口请求I通过向Socket中读写数据来通过向新的Socket中读写数与Client端通信据来与Server端通信IJ关闭Socket,结束与 Server端的通信关闭Socket,结束与当前Client的通信,等待其他请求1 I V关闭ServerSocket对象,结束监听效劳实验目的1、 熟悉TCP/IP协议的功能和网络操作2、 编写小型

2、的socket应用程序,初步了解 windows环境下使用sockets 编程,实现点对点文本传输.实验原理本程序是基于TCP/IP协议栈的网络编程,使用C语言,利用操作系统提 供的套接字网络编程接口进行编写TCP协议是其中重要的传输协议,为应用层提供可靠的端到端的流传输效劳.其中套接字取值sock_stream即为TCP的流传输效劳三、设计概述1、 创立套接字效劳进程和客户进程在实现通信前必须创立各自的套接字,然后才能用相应的套接字进行发送接收操作,效劳进程总是先于客户端进程启动,效劳器端进程和客户端进程创立套接字.Socket ()函数实现代码如下: SOCKET serSocket=so

3、cket(AF_INET,SOCK_STREAM,0);/创立了可识别 套接字2、 地址绑定当调用socket ()创立套接字后,效劳器必须把套接字与自己的地址显式 地建立联系,以便客户端向该IP地址和端口号的效劳进程请求效劳,这 个过程是通过调用函数bind ()实现的.bind()函数原型如下: int bind (SOCKET s ,const struct sockaddr FAR*name ,int namelen ;3、 效劳器套接字置为监听模式将效劳器设置为监听工作方式后,使用API调用listen():int listen(SOCKET s, int backlog);第一个参

4、数指定套接字.第二个参数指定了正在等待连接的最大队列长度.假设无错误发生,那么listen ()函数返回004、 建立连接,进行文件传输调用gets(path玳得传输文件的路径和存放文件路径,这个过程中还需调用send ()函数和recv ()函数,共同协调实现文件传送.四、源代码效劳器端#include <WINSOCK2.H>#include <stdio.h>#pragma comment(lib,"ws2_32.lib")#define SIZE 1024*8 void main() /创立套接字WORD myVersionRequest;W

5、SADATA wsaData;myVersionRequest=MAKEWORD(1,1);int err;err=WSAStartup(myVersionRequest,&wsaData); if (!err)printf"已翻开套接字n") else(/进一步绑定套接字printf(" 嵌套字未翻开!");return;)SOCKE_SerSocketusockeHAF_INETSOCK_STREAMQ),创立了可识 别套接字/需要绑定的参数SOCKADDR_IN addr;addr.sin_family=AF_INET;addr.sin_a

6、ddr.S_un.S_addr=htonl(INADDR_ANY);/ip 地址addr.sin_port=htons(6000);/绑定端口bind(serSocket,(SOCKADDR*)&addr,sizeof(SOCKADDR);/ 绑定完 成listen(serSocket,5);/其中第二个参数代表能够接收的最多的连接数/ /开始进行监听/ /SOCKADDR_IN clientsocket;int len=sizeof(SOCKADDR);SOCKET serConn;char sendBuf50;serConn=accept(serSocket,(SOCKADDR*)

7、&clientsocket,&len);/ 如果这里不是accept而是conection的话.就会不断的监听 sprintf(sendBuf,"welcome%stobejing",inet_ntoa(clientsocket.sin_addr);/找对对应的 IP 并且将这行字升印到那里一/发送欢送信息send(serConn,sendBuf,strlen(sendBuf)+1,0);FILE *fp;lable1: printf("客户端已翻开n请输入存放文件地址:n");char path100="0"int

8、i=0;while(pathi!='0')if(pathi='/') pathi=''i+;)gets(path);if(fp=fopen(path,"wb")=NULL)(printf(" 文件未翻开n");goto lable1;)else(printf(" 文件已翻开 开始文件传输n");/发送开始标志send(serConn,"开始传送",strlen("开始传送")+1,0);/得到文件大小char datalength20;long i

9、nt 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)(x=x+SIZE;if(x<length)(cent=(double)x*100.0/(double)length;printf(" 已接收:4.2f %n",cent);recv(serConn,receiveBuf,SIZE+1,0);

10、 fwrite(receiveBuf,1,SIZE,fp);)else(recv(serConn,receiveBuf,length+SIZE-x+1,0);printf("文件接收完毕n");fwrite(receiveBuf,1,length+SIZE-x,fp);fclose(fp); break;)closesocket(serConn);/ 关闭WSACleanup();/释放资源的操作 system("pause");)客户端#include <WINSOCK2.H>#include <stdio.h>#pragma

11、comment(lib,"ws2_32.lib")#define SIZE 1024*8void main() FILE *fp; int err;int length=0;SOCKET clientSocket;SOCKADDR_IN clientsock_in;char receiveBuf100="0"char ip_addr16=H127.0.0.1H;WORD versionRequired;WSADATA wsaData;versionRequired=MAKEWORD(1,1);err=WSAStartup(versionRequired,

12、&wsaData);/协议库的版本信if (!err) printf("客户端嵌套字已经翻开!n"); elseprintf("客户端的嵌套字翻开失败!n");return;/ 结束clientSocket=socket(AF_INET,SOCK_STREAM,0);printf("请输入主机 IP : n");scanf("%s,ip_addr);/连接效劳Mclientsock_in.sin_addr.S_un.S_addr=inet_addr(ip_addr); clientsock_in.sin_family

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

14、)if(pathi='/') pathi=''i+;i=0;if(fp=fopen(path,"rb")=NULL)i=1;printf("文件未翻开n");while(i);fseek(fp,0L,SEEK_END);length=ftell(fp);printf("待传送文件大小:dn",length);printf(" 文件已经翻开 等待主机消息.n");/得到主机开始传送消息recv(clientSocket,receiveBuf,101,0);printf("%s

15、n",receiveBuf);if(strcmp(receiveBuf,"开始传送")=0)/传送文件长度char sendBuf20;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("已发送:%4.2f %n",cent);send(clientSocket,trans,SIZE+1,0);else(send(clientSocket,trans,length+SIZE-y+1,0);closesocket(clientSocket);WSACleanup();fclose(fp);printf("文件发送完毕n");system("pause&q

温馨提示

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

评论

0/150

提交评论