(完整)实验一-文件传输协议设计要点

实验一:文件传输协议的设计与实现

目录

1.实验设计目的和要求

2.背景知识

3.课程设计分析

4.程序清单

5.运行结果

6.总结

1.课程设计目的和要求

文件传输是各种计算机的网络的基本功能,文件传送协议是一种最基本的应用层协议。它是按照客户或服务器模式进行的工作,提供交式的访问。是INTERNRT使用最广泛的协议之一。以及深入了解计算机网络是建立在TCP/IP网络体系结构上。

用 socket 编程接口编写俩个程序,分别为客户程序和服务器程序

1.掌握TCP/IP 网络应用程序基本的设计方法;

2.用socket 编程接口编写两个程序,分别为客户程序(client.c)和服务器程序(server.c);

3.撰写课程设计说明书。装订后的课程设计说明书不少于10面(含封面、任务书、目录、正文、参考文献、成绩评定表、封底)。

2.背景知识

第一个FTP的RFC由A.K.Bhushan 在1971年提出,同时由MIT 与Harvard实验实现,RFC 172提供了主机间文件传输的一个用户级协议。长期发展过程由于底层协议从NCP改变为TCP,RFC765定义了采用TCP的FCP.

FTP协议在今天已经发展成熟,应用也越来越广很多开发的比较成熟的FTP 客户端软件已经得到了广泛的应用.

3.课程设计分析

Server端Client端

创建ServerSocket对象,在某端口提供监听服务Client端

等待来自Client端的服务请求

接受Client端的请求,用返回的创建Socket对象,向Server

Socket建立连接的监听端口请求

通过向Socket中读写数据来通过向新的Socket中读写数

与Client端通信据来与Server端通信

关闭Socket,结束与Server端的通信关闭

Client的通信,等待其他请求

关闭ServerSocket对象,结束监听服务

4.程序清单:

1.服务器源代码:

#include

#include

#include

using namespace std;

#pragma comment(lib, "wsock32.lib")

#define PORT 4523

char buf_send[1024];

char buf_rec[1024];

SOCKET sockSrv;

//socket初始化

DWORD CreateSocket()

{

WSADATA WSAData;//WSADATA结构被用来保存函数WSAStartup返回的Windows Sockets初始化信息if(WSAStartup(MAKEWORD(2,2),&WSAData)!=0)//WSAStartup完成winsock的初始化

{printf("socket initialize failed!\n");

return (-1);

}

sockSrv=socket(AF_INET,SOCK_STREAM,0);//定义为面向连接的,返回值送给sockSrv

if(sockSrv==SOCKET_ERROR)

{

printf("socket create failed ! \n");

WSACleanup();//中止Windows Sockets DLL的使用

return(-1);

}

SOCKADDR_IN addrSrv;//TCP/IP使用SOCKADDR_IN 定义地址

addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);//计算机IP地址

addrSrv.sin_port=htons(PORT);//协议端口号

addrSrv.sin_family=AF_INET;//地址所属协议簇

//绑定端口

if(bind(sockSrv,(struct sockaddr FAR *)&addrSrv,sizeof(addrSrv))==SOCKET_ERROR)

{

printf("Bind Error");

return(-1);

}

return (1);

}

int SendFileRecord(SOCKET datatcps,WIN32_FIND_DATA *pfd)//用于回复给客户端

{

char filerecord[MAX_PATH+32];

FILETIME ft;

FileTimeToLocalFileTime(&pfd->ftLastWriteTime,&ft);//将一个FILETIME结构转换成本地时间SYSTEMTIME lastwtime;//系统时间

FileTimeToSystemTime(&ft,&lastwtime);//根据一个FILETIME结构的内容,装载一个SYSTEMTIME 结构

char *dir=pfd->dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY?"

":" ";

sprintf(filerecord,"%04d-%02d-%02d %02d:%02d %5s %10d %-20s\n",

lastwtime.wYear,

lastwtime.wMonth,

lastwtime.wDay,

lastwtime.wHour,

lastwtime.wMinute,

dir,

pfd->nFileSizeLow,

pfd->cFileName);

if(send(datatcps,filerecord,strlen(filerecord),0)==SOCKET_ERROR)//发送回复失败

{

printf("Error occurs when sending file list!\n");

return 0;

}

return 1;

}

//发送主机文件目录

int SendFileList(SOCKET datatcps)

{

HANDLE hff;

WIN32_FIND_DATA fd; //获取和更改文件属性

hff=FindFirstFile("*",&fd);//搜索文件

if(hff==INVALID_HANDLE_VALUE)//搜索无效返回值

{

const char *errstr="can't list files!\n";

cout<<"list file error!"<

if(send(datatcps,errstr,strlen(errstr),0)==SOCKET_ERROR)

{

cout<<"error occurs when sending file list!"<

}

closesocket(datatcps);

return 0;

}

BOOL fMoreFiles=TRUE;//BOOL型,返回值为大于0的整数时为TRUE,返回值为0时候,为FALSE,返回值为-1时为ERROR。

while(fMoreFiles)

{

//发送此项文件信息

if(!SendFileRecord(datatcps,&fd))//发送失败

{

closesocket(datatcps);

return 0;

}

//搜索下一个文件

fMoreFiles=FindNextFile(hff,&fd);

}

closesocket(datatcps);

return 1;

}

//发送数据

int SendFile(SOCKET datatcps,FILE* file)//发送文件

{

printf("sending file data..");

for(;;)

//从文件中循环读取数据并发送客户端

{

int r=fread(buf_send,1,1024,file);

if(send(datatcps,buf_send,r,0)==SOCKET_ERROR)

{

printf("lost the connection to client!\n");

closesocket(datatcps);

return 0;

}

if(r<1024)//文件传送结束

break;

}

closesocket(datatcps);

printf("done\n");

return 1;

}

DWORD ProcessCmd()

