热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

急急急:各位务必要帮这个忙,分数不是问题!!!

小弟近来需要做一个基于UDP的“可靠性数据传输”程序,也就是通过在应用层添加相应机制和约束实现利用TCP才能实现的可靠数据传输。只需要在应用层有相应的诸如通讯握手,错误重发,超时重发等等和可靠数据传输
小弟近来需要做一个基于UDP的“可靠性数据传输”程序,也就是通过在应用层添加相应机制和约束实现利用TCP才能实现的可靠数据传输。只需要在应用层有相应的诸如通讯握手,错误重发,超时重发等等和可靠数据传输相关的TCP特性便可(可不考虑拥塞控制,流量控制等额外功能),实现的也就是个模拟;可做成一个客户/服务器端的模式,只是传输层要求建立在UDP基础上,实现可靠性通信便行了,没有其他什么界面要求。各位java语言高手望能帮小弟一把,借此也可以熟悉java的socket网络编程嘛!要是有什么不明白的地方可以提出来,我会马上回复,至于需要分数嘛,这不是问题呀!在这里,小弟先谢谢各位大哥哥大姐姐了……

21 个解决方案

#1


帮顶顺便学习!:)

#2


俺也不懂,也来学习!:-)

#3


帮你up  一定给分啊!

#4


看看TCP协议如何实现的

#5


我有一点不明白。数据要到达应用层一定要先经过其他的六层才行。你这个程序的要求是为了什么目的呢?有什么实际的意义?

#6


bluesmile979(笑着)
  TCP/IP 只有四层的

#7


不过假如你真的实现了
>在应用层有相应的诸如通讯握手,错误重发,超时重发等等和可靠数据传输相关的TCP特性
这和 TCP 本身又有什么区别呢?
只不过是在不同的地方实现罢了

#8


实际上tcp/ip和OSI协议中其中一点不同就是tcp/ip协议网络层是不可靠的,没有实现面向连接的可靠传输,可靠传输是使用在传输层的tcp协议,现在楼主想用udp协议实现传输在应用层进行可靠性控制,对程序来说增加了处理的工作量,但也增加了程序灵活性(当然也要看程序中是否需要使用这种灵活性).

#9


实时系统为考虑实时性,经常用UDP协议

#10


要实现可靠的udp信息发送可以这样处理
1将你要发送的数据以500个字节进行分包。
2在每个包的头部加上序列号,这样每个字节包在512个字节范围内。
3服务器接收到这种按序列分割的包后按照序列组装起来,如果其中有哪个序列丢失再要求客户重新发送。

不过正如 telenths(_非法操作_)所说的,这样比较象tcp连接了,同时你的编码量比较大

#11


谢谢各位的支持,我只是想实现通过UDP的可靠传输;换句话说就是通过在应用层建立相应的需要TCP才能实现的功能!不知哪位高手愿意拿出一个源码,我们大家都好好学习学习啊!这样也可以对网络的层次结构有更清晰的认识!谢谢以上的各位热心朋友啊

#12


一起学习吧

#13


一起学习

#14


我想基本的手段就是超时重发吧,还有就是接收端反馈ACK,吧,但是超时的时间是多少,定义ACK 倒是蛮麻烦的呢..学习啊

#15


还是感觉没什么实际的意义

TO非法:哦,没注意,把OSI参考模型写上去了。THX:)  不过意思差不多啦,我还是习惯7层的分法。

#16


不懂

#17


up

#18


我想其实你就要对那个dataprampacket那个对数据打包的类进行扩展(如数据包的序号)...然后客户和服务器端建立一个通讯机制(规则)

#19


你可以把你的数据在应用层进行打包吗!打包方式可以参考TCP

这样做好像对处理性能的要求要很高诶!!速度会很慢!!!

#20


一个例子 先执行 Server 在执行 Client
//UDPServer.java

import java.net.*;

public class UDPServer{

   public static void main(String args[]){
     UDPServer UDP = new UDPServer();
     UDP.receive();
   }

   public void receive(){
 try{ //{接收数据的服务器}
 byte[] buf = new byte[1000];
 DatagramSocket ds = new DatagramSocket(12345); //开始监视12345端口
 DatagramPacket ip = new DatagramPacket(buf, buf.length); //创建接收数据报的实例

 while (true) {
   ds.receive(ip); //阻塞,直到收到数据报后将数据装入IP中
   System.out.println(new String(buf));
 }
 }catch(Exception e){}
   }

}
//=======================================================
// UDPClient.java

import java.net.*;

public class UDPClient{

   public static void main(String args[]){
     UDPClient UDP = new UDPClient();

     UDP.send();
   }

   public void send(){
  try{  //{发送数据的客户端}
    InetAddress target = InetAddress.getByName("localhost");//得到目标机器的地址实例
    DatagramSocket ds = new DatagramSocket(9999);//从9999端口发送数据报
    String hello = "Hello, I am come in!";//要发送的数据
    byte[] buf = hello.getBytes();//将数据转换成Byte类型
    DatagramPacket op = new DatagramPacket(buf, buf.length, target, 12345);//将BUF缓冲区中的数据打包
    ds.send(op);//发送数据
    ds.close();//关闭连接
  }catch(Exception e){}

   }

}

#21


