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

解决方案 »

  1.   

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

  2.   

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

  3.   

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

  4.   

    要实现可靠的udp信息发送可以这样处理
    1将你要发送的数据以500个字节进行分包。
    2在每个包的头部加上序列号,这样每个字节包在512个字节范围内。
    3服务器接收到这种按序列分割的包后按照序列组装起来,如果其中有哪个序列丢失再要求客户重新发送。不过正如 telenths(_非法操作_)所说的,这样比较象tcp连接了,同时你的编码量比较大
      

  5.   

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

  6.   

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

  7.   

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

  8.   

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

  9.   

    你可以把你的数据在应用层进行打包吗!打包方式可以参考TCP这样做好像对处理性能的要求要很高诶!!速度会很慢!!!
      

  10.   

    一个例子 先执行 Server 在执行 Client
    //UDPServer.javaimport 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.javaimport 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){}   }}
      

  11.   

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