{

if(listen(sockSrv,5)<0)//监听信号

{

cout<<"Listen error!"<

return(-1);

}

cout<<"Listening for the request……"<

SOCKADDR_IN addrclient;//定义用于返回客户机端地址的结构

int len=(sizeof(SOCKADDR_IN));

while(1)

{

SOCKET sockconn=accept(sockSrv,(SOCKADDR*)&addrclient,&len);//接受请求,产生新的套接字

if(sockconn==INVALID_SOCKET)

continue;

else cout<<"connecting from client"<

while(true)

{

char filename[20];

memset(buf_rec,0,1024);

memset(buf_send,0,1024);

if(recv(sockconn,buf_rec,1024,0)<=0)

{

break;

}

cout<

if(strncmp(buf_rec,"dir",3)!=0&&strncmp(buf_rec,"get",3)!=0&&strncmp(buf_rec,"put",3)!= 0)

continue;//有一个请求正确执行下面语句

if(strncmp(buf_rec,"dir",3)==0)

{

strcpy(buf_send,"dir-ing\n");

send(sockconn,buf_send,1024,0);

SendFileList(sockconn);//发送当前所有文件名

}//dir

if (strncmp(buf_rec,"get",3)==0)

{

strcpy(filename,buf_rec+4);

cout<

FILE *file;

//处理下载文件请求

file=fopen(filename,"rb");//打开下载的文件

if(file)

{

sprintf(buf_send,"get file %s\n",filename);

if(!send(sockconn,buf_send,1024,0))

{fclose(file);

return 0;}

else

{//创建额外数据连接传送数据

if(!SendFile(sockconn,file))

return 0;

fclose(file);}

}//file

else//打开文件失败

{

strcpy(buf_send,"can't open file!\n");

if(send(sockconn,buf_send,1024,0))

return 0;

}

}//get 处理客户端的下载请求

if(strncmp(buf_rec,"put",3)==0)

{

FILE *fd;

int count;

strcpy(filename,buf_rec+4);

fd=fopen(filename,"wb");

if(fd==NULL)

{

printf("open file %s for weite failed!\n",filename);

continue;

}

sprintf(buf_send,"put file %s",filename);

if(!send(sockconn,buf_send,1024,0))

{ fclose(fd);

return 0;

}

while((count=recv(sockconn,buf_rec,1024,0))>0)

fwrite(buf_rec,sizeof(char),count,fd);

fclose(fd);

continue;

}//put 处理客户端的上传请求

}

}

}

int main()

{

CreateSocket();

ProcessCmd();

return(1);

}

2. 客户端程序源代码:

#include

#include

#include

using namespace std;//使用名称空间std

#pragma comment(lib, "wsock32.lib")//将WinLib.lib库加入到工程中进行编译

#define PORT 4523//定义端口号为4523

char send_str[1024];

char rec_str[1024];

char IP[20];

char filename[20];

SOCKET sockClient;

SOCKADDR_IN addrServer;//定义表示地址的结构体addrServer,用来表示本地地址

//创建套接字

DWORD CreateSock()

{

//本地信息

addrServer.sin_family=AF_INET;//地址所属协议簇

//AF表示ADDRESS FAMILY 地址族

// htons的功能:将一个无符号短整型数值转换为网络字节序

addrServer.sin_port=htons(PORT);//协议端口号

WSADATA WSAData;//WSADATA结构被用来保存函数WSAStartup返回的Windows Sockets初始化信息WORD wVersionRequsdted;

int err;

wVersionRequsdted=MAKEWORD(2,2);

err=WSAStartup(wVersionRequsdted,&WSAData);

if(err!=0){

printf("sock init fail!\n");

return(-1);

}

cout<<"please input the IP of host:";

scanf("%s",&IP);

addrServer.sin_addr.s_addr=inet_addr(IP);//计算机IP地址

return(1);

}

DWORD ConnectServer() //连接服务器

{

sockClient=socket(AF_INET,SOCK_STREAM,0);//创建套接字,SOCK_STREAM为面向连接型

if(sockClient==SOCKET_ERROR)

{

printf("sock create fail! \n");

WSACleanup();//中止Windows Sockets DLL的使用.

return(-1);

}

if(connect(sockClient,(struct sockaddr *)&addrServer,sizeof(addrServer))==SOCKET_ERROR)//如果请求建立连接错误

{

printf("Connect fail \n");

memset(IP,0,20);

return(-1);

}

return(1);

}

void help()

{

cout<<"help List:"<

cout<<"dir………………………………directory list "<

cout<<"get………………………………download files"<

cout<<"put………………………………upload files "<

cout<<"quit………………………………exit !"<

}

//list读取服务器列表

void list(SOCKET sock)

{

int nRead;

while(true)

{

nRead=recv(sock,rec_str,1024,0);//从一个套接口接收数据

if(nRead==SOCKET_ERROR)

{

cout<<"read response error!"<

exit(1);

}

if(nRead==0)//数据读取结束

break;

//显示数据

rec_str[nRead]='\0';

printf("%s",rec_str);

}

}

int SendFile(SOCKET datatcps,FILE* file)//SOCKET datatcps定义变量数据连接套接字

{

cout<<"sending file data.."<

for(;;)

{

int r=fread(send_str,1,1024,file);//从一个流中读数据

if(send(datatcps,send_str,r,0)==SOCKET_ERROR)

{

printf("lost the connection to client!\n");

closesocket(datatcps);

return 0;

}

if(r<1024)//文件传送结束

break;

}

closesocket(datatcps);//关闭接口

printf("done\n");

return(1);

}

int Cprocess()

