第一范文网 - 专业文章范例文档资料分享平台

网络编程文件传输实验报告

来源:用户分享 时间:2020-06-30 本文由峥嵘岁月 分享 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

《网络编程》 实验报告

课 程 名 称: 网络编程 实验项目名称: 网络编程 班 级: 实验室名称: 专 业: 网 络 工 程 任 课 教 师: 黄 梅 根 学 号: 姓 名: 基于TCP的网络文件传输实验报告

一、 实验目的

1、 熟悉TCP/IP协议的功能和网络操作

2、 编写小型的socket应用程序,初步了解windows环境下使用sockets

编程,实现点对点文本传输。

二、 实验原理

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

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

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

Windows Sockets的规范本意在于提供给应用开发者一套简单的API,并让个网络应用软件开发商遵守该协议。此外在一个特定的版本windows基础上,Windows socket也定义了一个二进制借口(ABI),从此来保证Windows socket API应用程序能够在任何符合Windows socket协议的实现上工作。

三、 设计概述

1、 创建套接字

服务进程和客户进程在实现通信前必须创建各自的套接字,然后才能用相应的套接字进行发送接收操作,服务进程总是先于客户端进程启动,服务器端进程和客户端进程创建套接字。Socket()函数实现代码如下: SOCKET serSocket=socket(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);

第一个参数指定套接字。第二个参数指定了正在等待连接的最大队列长度。若无错误发生,则listen()函数返回0。

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

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

四、 源代码

服务器端

#include #include

#pragma comment(lib,\#define SIZE 1024*8 void main() {

//创建套接字

WORD myVersionRequest; WSADATA wsaData;

myVersionRequest=MAKEWORD(1,1); int err;

err=WSAStartup(myVersionRequest,&wsaData); if (!err) {

printf(\已打开套接字\\n\

} else {

//进一步绑定套接字

printf(\嵌套字未打开!\ 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(serSocket,5);//其中第二个参数代表能够接收的最多的连接数

////////////////////////////////////////////////////////////////////////// //开始进行监听

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

SOCKADDR_IN clientsocket; int len=sizeof(SOCKADDR); SOCKET serConn; char sendBuf[50];

serConn=accept(serSocket,(SOCKADDR*)&clientsocket,&len);//如果这里不是accept而是conection的话。。就会不断的监听 sprintf(sendBuf,\%s to bejing\找对对应的IP并且将这行字打印到那里 //发送欢迎信息

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

FILE *fp;

lable1: printf(\客户端已打开\\n请输入存放文件地址:\\n\char path[100]={\int i=0;

while(path[i]!='\\0') {

if(path[i]=='/') path[i]='\\\\'; i++; }

gets(path);

if((fp=fopen(path,\{

printf(\文件未打开\\n\ goto lable1; } else {

printf(\文件已打开 开始文件传输......\\n\

//发送开始标志

send(serConn,\开始传送\开始传送\ //得到文件大小

char datalength[20]; long int length=0;

recv(serConn,datalength,21,0); length=atol(datalength);

printf(\得到文件大小: %d\\n\ //开始传送

double cent=0.0;

char receiveBuf[SIZE]; long int x=0; while (1) {

x=x+SIZE; if(x

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

客户端

#include #include

#pragma comment(lib,\

搜索“diyifanwen.net”或“第一范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,第一范文网,提供最新教学研究网络编程文件传输实验报告 全文阅读和word下载服务。

网络编程文件传输实验报告 .doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/wenku/1108082.html(转载请注明文章来源)
热门推荐
Copyright © 2018-2022 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top