网络编程文件传输实验报告Word文件下载.doc

上传人:b****9 文档编号:13008391 上传时间:2022-10-02 格式:DOC 页数:9 大小:168.32KB
下载 相关 举报
网络编程文件传输实验报告Word文件下载.doc_第1页
第1页 / 共9页
网络编程文件传输实验报告Word文件下载.doc_第2页
第2页 / 共9页
网络编程文件传输实验报告Word文件下载.doc_第3页
第3页 / 共9页
网络编程文件传输实验报告Word文件下载.doc_第4页
第4页 / 共9页
网络编程文件传输实验报告Word文件下载.doc_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

网络编程文件传输实验报告Word文件下载.doc

《网络编程文件传输实验报告Word文件下载.doc》由会员分享,可在线阅读,更多相关《网络编程文件传输实验报告Word文件下载.doc(9页珍藏版)》请在冰豆网上搜索。

网络编程文件传输实验报告Word文件下载.doc

二、实验原理

本程序是基于TCP/IP协议栈的网络编程,使用C语言,利用操作系统提供的套接字网络编程接口进行编写

TCP协议是其中重要的传输协议,为应用层提供可靠的端到端的流传输服务.其中套接字取值sock_stream即为TCP的流传输服务

Windowssocket包含了人们所熟悉的BerkeleySocket风格的函数库,也包含了一组针对windows的扩展库函数,以使程序员能充分的利用windows驱动消息机制进行编程。

WindowsSockets的规范本意在于提供给应用开发者一套简单的API,并让个网络应用软件开发商遵守该协议。

此外在一个特定的版本windows基础上,Windowssocket也定义了一个二进制借口(ABI),从此来保证WindowssocketAPI应用程序能够在任何符合Windowssocket协议的实现上工作。

三、设计概述

1、创建套接字

服务进程和客户进程在实现通信前必须创建各自的套接字,然后才能用相应的套接字进行发送接收操作,服务进程总是先于客户端进程启动,服务器端进程和客户端进程创建套接字。

Socket()函数实现代码如下:

SOCKETserSocket=socket(AF_INET,SOCK_STREAM,0);

//创建了可识别套接字

2、地址绑定

当调用socket()创建套接字后,服务器必须把套接字与自己的地址显式地建立联系,以便客户端向该IP地址和端口号的服务进程请求服务,这个过程是通过调用函数bind()实现的。

bind()函数原型如下:

intbind(SOCKETs,conststructsockaddrFAR*name,intnamelen);

3、服务器套接字置为监听模式

将服务器设置为监听工作方式后,使用API调用listen():

intlisten(SOCKETs,intbacklog);

第一个参数指定套接字。

第二个参数指定了正在等待连接的最大队列长度。

若无错误发生,则listen()函数返回0。

4、建立连接,进行文件传输

调用gets(path)获得传输文件的路径和存放文件路径,这个过程中还需调用send()函数和recv()函数,共同协调实现文件传送。

四、源代码

服务器端

#include<

WINSOCK2.H>

stdio.h>

#pragmacomment(lib,"

ws2_32.lib"

#defineSIZE1024*8

voidmain()

{

//创建套接字

WORDmyVersionRequest;

WSADATAwsaData;

myVersionRequest=MAKEWORD(1,1);

interr;

err=WSAStartup(myVersionRequest,&

wsaData);

if(!

err)

 

printf("

已打开套接字\n"

);

}

else

//进一步绑定套接字

嵌套字未打开!

"

return;

}

//需要绑定的参数

SOCKADDR_INaddr;

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(serSocket,5);

//其中第二个参数代表能够接收的最多的连接数

//////////////////////////////////////////////////////////////////////////

//开始进行监听

SOCKADDR_INclientsocket;

intlen=sizeof(SOCKADDR);

SOCKETserConn;

charsendBuf[50];

serConn=accept(serSocket,(SOCKADDR*)&

clientsocket,&

len);

//如果这里不是accept而是conection的话。

就会不断的监听

sprintf(sendBuf,"

welcome%stobejing"

inet_ntoa(clientsocket.sin_addr));

//找对对应的IP并且将这行字打印到那里

//发送欢迎信息

send(serConn,sendBuf,strlen(sendBuf)+1,0);

FILE*fp;

lable1:

客户端已打开\n请输入存放文件地址:

\n"

charpath[100]={"

0"

};

inti=0;

while(path[i]!

='

\0'

if(path[i]=='

/'

path[i]='

\\'

;

i++;

gets(path);

if((fp=fopen(path,"

wb"

))==NULL)

文件未打开\n"

gotolable1;

文件已打开开始文件传输......\n"

//发送开始标志

send(serConn,"

开始传送"

strlen("

)+1,0);

//得到文件大小

chardatalength[20];

longintlength=0;

recv(serConn,datalength,21,0);

length=atol(datalength);

得到文件大小:

%d\n"

length);

//开始传送

doublecent=0.0;

charreceiveBuf[SIZE];

longintx=0;

while

(1)

{

x=x+SIZE;

if(x<

length)

cent=(double)x*100.0/(double)length;

已接收:

%4.2f%\n"

cent);

recv(serConn,receiveBuf,SIZE+1,0);

fwrite(receiveBuf,1,SIZE,fp);

}

else

recv(serConn,receiveBuf,length+SIZE-x+1,0);

文件接收完毕\n"

fwrite(receiveBuf,1,length+SIZE-x,fp);

fclose(fp);

break;

closesocket(serConn);

//关闭

WSACleanup();

//释放资源的操作

system("

pause"

客户端

intlength=0;

SOCKETclientSocket;

SOCKADDR_INclientsock_in;

charreceiveBuf[100]={"

charip_addr[16]={"

127.0.0.1"

WORDversionRequired;

versionRequired=MAKEWORD(1,1);

err=WSAStartup(versionRequired,&

//协议库的版本信息

客户端嵌套字已经打开!

客户端的嵌套字打开失败!

//结束

clientSocket=socket(AF_INET,SOCK_STREAM,0);

printf("

请输入主机IP:

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(clientSocket,(SOCKADDR*)&

clientsock_in,sizeof(SOCKADDR));

//开始连接

recv(clientSocket,receiveBuf,101,0);

%s\n"

receiveBuf);

do

请输入文件地址:

gets(path);

while(path[i]!

i=0;

if((fp=fopen(path,"

rb"

i=1;

}while(i);

fseek(fp,0L,SEEK_END);

length=ftell(fp);

待传送文件大小:

文件已经打开等待主机消息......\n"

//得到主机开始传送消息

if(strcmp(receiveBuf,"

)==0)

//传送文件长度

charsendBuf[20];

l

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育 > 育儿理论经验

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1