{

int count;

char order[10];

char param[20];

char command[30];

FILE *fd;

FILE *fd2;

command[0]='\0';

CreateSock();

ConnectServer();

cout<<"please input order :"<

memset(order,0,10);//初始化为0

memset(param,0,20);//初始化为0

memset(command,0,30);//初始化为0

memset(rec_str,0,1024);//初始化为0

memset(send_str,0,1024);//初始化为0

cin>>order;

strcat(command,order);

if(strncmp(order,"get",3)==0||strncmp(order,"put",3)==0)//输入请求,有一个输入要求正确,输入目标文件名

{

cin>>param;

strcat(command," ");

strcat(command,param);

}

cout<

strcpy(send_str,command);

if(send(sockClient,send_str,sizeof(send_str),0)<0)

{

cout<<"send data error!"<

closesocket(sockClient);

WSACleanup();

return 0;

}

recv(sockClient,rec_str,1024,0);//接受链接数据,放入rec_str

cout<

if(strncmp(command,"quit",4)==0)

{

closesocket(sockClient);

WSACleanup();

return 0;

}//quit

if(strncmp(rec_str,"dir",3)==0)

{

list(sockClient);

}//dir

if(strncmp(rec_str,"get",3)==0)

{

fd=fopen(param,"wb");//使用二进制方式创建并打开名为param的文件

if(fd==NULL) //打开失败

{

printf("open file %s for weite failed!\n",param);

return 0;

}

while((count=recv(sockClient,rec_str,1024,0))>0)//接收文件,放入rec_str

{

fwrite(rec_str,sizeof(char),count,fd);}

fclose(fd);

}//get

if(strncmp(rec_str,"put",3)==0)

{

strcpy(filename,rec_str+9);//复制需发送的文件名称,赋给filename

fd2=fopen(filename,"rb");

if(fd2)//假如读文件成功

{

if(!SendFile(sockClient,fd2))//假如发送失败

{

printf("send failed!");

return 0;

}

fclose(fd2);

}

else//打开文件失败

{

strcpy(send_str,"can't open file!\n");

if(send(sockClient,send_str,1024,0))

return 0;

}

}//put

closesocket(sockClient);

WSACleanup();

return Cprocess();

}

int main()

{

help();

Cprocess();

return 0;

}

5.程序运行结果

一.正确功能实现

1.运行客户端,输入服务器正确IP地址,连接成功后,输入dir查看服务器

所在文件夹中的文件

2.用put命令发送文件p.txt,发送完毕,查看服务器所在文件夹,发现p.txt

存在

二.运行错误测试

1.运行客户端,输入错误的IP地址。输入请求后,显示框直接关闭

文件传输协议的(C语言)实现

课程设计:FTP的设计与实现 一、目的 Internet提供了很多类型的网络服务,这些服务实际上都是应用层的服务。FTP服务是基于TCP协议的网络服务。 文件传送是各种计算机网络都实现的基本功能,文件传送协议是一种最基本的应用层协议。通过完成一个文件传送协议FTP的实现,学会利用已有网络环境设计并实现简单应用层协议,掌握TCP/IP网络应用程序基本的设计方法和实现技巧。 二、内容和要求 每两人一组,分别实现FTP协议客户端程序和服务器程序。 客户端程序具有文件列表、下载文件、上传文件等常用功能。服务器程序支持改变工作目录、文件列表、下载文件等常用的服务。 因为FTP协议比较复杂,为了简单起见,客户端只实现FTP客户端协议的一个子集,总的来说有以下几个功能: ●连接到指定的FTP服务器; ●断开和主机的连接; ●进入子目录; ●退出子目录; ●列出服务器当前目录下的所有文件 ●从服务器下载指定的文件到本地(可以同时指定多个文件连续下载) ●从本地上传指定的文件到服务器 实现以上几个功能时会涉及到下面的几个FTP命令: ●USER username ●PASS password ●CWD directory-name ●PORT host-port ●TYPE A or I ●RETR filename

●STOR filename ●LIST directory 用户界面应该能够为程序输入下面的信息: ●服务器主机名 ●用户名、口令 ●数据的传送类型 ●要进入的服务器目录 ●要下载的远程文件名 ●要上载的本地文件名和远程文件名 同时,界面也为用户输出以下的信息: ●FTP服务器上的文件和目录列表 ●从服务器返回的应答 使用Socket进行Client/Server程序设计的一般连接过程是这样的:Server端Listen(监听)某个端口是否有连接请求,Client端向Server端发出Connect(连接)请求,Server端向Client端发回Accept(接受)消息。一个连接就建立起来了。Server端和Client端都可以通过Send,Write等方法与对方通信。 对于一个功能齐全的Socket,都要包含以下基本结构,其工作过程包含以下四个基本的步骤: (1)创建Socket; (2)打开连接到Socket的输入/出流; (3)按照一定的协议对Socket进行读/写操作; (4)关闭Socket. 第三步是程序员用来调用Socket和实现程序功能的关键步骤,其他三步在各种程序中基本相同。 /****************client.c****************/ #include #include #include #pragma comment(lib,"ws2_32.lib") #define DEFAULT_PORT 2302 #define DEFAULT_BUFFER 2048 #define DEFAULT_MESSAGE "This is a test of the emergency \ broadcasting system" char szServerip[128], // Server to connect to szMessage[1024]; // Message to send to sever int iPort = DEFAULT_PORT; // Port on server to connect to //DWORD dwCount = DEFAULT_COUNT; // Number of times to send message BOOL bSendOnly = FALSE; // Send data only; don't receive int dirfun();

自动化控制系统设计实例教学大纲-2017

《自动化控制系统设计实例》课程教学大纲 课程代码:060032005 课程英文名称:Automation Control System Design Examples 课程总学时:16学时讲课:16学时实验:0学时上机:0学时 适用专业:自动化 大纲编写(修订)时间:2017.11 一、大纲使用说明 (一)课程的地位及教学目标 自动化控制系统设计实例是自动化专业的专业基础选修课。通过对该课程的学习,使学生建立起“系统”概念,了解自动化系统主要的控制方法、控制技术,为后续专业课学习奠定基础。 (二)知识、能力及技能方面的基本要求 通过实例教学,针对不同的控制对象,全方位、多视角介绍采用单片机、自动化仪表、工控机、PLC组建不同工业流程的设计实例和实施过程;要求学生了解自动化控制系统的设计原则、设计步骤,建立起“控制”与“系统”的概念,了解自动化控制系统的主流技术和前沿技术。 (三)实施说明 在讲授具体内容时,从一个具体的被控对象分析入手到合理的控制要求的形成,从控制装置、元器件部件选型到控制方案的产生,从硬件结构到电路细节,从软件框图到控制算法以及实施过程一一进行分析讲解;培养学生思考问题、分析问题和解决问题的能力。 (四)对先修课的要求 本课程的先修课是《自动控制原理》和《C语言程序设计》。 (五)对习题课、实验环节的要求 无。 (六)课程考核方式 1.考核方式:考查 2.考核目标:考核学生对自动化控制系统的了解程度;考核学生自动化产品研发思路和独立思考能力。 3.成绩构成:本课程的学生成绩采用二级制(通过、不通过)。成绩由学术报告和平时成绩相结合的方法确定。其中:平时成绩由考勤及课堂表现组成,占总的40% ;学术报告成绩占总的60%。 (七)主要参考书目: 1. 《自动化系统工程设计与实施》,林敏等编,电子工业出版社,2008。 2. 《过程控制系统》,俞金寿孙自强编著,机械工业出版社,2009。 3. 《PLC编程及应用》(第4版),廖常初编著,机械工业出版社,2015。 二、中文摘要 本课程是自动化专业学生的一门实践性很强的专业基础选修课程。课程通过对精选实例的自动化控制系统的设计、选型、研制、调试和实施等讲授,使学生建立“控制”与“系统”的概念,了解自动化系统的主流技术和发展趋势。本课程将全方位、多视角地介绍单片机、自动化仪表、工控机、PLC等组建不同工业流程的设计实例和实施过程,本课程将为后续自动化专业课程的学习奠定基础。

