UDP简单超时重传

UDP简单超时重传
UDP简单超时重传

最近的项目开发中,网络部分的实现采用自定义的通讯协议,为了保证服务器安全稳定运行,保证数据发送速度(相对于TCP来说),采用UDP协议。UDP 和TCP的优劣在此不再重复。

在采用UDP协议时候, 问题也就跟着来了。UDP协议的本质决定了数据包的不可靠传输,我们无法知道数据包何时会被遗失,所以采用UDP传输信息,就必须自己控制和解决丢包、超时、重传问题。这是一个很久以来一直都在讨论的且未得到完美解决的问题。

不多说了,下面看一段程序吧。这是我在一个线程中实现的代码。

// 转载出处,做人要厚道!

DWORD CALLBACK UDPLogin(void *p)

{

fd_set readfds;

struct timeval authtime;

int retries=0,retry_max=10; //重试10次

char SendBuffer[MAXBUFLEN]; //发送区

char RecvBuffer[MAXBUFLEN]; //接收区

int size=sizeof(struct sockaddr);

// 示例发送内容

strcpy(SendBuffer,username); //用户名

strcpy(SendBuffer+strlen(username),password); //密码

// 设置超时时间

https://www.360docs.net/doc/908096703.html,_usec = 0L;

https://www.360docs.net/doc/908096703.html,_sec = (long)1; // 1秒后重发

while(1)

{

//发送数据

sendto(m_Socket,SendBuffer,MAXBUFLEN,0, (struct sockaddr *)&remote_addr,sizeof(remote_add r));

memset(RecvBuffer,0,sizeof(RecvBuffer));

//下面2 句非常重要,为select 函数做准备

FD_ZERO (&readfds);//

FD_SET (m_Socket, &readfds);//

if(select(m_Socket,&readfds,NULL,NULL,&authtime) < 0)

{return -1;}

if (FD_ISSET(m_Socket, &readfds)) // 有东西读,就读

{

recvfrom(m_Socket,RecvBuffer,MAXBUFLEN,0,(struct sockaddr *)&remote_addr,&size);

// 读完就可以自己处理一下收到的数据了,省略。。

break;

}

// 如果没东西读,就表示发送失败,或者网络丢包了

// 那么就记录次数

if (++retries >= retry_max)

{

MessageBox(NULL,"请检查网络设置是否正确。然后重启本软件","登陆失败",MB_OK);

return -1;

}

}//while

return 0;

}

其实,上面的关键在于select 函数!!

一个FD_ISSET(readfds)就相当通知了readfds可读。

至于struct timeval在此的功能,请查询select。不同的timeval设置使使select()表现出超时结束、无超时阻塞和轮询三种特性。由于

timeval可精确至百万分之一秒,所以Windows的SetTimer()根本不算什么。你可以用select()做一个超级时钟。

广工计算机网络课设基于UDP的ping.doc

《计算机网络》课程设计 学院 ____计算机学院 _______ 专业 ______软件工程 _______ 年级班别 ______12 级 4 班 _______ 学号91 学生姓名指导教师______ ____ 林炳城 梁路 _ __ ___ ________ 成绩

目录

设计题目 已知技术参数和设计要 求 设计内容与 步骤 设计工作计划与进度安 排 计算机网络课程设计任务书 编程实现基于UDP 的 PING (Java) 1.编程实现 PING 的服务器端和客户端,实现操作系统提供的 ping 命令的类似功能。 2.服务器端PingServer 功能: 可以显示用户通过客户端发送来的消息内容(包含头部和payload); 能够模拟分组的丢失;能够模拟分组传输延迟; 将用户发送来的请求request 在延迟一段随机选择的时间(小于 1s)后返回给客户端,作为收到请求的响应reply; 通过如下命令行启动服务器:java PingServer port 。 port 为 PingServer 的工作端口号 3.客户端 PingClient功能: 启动后发送10 个 request。发送一个request 后,最多等待 1 秒以便接收PingServer 返回的 reply 消息。如果在该时间内没有收到服务器的reply ,则认为该请求或对该请求的 reply 已经丢失;在收到 reply 后立即发送下一 个 request。 请求消息的payload 中至少包含关键字PingUDP 、序号、时间戳等内容。 如: PingUDP SequenceNumber TimeStamp CRLF 其中: CRLF 表示回车换行符(0X0D0A) ; TimeStamp 为发送该消息的机器时间。 为每个请求计算折返时间(RTT) ,统计10 个请求的平均RTT 、最大 /小RTT 。 通过如下命令行启动:java PingClient host port 。 host 为 PingServer 所在的主机地址;port 为 PingServer 的工作端口号 1.学习 ICMP ,了解 ping 命令的工作机理; 2.学习 Java UDP Socket 通信机制; 3.了解 Java 多线程程序设计; 4.服务器 PingServer 程序设计; 5.客户端 PingClient 程序设计。 6.调试与演示 命令工作机制学习 2 小时 UDP Socket 通信机制 2 小时 多线程程序设计 4 小时 程序设计 6 小时 程序设计12 小时 6.调试与演示 4 小时6.课程设计说明书10 小时