我看了你-telenths(_非法操作_)的回贴,真的是非常感谢,但这仅仅是利用了UDP作为网络层的协议并不能保证实现的是TCP功能。在应用层并没有加入任何弥补UDP不足的功能呀;只是简单的实现了通过UDP进行主机/客户端的通信所以,虽然它完全是可以运行的,但在特定的网络拥塞或传输错误情况下,并不能保证主机和客户端进行正确的通信,还望兄弟在应用层面上加入诸如重发,计时等功能才行啊。模型就可以象这样,只是需要再加入相应的补充功能实现可靠传输!感谢你的帮忙,真的很感谢!望能尽快收到改进的版本这周末就要上交了呀!

推荐阅读
  • 本文详细解析了客户端与服务器之间的交互过程,重点介绍了Socket通信机制。IP地址由32位的4个8位二进制数组成,分为网络地址和主机地址两部分。通过使用 `ipconfig /all` 命令,用户可以查看详细的IP配置信息。此外,文章还介绍了如何使用 `ping` 命令测试网络连通性,例如 `ping 127.0.0.1` 可以检测本机网络是否正常。这些技术细节对于理解网络通信的基本原理具有重要意义。 ... [详细]
  • Java Socket 关键参数详解与优化建议
    Java Socket 的 API 虽然被广泛使用,但其关键参数的用途却鲜为人知。本文详细解析了 Java Socket 中的重要参数,如 backlog 参数,它用于控制服务器等待连接请求的队列长度。此外,还探讨了其他参数如 SO_TIMEOUT、SO_REUSEADDR 等的配置方法及其对性能的影响,并提供了优化建议,帮助开发者提升网络通信的稳定性和效率。 ... [详细]
  • 本文详细介绍了如何在 Linux 系统上安装 JDK 1.8、MySQL 和 Redis,并提供了相应的环境配置和验证步骤。 ... [详细]
  • 本文详细介绍了Java反射机制的基本概念、获取Class对象的方法、反射的主要功能及其在实际开发中的应用。通过具体示例,帮助读者更好地理解和使用Java反射。 ... [详细]
  • Java高并发与多线程(二):线程的实现方式详解
    本文将深入探讨Java中线程的三种主要实现方式,包括继承Thread类、实现Runnable接口和实现Callable接口,并分析它们之间的异同及其应用场景。 ... [详细]
  • 在JavaWeb开发中,文件上传是一个常见的需求。无论是通过表单还是其他方式上传文件,都必须使用POST请求。前端部分通常采用HTML表单来实现文件选择和提交功能。后端则利用Apache Commons FileUpload库来处理上传的文件,该库提供了强大的文件解析和存储能力,能够高效地处理各种文件类型。此外,为了提高系统的安全性和稳定性,还需要对上传文件的大小、格式等进行严格的校验和限制。 ... [详细]
  • 本文详细介绍了Java代码分层的基本概念和常见分层模式,特别是MVC模式。同时探讨了不同项目需求下的分层策略,帮助读者更好地理解和应用Java分层思想。 ... [详细]
  • Spring Boot 中配置全局文件上传路径并实现文件上传功能
    本文介绍如何在 Spring Boot 项目中配置全局文件上传路径,并通过读取配置项实现文件上传功能。通过这种方式,可以更好地管理和维护文件路径。 ... [详细]
  • 本文详细介绍了如何使用OpenSSL自建CA证书的步骤,包括准备工作、生成CA证书、生成服务器待签证书以及证书签名等过程。 ... [详细]
  • 本文详细介绍了在 Ubuntu 系统上搭建 Hadoop 集群时遇到的 SSH 密钥认证问题及其解决方案。通过本文,读者可以了解如何在多台虚拟机之间实现无密码 SSH 登录,从而顺利启动 Hadoop 集群。 ... [详细]
  • 零拷贝技术是提高I/O性能的重要手段,常用于Java NIO、Netty、Kafka等框架中。本文将详细解析零拷贝技术的原理及其应用。 ... [详细]
  • 解决Bootstrap DataTable Ajax请求重复问题
    在最近的一个项目中,我们使用了JQuery DataTable进行数据展示,虽然使用起来非常方便,但在测试过程中发现了一个问题:当查询条件改变时,有时查询结果的数据不正确。通过FireBug调试发现,点击搜索按钮时,会发送两次Ajax请求,一次是原条件的请求,一次是新条件的请求。 ... [详细]
  • 如何在Java中使用DButils类
    这期内容当中小编将会给大家带来有关如何在Java中使用DButils类,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。D ... [详细]
  • 基于Net Core 3.0与Web API的前后端分离开发:Vue.js在前端的应用
    本文介绍了如何使用Net Core 3.0和Web API进行前后端分离开发,并重点探讨了Vue.js在前端的应用。后端采用MySQL数据库和EF Core框架进行数据操作,开发环境为Windows 10和Visual Studio 2019,MySQL服务器版本为8.0.16。文章详细描述了API项目的创建过程、启动步骤以及必要的插件安装,为开发者提供了一套完整的开发指南。 ... [详细]
  • 本文介绍了如何利用Struts1框架构建一个简易的四则运算计算器。通过采用DispatchAction来处理不同类型的计算请求,并使用动态Form来优化开发流程,确保代码的简洁性和可维护性。同时,系统提供了用户友好的错误提示,以增强用户体验。 ... [详细]
author-avatar
Yunir_944
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有