程序设计实验报告

学生实验报告 院系:测绘学院 专业班级:测绘13级3班 学号:2013305517 学生姓名:王泽 指导教师:郭辉老师 2016年05月20日

安徽理工大学实验报告 实验课程名称:数据结构与软件开发上机实验 开课院系及实验室:测绘学院红楼二楼机房 实验1 编程基本知识练习 实验目的: 通过该实验课内容的练习,学生应掌握VB 编程的基本语法、变量的定义、数组(动态数组)的定义、VB 语言中子过程与函数的定义以及文本文件的读写等知识。 实验内容: 1)变量的定义动态数组的定义与应用; 2)矩阵的加、减、乘运算(定义Sub()子过程或Function()来实现); 3)数据文件的建立、数据的读取与写入。 实验步骤: 1.编辑界面 1.1 打开VB 编程工具,进入编程主界面。

1.2 在窗体上新建“读入数据”和“输出数据”两个按钮。 1.3 双击“窗体”进入代码输入界面,进行代码编辑。 2.用VB 编写的源代码 2.1 矩阵基本运算源码详见附录一。 (1)两矩阵相加 (2)两矩阵相减 (3)矩阵转置 (4)两矩阵相乘 (5)矩阵求逆 2.2 文本文件(本实验中data.txt)的读取源代码 (1)建立文本文件并输入数据 在桌面上新建一“data.txt” ( 文本文件路径为C:\Users\ WH\Desktop\练习\data.txt”)。输入以下内容: 6,7,4,0.005 A,35.418 B,45.712 C,25.270

D,24.678 在桌面上新建一“result.txt” ( 文本文件路径为C:\Users\ WH\Desktop\练习\result.txt”)。(2)从文本文件中读数据 Dim linedata as string, m_GaochaN as integer,m_Pnumber as integer,m_knPnumber as integer,M as Double,k1 as integer 'linedata 为存储文本文件一行信息的字符串变量 Dim a() as String,H() as Double 'a()为存储点名,H()存储高程 Open“C:\Users\ WH\Desktop\练习\data.txt”For Input As #1 Line Input #1, linedata k = Split(linedata, ",") m_GaochaN = Val(k(0)) m_Pnumber = Val(k(1)) m_knPnumber = Val(k(2)) M = CDbl(k(3)) For k1 = 1 To m_knPnumber Line Input #1, linedata k = Split(linedata, ",") a(k1)= k(0) GetstationNumber (a) H(k1) = CDbl(k(1)) Next Close #1 (3)将读入点名存储到点名数组中,且返回该点名所对应编号 Function GetstationNumber(name As String) Dim i As Integer For i = 1 To m_Pnumber If P_Name(i) <> "" Then '将待查点名与已经存入点名数组的点比较 If P_Name(i) = name Then GetstationNumber = i Exit For End If Else '待查点是新的点名,将新点名放到P_Name 数组中 P_Name(i) = name GetstationNumber = i Exit For End If Next i End Function (4)从文本文件中写数据(将从data.txt 读入的数据,写入到result.txt 文件中) Open“C:\Users\ WH\Desktop\ 练习\result.txt” For Output As #1 outstring = outstring + str(m_GaochaN) +","

程序设计基础实验报告

《程序设计基础》 实验报告 专业班级: 姓名: 学号:

实验一 面向过程的简单程序设计 1.实验目的要求 (1) 使用C++语言编写简单的计算机程序,掌握C++程序从编辑、编译到运行的全过程, 初步了解C++程序的特点。 (2) 掌握C++语言的数据类型(包括对各种数据类型变量的定义、初始化、赋值等)、运 算符和表达式的使用。 (3) 掌握赋值语句的使用。 (4) 掌握数据的输入输出方法。 2.实验内容 (1)设计简单程序,分别计算下列表达式,式中变量由键盘输入,输出表达式的值。 <1> d c b a x -++ <2> 11 11+++x x <3> sinX+cosX+tan -1 X <4> e x+y +e x-y <5> log 10(1+21x +) <6> 22b a -+??b a - (其中??a 表示取不大于a 的最大整数)。 <1> #include using namespace std; int main() { float x,a,b,c,d,e; cin>>x>>a>>b>>c>>d; e=x+(a+b)/(c-d); cout< #include #include using namespace std; int main() { double x,y; cin>>x; y=sqrt(1+1/(x+1/(x+1)));

cout< #include #include using namespace std; int main() { double x,y; cin>>x; y=sin(x)+cos(x)+1/tan(x); cout< #include #include using namespace std; int main() { double x,y,z; cin>>x>>y; z=exp(x+y)+exp(x-y); cout< #include #include using namespace std; int main() { double x,y; cin>>x; y=log(1+sqrt(1+x*x)); cout< #include #include using namespace std; int main()