基于UDP的文件传输实验报告

实验报告 成 绩 2015年6月 8 日 课程名称 《数据库技术》 学生姓名 *** 学 号 ******** 专业班级 电子信息工程 指导教师

实验名称:基于UDP的文件传输 1.实验目的 (1)熟练掌握Socket编程; (2)分析UDP与TCP的异同。 2.实验设备和条件 硬件环境:PC机 操作系统:Windows 或者Linux 语言环境:Visual C++ ,VS,GCC,Java均可 3.实验要求 参考TCP文件传输demo, 基于UDP实现send.mp3文件的传输,并测试接收到的文件与发送的文件是否一致。 请各位同学于第15周星期三或星期四上课时将纸质版(双面打印)上交! 4.实验内容:测试数据与实验结果(可以抓图粘贴) (1)发送端代码。 #include"stdafx.h" #include #include #define MAX_LENGTH 1024 int_tmain(int argc, _TCHAR* argv[]) { WORD wVersionRequested; WSADATA wsaData; wVersionRequested = MAKEWORD(2, 2); if (WSAStartup(wVersionRequested, &wsaData) != 0)//初始化ws2_32.dll动态库 { printf("WSAStartup() failed!\n");//Winsock初始化错误 exit(-1);

} if (wsaData.wVersion != wVersionRequested) { printf("The version of Winsock is not suited!\n");//Winsock版本不匹配WSACleanup();//结束对ws2_32.dll的调用 exit(-2); } //说明ws2_32.dll正确加载 printf("Load ws2_32.dll successfully!\n"); //创建套接字 SOCKET servsock; printf("Create Socket...\n"); servsock = socket(AF_INET, SOCK_DGRAM, 0);//数据报套接字 int servport = 5555; int iSockErr = 0; //定义服务器地址结构 sockaddr_in udpaddr; int len = sizeof(udpaddr); memset(&udpaddr, 0, sizeof(udpaddr)); udpaddr.sin_family = AF_INET; udpaddr.sin_port = htons(servport); //将一个点分十进制IP地址字符串转换成32位数字表示的IP地址udpaddr.sin_addr.s_addr = inet_addr("172.16.4.94");////INADDR_ANY //读取mp3文件 FILE *fp = NULL; errno_t err; err = fopen_s(&fp, "七里香.mp3", "rb"); if (fp == NULL){ printf("Open File Failed!\n"); getchar(); exit(-5); } char buffer[MAX_LENGTH] = "\0";

基于UDP的文件传输

报告编号:11 综合课程设计报告 基于UDP协议的文件传输系统的设计与实现 学生姓名: 指导教师: 所在系:电子系 所学专业:电子信息工程 年级:08级电子(2)班 2011 年6 月 目录

摘要 (3) 1 实验的相关知识 (4) 1.1通信的模式 (4) 1.2 UDP协议 (4) 1.3 Winsock控件 (4) 1.3.1 Winsock控件重要属性、方法和事件 (5) 1.3.2 Winsock控件通信的工作原理 (7) 2 实验原理 (7) 3 实验步骤 (7) 3.1总体规划 (8) 3.2模块设计 (8) 3.3创建窗体 (8) 3.4程序设计 (10) 3.5系统运行 (11) 4实验结论 (12) 参考文献 (13) 基于UDP的文件传输的系统的设计与实现

摘要 该实验的任务是实现文件的传输,并且是基于UDP协议的。所有文件在该协议下可以实现发送并正确接收。此时需要了解的是UDP的数据包一次最多只能发送8K,所以我们想到通过拆包和创建窗体的方法来实现文件的传输。拆包主要是规定每个数据包的大小,然后计算具体的文件所需要的包数,创建窗体的目的是编写程序来进行分包发送和接收。通过系统运行窗体我们可以知道UDP不仅可以传送和接收小文件,还可以传输和接收较大的文件。通过实验可知UDP是不可靠的无连接传输,所以在传输过程中会发生丢包的情况,但大部分情况下传输还是比较好的。 关键词:UDP协议发送文件接收文件拆包 Winsock控件

1 实验的相关知识 1.1通信的模式 由于是实现点对点的文件传输,因此在程序中我们使用的是C/S的模式来实现通信。对于C/S的模式,即分为客户端和服务端。服务端用来接收客户端的连接,实现两端之间互相传输文件。采用C/S的模式可以更好的体现程序的功能设计思想,充分调用在LAN中的server和client两方面的处理能力,极大的减少网络上的信息流通量。C/S体系结构有可能提供一种开放式的、易伸缩扩展的分布式计算机环境,并保护硬件等投资。 1.2 UDP协议 该实验文件传输是在UDP协议下进行的,UDP提供无连接不可靠的用户数据包传输。其中每一个数据段只有8Byte相对于TCP传输开销较少,且无须对发送速率进行管理。UDP发送数据的速率仅仅受限于程序产生数据的速率,信源主机的性能及internet上可以利用的宽带。并且与TCP不同的是UDP不需要连接,可直接发送,传输数据较快,但同时其稳定性不好,易丢包。 1.3 Winsock控件 Winsock即Windows Sockets规范的简称,是目前最流行的网络通信应用程序接口之一。所谓Socket,通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄。应用程序通常通过“套接字”向网络发出请求或者应答网络请求。Socket是网络上运行的两个程序间双向通讯的一端,它既可以接受请求,也可以发送请求,利用它可以较为方便的编写网络上数据的传递。Winsock控件工作在传输层上,在这一层上,目前主要流行的协议包括TCP和UDP两种:TCP协议适用于那些对于数据的可靠性要求比较高的情况,目前大多数的网络应用层协议都是基于TCP协议的(例如常用的HTTP、FTP、SMTP、POP3等协议);UDP 协议适用于对数据可靠性要求不高而对速度要求较高的情况,这里主要包括一些需要大流量

UDP文件传输

1.实验目的 了解udp文件传输过程,掌握传输方法。 2.实验内容 要实现无差错的传输数据,我们可以采用重发请求(ARQ)协议,它又可分为连续ARQ 协议、 选择重发ARQ 协议、滑动窗口协议。本文重点介绍滑动窗口协议,其它的两种有兴趣的可参考相关 的网络通信之类的书。 采用滑动窗口协议,限制已发送出去但未被确认的数据帧的数目。循环重复使用已收到的那些数 据帧的序号。具体实现是在发送端和接收端分别设定发送窗口和接收窗口。 3.实验总结 学会了udp协议传输和代码设计,了解了udp的格式。 发送端的发送线程: int ret; int nPacketCount = 0; DWORD dwRet;

SendBuf sendbuf; DWORD dwRead; DWORD dwReadSize; SendBuf* pushbuf; //计算一共要读的文件次数,若文件已读完,但客户端没有接收完, //则要发送的内容不再从文件里读取,而从m_bufqueue 里提取 nPacketCount = m_dwFileSize / sizeof(sendbuf.buf); //若不能整除,则应加1 if(m_dwFileSize % sizeof(sendbuf.buf) != 0) ++nPacketCount; SetEvent(m_hEvent); CHtime htime; //若已发送大小小于文件大小并且发送窗口前沿等于后沿,则继续发送 //否则退出循环 if(m_dwSend < m_dwFileSize) // 文件没有传输完时才继续传输 { while(1) { dwRet = WaitForSingleObject(m_hEvent, 1000); if(dwRet == WAIT_FAILED) { return false; } else if(dwRet == WAIT_TIMEOUT) { //重发 ::EnterCriticalSection(&m_csQueue); // 进入m_bufqueue 的排斥区 ret = m_hsocket.hsendto((char*)m_bufqueue.front(), sizeof(sendbuf)); ::LeaveCriticalSection(&m_csQueue); // 退出m_bufqueue 的排斥区 if(ret == SOCKET_ERROR) { cout << "重发失败,继续重发" << endl; continue; } ResetEvent(m_hEvent); continue; } //若发送窗口大小< 预定大小&& 已读文件次数(nReadIndex) < 需要读文件的次数(nReadCoun t),则继续读取发送 //否则,要发送的内容从m_bufqueue 里提取 if(m_dwSend < m_dwFileSize) { dwReadSize = m_dwFileSize - m_dwSend; dwReadSize = dwReadSize < MAXBUF_SIZE ? dwReadSize : MAXBUF_SIZE;

基于socket的文件传输软件的设计与实现

哈尔滨工业大学课程结业报告 姓名:学 陈琳 09S003158 计算机科学与技术网络程序设计 2009-12-20

目录 1.基于TCP/IP及UDP的通信传输概述 (2) 2.系统体系结构 (4) 2.1面向TCP连接系统调用过程 (5) 2.2面向UDP连接系统调用过程 (6) 3.系统要求与功能实现 (6) 3.1公共类设计 (6) 3.1.1 IP地址操作类 (6) 3.1.2 DNS相关类 (7) 3.2 TCP文件传输 (8) 3.2.1 服务器端 (8) 3.2.2 客户端 (9) 3.3 UDP文件传输 (10) 3.3.1 服务器端 (11) 3.3.2 客户端 (12) 3.4线程池 (12) 3.5其它 (13) 4.试验结果 (13) 5.思考 (15) 6.结论和收获 (16)

基于socket套接字的文件传输软件的设计与实现1.概述 TCP/IP(Transmission Control Protocol/Internet Protocol)的简写,中文译名为传输控制协议/因特网互联协议,又叫网络通讯协议,这个协议是Internet 最基本的协议、Internet国际互联网络的基础,简单地说,就是由网络层的IP 协议和传输层的TCP协议组成的。TCP/IP协议使用范围极广,是目前异种网络通信使用的唯一协议体系,适用于连接多种机型,既可用于局域网,又可用于广域网,许多厂商的计算机操作系统和网络操作系统产品都采用或含有TCP/IP协议。TCP/IP协议已成为目前事实上的国际标准和工业标准。基于TCP/IP协议组的网络模型分为应用层、传输层、网络层、链路层和物理层这样五个层次。TCP/IP 协议组位于应用程序和硬件之间,指挥数据在网络各层中传递。其中传输层的协议包括传输控制协议(TCP)和用户数据报协议(UDP) ,它们都建立在IP协议的基础上,其中TCP提供可靠的面向连接服务,UDP提供简单的无连接服务。传输层提供端到端,即应用程序之间的通信,主要功能是数据格式化、数据确认和丢失重传等。TCP协议是面向连接的协议,它提供可靠的字节流服务,在进行数据传输之前必须先建立连接,经三次握手确定后才开始数据传送。UDP进行数据报传输使用的是不可靠、无连接的协议。网络层包括互连网协议 IP,互连网控制报文协议 ICMP和互连网组管理协议IGMP。其中IP协议完成大部分的工作,负责数据传输和路由的选择等。I P报头中的地址和网卡相联系( 具体还涉及地址解析和反向地址解析协议),TCP 、UDP报头中的端口号侧对应着网络主机上不同的程序。TCP/IP体系结构如图一所示:

基于UDP的文件传输.

计算机网络综合课程设计报告基于UDP协议的文件传输系统的设计与实现 学生姓名: 指导教师: 所在系:电子信息系 所学专业:电子信息工程 年级: 2013 年6 月

目录 基于UDP的文件传输的系统的设计与实现 (3) 一、实验的相关知识 (3) 1.1通信的模式 (3) 1.2 UDP协议 (4) 1.3 Winsock控件 (4) 1.4 Winsock控件重要属性、方法和事件 (4) 1.6 commomdialog控件 (6) 1.7 timer控件 (7) 三、实验步骤 (7) 3.1总体规划 (7) 3.2模块设计 (8) 3.3创建窗体 (8) 3.4程序设计 (9) 3.5系统运行 (14) 四、实验结论 (15) 五、参考文献 (15)

基于UDP的文件传输的系统的设计与实现 摘要:该实验的任务是实现文件的传输,并且是基于UDP协议的。所有文件在该协议下可以实现发送并正确接收。此时需要了解的是UDP的数据包一次最多只能发送8K,所以我们想到通过拆包和创建窗体的方法来实现文件的传输。拆包主要是规定每个数据包的大小,然后计算具体的文件所需要的包数,创建窗体的目的是编写程序来进行分包发送和接收。通过系统运行窗体我们可以知道UDP不仅可以传送和接收小文件,还可以传输和接收较大的文件。通过实验可知UDP是不可靠的无连接传输,所以在传输过程中会发生丢包的情况,但大部分情况下传输还是比较好的。 关键词:UDP协议;发送文件;接收文件;拆包;Winsock控件 一、实验的相关知识 1.1通信的模式 由于是实现点对点的文件传输,因此在程序中我们使用的是C/S的模式来实现通

基于udp的文件传输实验报告

一实验目的 1了解udp文件传输的具体内容 2明白发送窗口,接收窗口的定义 3理解发送端的发送线程,以及发送端的接收线程 4掌握接收端的接收线程 二实验内容 基于udp协议的文件传输,以及相关代码 三实验步骤 1发送窗口 发送窗口用来对发送端进行流量控制。发送窗口的大小Wt 代表在还没有收到对方确认的条件下,发送端最多可以发送的数据帧的个数。 2接收窗口 接收窗口用来控制接收数据帧。只有当接收到的数据帧的发送序号落在接收窗口内,才允许将该数据帧收下,否则一律丢弃。接收窗口的大小用Wr 来表示,在连续ARQ 协议中,Wr = 1。 在接收窗口和发送窗口间存在着这样的关系:接收窗口发生旋转后,发送窗口才可能向前旋转,接收窗口保持不动时,发送窗口是不会旋转的。这种收发窗口按如此规律顺时钟方向不断旋转的协议就犯法为滑动窗口协议。 发送端的发送线程: int ret; int nPacketCount = 0; DWORD dwRet; SendBuf sendbuf; DWORD dwRead; DWORD dwReadSize; SendBuf* pushbuf; //计算一共要读的文件次数,若文件已读完,但客户端没有接收完, //则要发送的内容不再从文件里读取,而从m_bufqueue 里提取 nPacketCount = m_dwFileSize / sizeof(sendbuf.buf); //若不能整除,则应加1 if(m_dwFileSize % sizeof(sendbuf.buf) != 0) ++nPacketCount; SetEvent(m_hEvent); CHtime htime; //若已发送大小小于文件大小并且发送窗口前沿等于后沿,则继续发送 //否则退出循环 if(m_dwSend < m_dwFileSize) // 文件没有传输完时才继续传输 { while(1) { dwRet = WaitForSingleObject(m_hEvent, 1000);

基于UDP的文件传输

报告编号:11 综合课程设计报告 基于UDP协议的文件传输系统的设计与实现 学生姓名: 指导教师: 所在系:电子系 所学专业: 年级:08级电子(2)班 2011 年6 月 目录 摘要 (3) 1 实验的相关知识 (4) 1.1通信的模式 (4)

1.2 UDP协议 (4) 1.3 Winsock控件 (4) 1.3.1 Winsock控件重要属性、方法和事件 (5) 1.3.2 Winsock控件通信的工作原理 (7) 2 实验原理 (7) 3 实验步骤 (7) 3.1总体规划 (8) 3.2模块设计 (8) 3.3创建窗体 (8) 3.4程序设计 (10) 3.5系统运行 (11) 4实验结论 (12) 参考文献 (13) 基于UDP的文件传输的系统的设计与实现

摘要 该实验的任务是实现文件的传输,并且是基于UDP协议的。所有文件在该协议下可以实现发送并正确接收。此时需要了解的是UDP的数据包一次最多只能发送8K,所以我们想到通过拆包和创建窗体的方法来实现文件的传输。拆包主要是规定每个数据包的大小,然后计算具体的文件所需要的包数,创建窗体的目的是编写程序来进行分包发送和接收。通过系统运行窗体我们可以知道UDP不仅可以传送和接收小文件,还可以传输和接收较大的文件。通过实验可知UDP是不可靠的无连接传输,所以在传输过程中会发生丢包的情况,但大部分情况下传输还是比较好的。 关键词:UDP协议发送文件接收文件拆包 Winsock控件

1 实验的相关知识 1.1通信的模式 由于是实现点对点的文件传输,因此在程序中我们使用的是C/S的模式来实现通信。对于C/S的模式,即分为客户端和服务端。服务端用来接收客户端的连接,实现两端之间互相传输文件。采用C/S的模式可以更好的体现程序的功能设计思想,充分调用在LAN中的server和client两方面的处理能力,极大的减少网络上的信息流通量。C/S体系结构有可能提供一种开放式的、易伸缩扩展的分布式计算机环境,并保护硬件等投资。 1.2 UDP协议 该实验文件传输是在UDP协议下进行的,UDP提供无连接不可靠的用户数据包传输。其中每一个数据段只有8Byte相对于TCP传输开销较少,且无须对发送速率进行管理。UDP发送数据的速率仅仅受限于程序产生数据的速率,信源主机的性能及internet上可以利用的宽带。并且与TCP不同的是UDP不需要连接,可直接发送,传输数据较快,但同时其稳定性不好,易丢包。 1.3 Winsock控件 Winsock即Windows Sockets规范的简称,是目前最流行的网络通信应用程序接口之一。所谓Socket,通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄。应用程序通常通过“套接字”向网络发出请求或者应答网络请求。Socket是网络上运行的两个程序间双向通讯的一端,它既可以接受请求,也可以发送请求,利用它可以较为方便的编写网络上数据的传递。Winsock控件工作在传输层上,在这一层上,目前主要流行的协议包括TCP和UDP两种:TCP协议适用于那些对于数据的可靠性要求比较高的情况,目前大多数的网络应用层协议都是基于TCP协议的(例如常用的HTTP、FTP、SMTP、POP3等协议);UDP 协议适用于对数据可靠性要求不高而对速度要求较高的情况,这里主要包括一些需要大流量

简单UDP传输代码

//UDPcilentCEHO 文件传输客户端 #pragma comment(lib,"ws2_32.lib") #include #include #include #define MAX_BUF 65536 #define K_BUF 256 int main() { //初始化 WSAData wsaData; int err=WSAStartup(WINSOCK_VERSION,&wsaData); if(0!=err) { return -1; } SOCKET sock = socket(AF_INET, SOCK_DGRAM, 0); if(sock == INV ALID_SOCKET) { printf("socket() Failed: %d\n", WSAGetLastError()); WSACleanup(); return -1; } //char destIP[] = "10.3.120.137"; char destIP[] = "172.17.195.174"; unsigned short destPort = 20000; sockaddr_in destAddr; destAddr.sin_family = AF_INET; destAddr.sin_port = htons(destPort); destAddr.sin_addr.s_addr = inet_addr(destIP); printf("UDPclientCEHO had startup ! \n"); char data[]="Hello world ! "; int sByte; sByte = sendto(sock,data, strlen(data), 0, (sockaddr *)&destAddr, sizeof(destAddr)); if(sByte == SOCKET_ERROR) { printf("sendto() Failed: %d\n", WSAGetLastError()); closesocket(sock); WSACleanup(); getchar();

基于TCP的文件传输实验报告

综合课程设计报告 基于TCP协议的文件传输系统 学生姓名: 指导教师: 所在系: 所学专业: 年级: 2011年6月

目录 摘要 (2) 1、实验的相关知识 (3) 1.1、通信的模式 (3) 1.1.1、传输的可靠性 (3) 1.2.1、TCP/IP的网络体系结构 (3) 1.2.2、TCP/IP网络协议 (4) 1.2.3、TCP——传输控制协议 (4) 2、winsock控件 (5) 2.1.1、winsock的重要属性、方法和事件 (5) 2.1.2、winsock控件通信的工作原理 (7) 3、程序设计与实现 (8) 3.1、程序设计 (8) 3.1.1、总体设计 (8) 3.1.2、模块设计 (9) 3.2、程序实现 (10) 3.2.1、工作原理 (10) 3.2.2、服务器端主程序 (11) 3.2.3、客户端主程序 (14) 4、实验总结 (17) 参考文献...............................................................17. 成绩评定. (18)

基于TCP协议的文件传输系统 摘要 随着网络的普及,网络编程显得尤其重要。本实验使用Winsock控件实现两台计算机间的文件传输,描述了Winsock控件的使用方法及有关文件传输的算法。 随着计算机网络的迅速发展,人们的生活越来越离不开网络,如今网络编程已成为计算机发展的热点,而在众多的网络通信中,又以TCP/IP协议最为流行。本文讨论的Winsock控件,提供了访问TCP/IP网络的捷径,使用它可以不必了解TCP/IP的细节和调用Winsock API,只要设置好相应的属性和触发事件后的处理,就可以实现计算机之间的数据通信,进行文件传输了。同时为了便于传输文件过程中的中断现象,在实验时应该充分考虑断点续传问题,即中断文件传输后已经传输的文件不丢失,等到再传时,能继续接着传送。 关键词:TCP/IP协议,Winsock控件,网络编程,文件传输,断点续传。

基于局域网的文件传输系统的设计与实现--开题报告

毕业设计(论文)开题报告题目:基于局域网的文件传输系统的设计与实现 院(系)电信学院 专业通信工程 班级 姓名 学号 导师 2012年2月14 日

(四)程序流程图 (五)拟解决的关键技术 网络之间进行数据通讯时,使用地址来标识网络中的计算机,有了地址以后,数据才会准确地发送到地址所指向的计算机。TCP/IP协议使用IP地址为网络中计算机的标识,而且每台计算机的IP地址是唯一的,一般情况下,每台计算机运行的程序不止一个,因此要在应用程序中建立连接的话,还需要一个地址标识。在TCP/IP协议书中使用端口(PORT)作为计算机上运行的应用程序的标识,因此TCP/IP协议中一个有效的网络地址包括IP地址和端口地址两个部分。TCP/IP 协议提供了两种计算机之间的通讯方式:TCP方式和UDP方式。 TCP是一种面向连接的服务,在文件传输时会先行建立连接,通过链接提供双向、有序且无重复的数据流服务、以及流量控制、差错检测和纠错等服务,从而确保文件传输的正确性;UDP则是一种无连接的服务,它在传输文件时不会

(五)主要参考文献 [1] 杨沿航,即时通信系统的研究与实现,哈尔滨工程大学,2007. [2] 李阳,基于企业应用环境的即时通信系统设计与实现,华中科技大学,2007.

[3] 王鹏,基于.NET框架下即时通信系统的研究与实现,哈尔滨工程大学,2007. [4] 马丹,即时通信系统终端的设计与实现,电子科技大学,2004. [5] 顾成杰,统一通信系统客户端的设计与实现,北京交通大学,2009. [6] 高世龙,基于P2P技术实现即时通信系统的研究,2006. [7] 雷东升,网络即时通讯系统,计算机与现代化,2008年4 [8] 王磊,数字化校园中即时通信技术的研究与应用,黑龙江大学自然科学学报,2007年6 [9] 黄凯,陶宏才,即时通讯系统服务器端简要设计,成都信息工程学院学报,2006年8 [10] 关峪,基于P2P技术的即时通信系统研究与实现,北京交通大学,2007. [11] 王凯,文件共享对等网中文件传输的性能分析与设计,上海交通大学,2009

基于UDP协议网上聊天程序 课程设计

基于UDP协议网上聊天程序课程设计

湖南工业大学 课程设计 资料袋 计算机与通信学院学院(系、部)2013 ~ 2014 学年第 1 学期 课程名称网络协议分析指导教师李建设职称副教授 学生姓名专业班级网络工程学号 题目基于UDP协议网上聊天程序 成绩起止日期2013 年11 月25 日~2013 年12 月13 日 目录清单

序号材料名称资料数量备注 1 课程设计任务书 2 课程设计说明书 3 4 5 6 课程设计任务书 2013 —2014学年第1 学期 学院(系、部)计算机与通信学院专业网络工程班级102 课程名称:网络工程学生姓名: 设计题目:基于UDP协议网上聊天程序指导教师:李建设 完成期限:自2013 年11 月25 日至2013 年12 月13 日共 3 周

内容及任务一、设计内容 实现一个基于UDP协议的简单的聊天程序,包括服务器和客户端。 1.支持多人聊天。 2.客户端具有图形化用户界面。 二、设计任务 课程设计说明书(纸质+电子版),内容包括:设计内容、系统分析(包括可行性分析、需求分析等)及功能分析;系统设计(要求画出系统整体功能框图、流程图、并给出相应地关键的代码且对所使用的主要数据结构进行说明等。)、设计总结(评价/遇到的问题/体会/建议等)、使用说明等。 三、设计要求 1.按功能要求开发系统,能正确运行。程序代 码书写规范,有充足的注释。 2.课程设计所使用的编程语言任选,但建议使 用C或C++; 3.绿色软件:程序运行不需安装,避免写系统 和注册表; 进度安排 起止日期工作内容 2013-11-25~ 2013-11-30 选题 2013-12-1~2 013-12-3 系统分析和设计; 2013-12-4~2 013-12-8 熟悉软件开发工具、编码系统、 系统测试 2013-12-9~2 013-12-13 撰写并提交课程设计说明书(含 电子文档)、源程序等。

UDP文件传输的设计与实现

实训专题报告题目:UDP文件传输系的设计 实训名称: 班级: 学号: 学生姓名: 指导教师: 哈尔滨工程大学 2013年8月30日

摘要 UDP(User Datagram Protocol)协议的全称是用户数据报协议,在网络中它与TCP(Transmission Control Protocol)协议一样用于处理数据包,是一种无连接的协议。UDP有不提供数据包分组、组装和不能对数据包进行排序的缺点,也就是说,当报文发送之后,是无法得知其是否安全完整到达的。UDP用来支持那些需要在计算机之间传输数据的网络应用。包括网络视频会议系统在内的众多的客户-服务器模式的网络应用都需要使用UDP协议[1]。UDP协议从问世至今已经被使用了很多年,虽然其最初的光彩已经被一些类似协议所掩盖,但是即使是在今天UDP仍然不失为一项非常实用和可行的网络传输层协议。 本文在应用现有的C语言应用开发知识基础上,又应用了socket和多线程编程技术的有关知识。使用C语言以及标准库函数,在Windows平台上,开发基于UDP协议的文件传输系统。 对UDP文件传输系统的调试结果显示:UDP文件传输系统实现了文件在客户端和服务端之间的发送和接收,传输过程中可显示文件信息,在传输过程中可中断传输,但暂时还不能保证完全不丢包。 关键词:文件传输;socket编程技术;基本功能

当前的世界经济正在从工业经济向知识经济转变,这种以知识为基础的经济有两个重要的特点,就是信息化和全球化。而要实现信息化和全球化,就必须依靠完善的网络。计算机网络是核心,而信息的交流又是计算机网络中非常重要的部分,因此UDP协议就占了很大比重。由于UDP不属于连接型协议,因而具有资源消耗小,处理速度快的优点,所以通常音频、视频和普通数据在传送时使用UDP较多,比如我们聊天用的QQ 所使用的就是UDP协议。 虽然UDP是一个不可靠的协议,但它是分发信息的一个理想协议。UDP广泛应用在多媒体应用中,例如Progressive Networks公司开发的RealAudio软件,该软件所使用的协议就是基于UDP之上的协议,大多数因特网电话软件产品也都是基于UDP协议的。 基于以上分析,本文要涉及的UDP文件传输系统设计是一个具备基本功能的嵌入式系统。 1需求分析与系统总体设计 1.1需求分析 基于UDP文件传输系统应包含以下功能:在服务端和客户端实现基本的文件传输;在文件传输过程中显示文件的信息;在文件传输过程中可以取消文件传输过程。具体目标如下: (1)在客户端主机上能读取一个txt文件与服务端主机进行传输。 (2)在传输过程中能显示文件信息,如文件名、保存路径、文件大小、传输进度等。 (3)传输过程中可以选择中断文件传输过程。 (4)本程序中要保证文件在传输的过程中实现完整传输,即不丢包。 (5)界面尽量简洁大方,程序运行时不要出现异常。本章主要讨论了系统的需求分析,从用户角度分析系统整体要实现的功能。 需求分析表如表1.1所示。 1.2 系统总体设计 本软件是为了使文件传输变得更加方便、快捷和安全,所以设计难点是在传输控制方面,对于本软件来说,用户界面设计则不是那么重要。

通信软件实验报告基于UDP文件传输程序设计与实现

基于UDP的文件传输程序设计与实现(服务端) 一、程序设计思路 1.UDP(User Datagram Protocol,用户数据报协议)简介 UDP为无连接的通信协议,其主要目的在于处理传输少量的数据。与TCP 不同的是,UDP在传输数据之前不需要建立通信链接。仅须设置计算机间的IP 及使用相同的端口,即可互相传输信息,因此UDP只提供单向的数据传输,如图1.1所示: 图1.1 UDP通信协议 由于UDP不须先建立连接,这样节省了TCP建立连接所需的时间,因此适合于在主机间做单向的数据传输。但UDP不提供数据错误的侦测以及数据重送等功能,因此并不确保数据能完整发送。 2.java实现UDP程序思路 UDP程序使用数据报的形式出现,需要使用以下两个类。 ●数据报的内容:DatagramPacket。 ●发送和接收数据报:DatagramSocket。 在开发TCP程序的时候,是先有服务端,之后再进行客户端的开发。而UDP 要运行的时候,则应该先运行客户端,之后再运行服务端。 在运行UDP程序的时候先运行客户端,阻塞等待服务端发过来的信息,服务端开启后,向目标端发送信息之后便关闭了服务端,并不阻塞等待客户端的响应。 二、实现关键技术点 1.服务端界面布局 服务端界面使用的是边框布局管理器,边框布局管理器是每个JFrame的内容窗格的默认布局管理器。流布局管理器完全控制每个组件的放置位置,边框布局管理器则不然,它允许为每个组件选择一个放置位置。可以选择把组件放在内

容窗格的中部、北部、南部、东部或者西部。一般来讲是先放置边缘组件,剩余的可用空间由中间组件占据。当容器缩放时,边缘组件的尺寸不会改变,而中部组件的大小会发生变化。在添加组件时可以指定BorderLayout类中的CENTER、NORTH、SOUTH、EAST和WEST常量。图2.1给出了服务器的界面布局: 图2.1 UDP文件传输系统界面布局 2.文件选择器 Swing中提供了J类,它可以显示一个文件对话框,其外观与本地应用程序中使用的文件的对话框基本一样。J是一个模式对话框。接收文件的按钮被自动地标签为Open或者Save。图2.2为文件选择器运行在UDP程序上的截图。

相关文档
最新文档