文件传输协议的简单设计与实现(c语言.

文件传输协议的简单设计与实现(c语言,VC6.0) 使用Socket进行Client/Server程序设计的一般连接过程是这样的:Server端Listen(监听)某个端口是否有连接请求,Client端向Server端发出Connect(连接)请求,Server端向Client端发回Accept(接受)消息。一个连接就建立起来了。Server端和Client端都可以通过Send,Write等方法与对方通信。 对于一个功能齐全的Socket,都要包含以下基本结构,其工作过程包含以下四个基本的步骤: (1)创建Socket; (2)打开连接到Socket的输入/出流; (3)按照一定的协议对Socket进行读/写操作; (4)关闭Socket. 第三步是程序员用来调用Socket和实现程序功能的关键步骤,其他三步在各种程序中基本相同。 /****************client.c****************/ #include #include #include #pragma comment(lib,"ws2_32.lib") #define DEFAULT_PORT 2302 #define DEFAULT_BUFFER 2048 #define DEFAULT_MESSAGE "This is a test of the emergency \ broadcasting system" char szServerip[128], // Server to connect to szMessage[1024]; // Message to send to sever int iPort = DEFAULT_PORT; // Port on server to connect to //DWORD dwCount = DEFAULT_COUNT; // Number of times to send message BOOL bSendOnly = FALSE; // Send data only; don't receive int dirfun(); int getfun(); int putfun(); int pwdfun(); int cdfun(); int mdfun();

C语言程序设计实验报告(实验大纲+过程)

《C程序设计》实验教学大纲 一、适用范围 大纲适用信息管理专业本科教学使用。 二、课程名称 C程序设计 三、学时数与学分 总学时:90 总学分:4 实验学时:28 实验学分:1 四、教学目的和基本要求 目的:通过C程序设计实验,培养学生对学习程序设计的兴趣,加深对讲授内容的理解,尤其是通过上机来掌握语法规则,使学生全面了解 C 语言的特点,熟练掌握 C 语言程序设计的基本方法和编程技巧。 基本要求:了解和熟悉C语言程序开发的环境;学会上机调试程序,善于发现程序中的错误,并且能很快地排除这些错误,使程序能正确运行,达到实验知识和理论知识的融会贯通。上机实验前,学生必须事先根据题目的内容编好程序,然后在实验时输入程序、调试程序、直至运行结果正确为止,上机结束后,应整理出实验报告。 注:带*的实验项目为选做实验项目 六、教材、讲义及参考书 《C程序设计题解与上机指导》谭浩强主编清华大学出版社 七、实验成绩评定办法 实验成绩=平时实验表现+实验报告。实验成绩占总成绩的20%。 实验成绩以等级形式给出,评定等级分优、良、中、及格、不及格五类。 1、平时考核:上机实验前,学生必须事先根据题目的内容编好程序,然后在实验时输入程序、调试程序、直至运行结果正确为止。在实验中,教师可根据学生编程操作能力、观察和分析及运用知识能力、程序编制正确性以及学生的课堂纪律、实验态度、保持实验室卫生等方面的表现进行综合考核。

2、实验报告:学生实验后应按时完成实验报告。 八、实验教学大纲说明 本大纲共安排28学时的实验,其中带*号实验项目为选做实验项目,实际课时为18学时。实验项目多为设计性实验项目,每个设计性实验项目中都包含数个小的设计性题目,其中带*号的题目为选做题目,有时间和有能力的同学可以选做。 九、实验项目 实验一C程序的运行环境和运行一个C程序的方法 一、实验目的 1.了解Visual C++6.0编译系统的基本操作方法,学会独立使用该系统。 2.了解在该系统上如何编辑、编译、连接和运行一个C程序。 3.通过运行简单的C程序,初步了解C源程序的特点。 二、实验内容 1.用编辑程序,输入教材第一章例1.1程序,并进行编译和运行。应了解所用的系统是用什么命令进行编译和连接运行的。编译和连接后所得到的目标程序的后缀是什么形式的? 2.编写一个C程序,输出以下信息: **************************** very good! **************************** 3.输入并运行教材第一章中例1.3,了解如何在运行时向程序变量输入数据。 实验二数据类型、运算符和表达式 一、实验目的 1.掌握C语言数据类型,熟悉如何定义一个整型、字符型、实型变量,以及对它们赋值的方法,了解以上类型数据输出时所用格式转换符。 2.学会使用C的有关算术运算符,以及包含这些运算符的表达式,特别是自加(++)和自减(--)运算符的使用。 二、实验内容 1.输入并运行以下程序: main( ) { char c1,c2; c1=97;c2=98; pr intf(“%c %c\n”,c1,c2); printf(“%d %d\n”,c1,c2); } 在此基础上 ①将第三行、第四行改为: c1=321;c2=353; 再使之运行,分析其运行结果。 ②将第二行改为: int c1,c2; 再使之运行,分析其运行结果。。 2.输入并运行以下程序:

大学程序设计基础实验报告 (2)

**大学程序设计基础实验报告 实验名称:实验三分支结构 实验目的: 1、掌握IF-ELSE语句使用。 2、掌握ELSE-IF语句使用。 3、熟悉SWITCH语句使用。 实验内容: 在本地电脑中新建一个文件夹,用于存放C程序,文件夹的名字要求是“学号姓名-实验序号”,如E:\ 1920115555张三-03。启动C-Free,完成如下各题。 1、编程题:输入参数a,b,c,求一元二次方程ax2+bx+c=0的根(①a、b、c都为0,②a 和b为0,c不为0,③a为0,b不为0,c任意,④a不为0,且a、b、c满足b2-4ac ≥0,⑤a不为0,且a、b、c满足b2-4ac<0)。 2、编程题:输入职工的月薪salary,计算并输出应缴纳的个人所得税tax。tax=rate * (salary –850),rate的计算方式如下: 当salary <= 850,则rate = 0; 当850 < salary <= 1350,则rate = 5%; 当1350 < salary <= 2850,则rate = 10%; 当2850 < salary <= 5850,则rate = 15%; 当salary > 5850,则rate = 20%;。 3、编程题:根据输入的3个边长a、b、c,判断它们是否能构成三角形,若能构成三 角形,则进一步判断此三角形是哪种类型的三角形(等边三角形、等腰三角形、直角三角形和一般三角形。等腰直角算作等腰)。 4、编程题:输入一个形式如“操作数运算符操作数”的表达式,对2个整数进行乘、 除或求余运算。【请分别用if语句和switch语句实现此题功能】 上交作业的方法: 1.将程序代码及注释和运行程序的窗口复制到实验结果下方对应的题号上,并把这 次实验上机操作中遇到的问题及解决方法、心得等填好完成实验报告。 2.保存以上所有按要求已调试通过,并形成.c(或.cpp)和.exe文件到以自己的“学 号姓名-03”命名的文件夹中,并将以自己的“学号姓名”命名的文件夹压缩后上 交到ftp://10.172.250.252:1161中的“作业上传”文件夹下的“报告上交02”文件 夹下的子文件夹“源文件压缩上交”中,同时把以“学号姓名-03”命名的word 文档上交到“报告上交03”文件夹下的另一子文件夹“word文件上交”中。 特别提醒:每次上传的文件名一定要是“学号姓名-实验序号. doc”(如1720115555张

C语言程序设计实验报告(数组)

C语言程序设计实验报告(数组) 1实验目的 (1)熟练掌握一维数组,二维数组的定义,初始化和输入、输出方法; (2)熟练掌握字符数组和字符串函数的使用; (3)掌握与数组有关的常用算法(查找、排序等)。 2实验内容 编写函数catStr(char str1[],char str2[])用于进行两个字符串的连接,编写函数lenStr(char str[])用于统计一个字符串的长度,并在主函数中调用。 要求: 1、不允许用strcat()和strlen()字符处理库函数; 2、在主函数以直接初始化的方式输入两个字符串str1和str2.调用函数 strlen()计算并返回两个字符串的长度; 3、调用函数catstr()连接两个字符串(将str2连接在str1后面); 4、调用函数lenstr()计算并返回连接后字符串的长度; 5、在主函数中输入两个原始的字符串及几个字符串的长度,以及处理后字 符串及其长度。

3算法描述流程图

4源程序 #include #include void catStr(char str1[],char str2[]) { int i,j; for (i=0;str1[i]!='\0';i++); for(j=0;str2[j]!='\0';j++) str1[i+j]=str2[j]; str1[i+j]='\0'; } lenStr(char m[] ) {int i;

for (i=0;m[i]!='\0';i++); printf("%d",i); } void main() {char s1[50]="forever",s2[50]="more"; printf("s1=%s,s2=%s",s1,s2); printf("\ns1的长度:"); lenStr(s1); printf("\ns2的长度:"); lenStr(s2); catStr(s1,s2); printf("\n连接后的字符:"); printf("%s\n",s1); printf("连接后字符的长度:"); lenStr(s1); printf("\n"); } 5测试数据 s1=forever, s2=more 6运行结果 7出现问题及解决方法 在输入程序时,少写了半边引号,调试时发现存在错误,找到了错误并加以改正。无论什么事,细心都是必不可少的,认真是解决问题的关键。 8实验心得 通过本次实验,对于函数的定义和声明,数组以及循环语句有了进一步的认识,掌握了字符数组和字符串函数的使用,以及与数组有关的常用算法。此次实验不是调用strlen()和strcat()函数,而是通过自己设计程序来进行字符串的连接以及计量字符串的长度,由此我学会了如何去理清自己的思路来设计程序。

(完整)实验一-文件传输协议设计要点

实验一:文件传输协议的设计与实现

目录 1.实验设计目的和要求 2.背景知识 3.课程设计分析 4.程序清单 5.运行结果 6.总结

1.课程设计目的和要求 文件传输是各种计算机的网络的基本功能,文件传送协议是一种最基本的应用层协议。它是按照客户或服务器模式进行的工作,提供交式的访问。是INTERNRT使用最广泛的协议之一。以及深入了解计算机网络是建立在TCP/IP网络体系结构上。 用 socket 编程接口编写俩个程序,分别为客户程序和服务器程序 1.掌握TCP/IP 网络应用程序基本的设计方法; 2.用socket 编程接口编写两个程序,分别为客户程序(client.c)和服务器程序(server.c); 3.撰写课程设计说明书。装订后的课程设计说明书不少于10面(含封面、任务书、目录、正文、参考文献、成绩评定表、封底)。 2.背景知识 第一个FTP的RFC由A.K.Bhushan 在1971年提出,同时由MIT 与Harvard实验实现,RFC 172提供了主机间文件传输的一个用户级协议。长期发展过程由于底层协议从NCP改变为TCP,RFC765定义了采用TCP的FCP. FTP协议在今天已经发展成熟,应用也越来越广很多开发的比较成熟的FTP 客户端软件已经得到了广泛的应用. 3.课程设计分析 Server端Client端 创建ServerSocket对象,在某端口提供监听服务Client端 等待来自Client端的服务请求 接受Client端的请求,用返回的创建Socket对象,向Server Socket建立连接的监听端口请求 通过向Socket中读写数据来通过向新的Socket中读写数 与Client端通信据来与Server端通信 关闭Socket,结束与Server端的通信关闭

C语言程序设计基础实验报告6【VIP专享】

实验6 数组 一、实验目的 1、掌握一维数组和二维数组的定义、赋值和输入输出的方法; 2、掌握字符数组和字符串函数的使用; 3、掌握与数组有关的算法(特别是排序算法)。 二、实验内容和步骤 编程序并上机调试运行。 1、以下给定程序MODI1.C的功能是: 求一维数组a中所有元素的平均值, 结果保留两位小数。例如,当一维数组a中的元素为:10, 4, 2, 7, 3, 12, 5, 34, 5, 9时,程序的输出应为:The aver is: 9.10 程序中有两处错误,错误都在提示行:/***********found***********/的下面一行。请改正程序中的错误, 使它能得出正确的结果。 注意:程序中的其它地方请不要随意改动,不得增行或删行,也不得更改程序的结构! #include #include void main() { int a[10]={10,4,2,7,3,12,5,34,5,9}, i; /************found************/ /************found************/ s = a[0]; for ( i=1; i<10; i++) s += a[i]; aver = s / i; printf("The aver is: %.2f\n", aver); } 2、以下给定程序MODI1.C的功能是:求二维数组a中的最小值。 例如,当二维数组a中的元素为: 4 2 34 7 3 12 5 6 5 程序的输出应为:The min is: 2 。 程序中有两处错误,错误都在提示行:/***********found***********/的下面一行。请改正程序中的错误, 使它能得出正确的结果。 注意:程序中的其它地方请不要随意改动,不得增行或删行,也不得更改程序的结构! #include #include void main() { int a[3][3]={4,2,34,7,3,12,5,6,5}, i, j, min; clrscr();

计算机网络课程设计报告文件传输协议的简单实现

课程设计 课程名称计算机网络课程设计 题目名称文件传输协议的简单设计与实现学生学院 专业班级___ _ 学号 学生姓名______ _________ 指导教师______ _____ 2010 年 1 月 5 日

设计摘要 关键词:SOCKET编程,FTPclient/server程序 摘要:本课程设计包含了文件传输协议的简单设计与实现。 文件传送是各种计算机网络实现的基本功能,文件传送协议是一种最基本的应用层协议按照客户/服务器的模式进行工作,提供交互式的访问,是INTERNET使用最广泛的协议之一。文件传输协议的简单设计与实现建立在计算机网络实验环境TCP/IP 网络体系结构之上,使用socket 编程接口编写两个程序,分别为客户程序和服务器程序(),实现下述命令功能:get , put, pwd, dir, cd, ?, quit 等,利用了已有网络环境设计并实现简单应用层协议。 本设计包括了具体设计任务,基本思路及所涉及的相关理论,设计流程图,调试过程中出现的问题及相应解决办法,实验运行结果,核心程序,个人体会及建议等。

目录 1、文件传输协议的简单设计与实现------------------------------18 1. 1 具体设计任务----------------------------------------------18基本思路及所涉及的相关理论--------------------------------18 1.2.1基本思路-------------------------------------------------18 2.2.2 相关理论--------------------------------------------18 设计流程图------------------------------------------------19 实验运行情况----------------------------------------------19 核心程序--------------------------------------------------22 2.5.1 服务器(sever)程序---------------------------------22 2.5.2 客户(client)程序----------------------------------29 心得体会-----------------------------------------------------------------------------37 参考文献--------------------------------------------------------38

C+程序设计实验报告-2013

C++程序设计 实验报告 专业计算机科学与技术班级 ____________ 学号 ____________ 姓名 ____________ 指导教师 __许加兵_ 信息与电子工程学院2013年9月-12月

C++程序设计实验报告 专业__________班级__________学号__________姓名__________ 成绩____________ 指导教师____________ 日期____________ 实验1 C++集成开发环境与C++函数程序设计 一、实验目的 1、了解和使用Visual Studio 2010的C++集成开发环境; 2、熟悉Visual Studio 2010环境的基本命令、功能键和常用的菜单命令; 3、学会完整的C++程序开发过程; 4、学习并掌握C++函数程序设计; 二、实验内容 1、安装、了解和使用Visual Studio 2010的C++集成开发环境; 2、通过以下的C++函数程序设计,熟悉Visual Studio 2010环境的基本命令、功能键和常用的菜单命令; 3、通过以下的C++函数程序设计,学会完整的C++程序开发过程; 4、完成以下的C++函数程序设计和调试: 1)编写一个函数print(),将一个整型向量输出到cout。此函数接受两个参数:一个字符串(用于“标记”输出)和一个向量。 2) 编写一个函数,接受一个vector 参数,返回一个vector ,其每个元素值是对应字符串的长度。此函数还找出最长和最短的字符串,以及字典序第一个和最后一个字符串。 三、简要说明C++开发环境安装和配置的过程

C++程序设计实验报告5

《程序设计基础》 实验报告 学号:2016211990 姓名:王贯东 班级:16-计算机科学与技术-1班

学院:计算机与信息学院 实验五指针 1.实验目的要求 (1)掌握指针的概念,学会定义和使用指针变量。 (2)学会使用数组指针和指向数组的指针变量。 (3)学会使用字符串指针和指向字符串的指针变量。 (4)了解指向指针的指针的概念以及其使用方法。 (5)掌握指针、引用、数组做函数参数的传递机制。 (6)*学会使用指向函数的指针变量。 2.实验设备 Visual C++ 6.0 3.实验内容 (1)阅读下面程序,写出其运行结果。

<1> #include sub ( int x , int y , int *z ) { *z = y – x ; } void main( ) { int a,b,c; sub( 10 , 5 , &a ) ; sub( 7, a, &b ) ; sub( a, b, &c ) ; cout << a <<‘,’<< b <<‘,’<< c << endl ; } 解:输出-5,-12,-7 <2> #include #include void main()

{ int stre ( char[ ] ) ; char str [ 10 ] , *p = str ; gets ( p ) ; cout << stre ( p ) << endl ; } int stre ( char str[ ] ) { int num = 0 ; while( * ( str + num ) != ’\0’ ) num ++ ; return ( num ) ; } 解:题目库函数少了 。该正后,输入1234,输出4 (2)编写程序实现下列问题的求解。 (1)输入三个整数,按由小到大的顺序输出,然后将程序改为:输入三个字符串,按由小到大的顺序输出。 #include using namespace std; int turn (int *p1,int *p2)

基于MATLAB的智能控制系统的介绍与设计实例最新毕业论文

(此文档为word格式,下载后您可任意编辑修改!) 武汉科技大学 智能控制系统 学院:信息科学与工程学院 专业:控制理论与控制工程 学号: 姓名:李倩

基于MATLAB的智能控制系统的介绍与设计实例 摘要 现代控制系统,规模越来越大,系统越来越复杂,用传统的控制理论方法己不能满控制的要求。智能控制是在经典控制理论和现代控制理论的基础上发展起来的,是控制理论、人工智能和计算机科学相结合的产物。MATLAB是现今流行的一种高性能数值计算和图形显示的科学和工程计算软件。本文首先介绍了智能控制的一些基本理论知识,在这些理论知识的基础之上通过列举倒立摆控制的具体实例,结合matlab对智能控制技术进行了深入的研究。 第一章引言 自动控制就是在没有人直接参与的条件下,利用控制器使被控对象(如机器、设备和生产过程)的某些物理量能自动地按照预定的规律变化。它是介于许多学科之间的综合应用学科,物理学、数学、力学、电子学、生物学等是该学科的重要基础。自动控制系统的实例最早出现于美国,用于工厂的生产过程控制。美国数学家维纳在20世纪40年代创立了“控制论”。伴随着计算机出现,自动控制系统的研究和使用获得了很快的发展。在控制技术发展的过程中,待求解的控制问题变得越来越复杂,控制品质要求越来越高。这就要求必须分析和设计相应越来越复杂的控制系统。智能控制系统(ICS)是复杂性急剧增加了的控制系统。它是由控制问题的复杂性急剧增加而带来的结果,其采用了当今其他学科的一些先进研究成果,其根本目的在于求解复杂的控制问题。近年来,ICS引起了人们广泛的兴趣,它体现了众多学科前沿研究的高度交叉和综合。 作为一个复杂的智能计算机控制系统,在其建立投入使用前,必要首先进行仿真实验和分析。计算机仿真(Compeer Simulation)又称计算机模拟(Computer Analogy)或计算机实验。所谓计算机仿真就是建立系统模型的仿真模型进而在计算机上对该仿真模型

C#程序设计实验报告

学生实验报告 (理工类) 课程名称: C#程序设计专业班级:M11计算机科学与技术(专转本)学生学号: XXXXXXXX 学生姓名: XXX 所属院部:信息技术学院指导教师: XXX 2012 — 2013学年第 1 学期 金陵科技学院教务处制

实验报告书写要求 实验报告原则上要求学生手写,要求书写工整。若因课程特点需打印的,标题采用四号黑体,正文采用小四号宋体,单倍行距。纸张一律采用A4的纸张。 实验报告书写说明 实验报告中实验目的和要求、实验仪器和设备、实验内容与过程、实验结果与分析这四项内容为必需项。教师可根据学科特点和实验具体要求增加项目。 填写注意事项 (1)细致观察,及时、准确、如实记录。 (2)准确说明,层次清晰。 (3)尽量采用专用术语来说明事物。 (4)外文、符号、公式要准确,应使用统一规定的名词和符号。 (5)应独立完成实验报告的书写,严禁抄袭、复印,一经发现,以零分论处。 实验报告批改说明 实验报告的批改要及时、认真、仔细,一律用红色笔批改。实验报告的批改成绩采用五级记分制或百分制,按《金陵科技学院课堂教学实施细则》中作业批阅成绩评定要求执行。 实验报告装订要求 实验批改完毕后,任课老师将每门课程的每个实验项目的实验报告以自然班为单位、按学号升序排列,装订成册,并附上一份该门课程的实验大纲。

实验项目名称:C#基础编程实验学时: 6 同组学生姓名:实验地点: A205 实验日期: 9月17日-9月24日实验成绩: 批改教师:批改时间:

实验1 C#基础编程 一、实验目的 1、熟悉Visual Studio .NET开发环境; 2、掌握C#应用程序的基本操作过程; 3、掌握C#的数据类型,运算符以及表达式的使用; 4、掌握分支和循环语句的使用方法; 5、掌握一维数组,二维数组及数组型数组的使用。 二、实验要求 (1)编写程序要规范、正确,上机调试过程和结果要有记录; (2)做完实验后给出本实验的实验报告。 三、实验设备、环境 安装有Visual Studio .NET软件。 四、实验步骤 1、分析题意; 2、根据题目要求,新建项目; 3、编写并输入相关的程序代码; 5、运行与调试项目; 6、保存项目。 五、实验内容 1、编写一个简单的控制台应用程序,打印一行文字(如你的姓名)。using System; using System.Collections.Generic; using System.Text; namespace Test1_1 { class Program { static void Main(string[] args) { Console.WriteLine("1121412016 张明星!"); Console.ReadLine(); } } } 2、编写一个简单的Windows应用程序,在标签中显示你的姓名。 Form窗体的代码: using System; using System.Collections.Generic;

文件传输协议的设计与实现

课程设计任务书 学生姓名:专业班级: 指导教师:工作单位:信息工程学院 题目:文件传输协议的设计与实现 初始条件: Windows XP C++,SOCKET 要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求) 1.掌握TCP/IP 网络应用程序基本的设计方法; 2.用socket 编程接口编写两个程序,分别为客户程序(client.c)和服务器程序(server.c); 3.撰写课程设计说明书。装订后的课程设计说明书不少于10面(含封面、任务书、目录、正文、参考文献、成绩评定表、封底)。 时间安排: 6月18日查阅资料、方案论证 6月19日方案设计、调试 6月20日撰写课程设计说明书 6月21日答辩 指导教师签名:年月日 系主任(或责任教师)签名:年月日

运行正确的程序:: 1.服务器源代码: #include #include #include using namespace std; #pragma comment(lib, "wsock32.lib") #define PORT 4523 char buf_send[1024]; char buf_rec[1024]; SOCKET sockSrv; //socket初始化 DWORD CreateSocket() { WSADATA WSAData;//WSADATA结构被用来保存函数WSAStartup返回的Windows Sockets初始化信息if(WSAStartup(MAKEWORD(2,2),&WSAData)!=0)//WSAStartup完成winsock的初始化 {printf("socket initialize failed!\n"); return (-1); } sockSrv=socket(AF_INET,SOCK_STREAM,0);//定义为面向连接的,返回值送给sockSrv if(sockSrv==SOCKET_ERROR) { printf("socket create failed ! \n"); WSACleanup();//中止Windows Sockets DLL的使用 return(-1); } SOCKADDR_IN addrSrv;//TCP/IP使用SOCKADDR_IN 定义地址 addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);//计算机IP地址 addrSrv.sin_port=htons(PORT);//协议端口号 addrSrv.sin_family=AF_INET;//地址所属协议簇 //绑定端口 if(bind(sockSrv,(struct sockaddr FAR *)&addrSrv,sizeof(addrSrv))==SOCKET_ERROR) { printf("Bind Error"); return(-1); } return (1); }

相关文档
最新文档