黑马程序员技术交流社区

标题: UDP 循环 [打印本页]

作者: 霍振鹏    时间: 2014-3-26 13:51
标题: UDP 循环
在看毕老师的UDP传输时,遇到点问题,,,就是在接收端怎么用循环来处理 ,,,,,求教了 ,,谢谢大

家,(就是说我在发送端要发送100M的数据,我在接受端肯定是预先不知道大小的,我怎么在接收端利用循环成功接收)
  1. import java.io.FileInputStream;
  2. import java.io.InputStream;
  3. import java.net.DatagramPacket;
  4. import java.net.DatagramSocket;
  5. import java.net.InetAddress;
  6. import java.net.SocketException;


  7. public class UDPSend {

  8.         /**
  9.          * @param args
  10.          * @throws Exception
  11.          */
  12.         public static void main(String[] args) throws Exception {
  13.                 // TODO Auto-generated method stub
  14.                 DatagramSocket ds=new DatagramSocket();
  15.                 //String str="UDP 演示";
  16.                 StringBuilder sb=new StringBuilder();
  17.                 InputStream is=new FileInputStream("a.txt");
  18.                 int a=-1;
  19.                 while((a=is.read())!=-1)
  20.                 {
  21.                         sb.append((char)a);
  22.                 }
  23.                 byte[] buf=sb.toString().getBytes();
  24.                 DatagramPacket dp=new DatagramPacket(buf,buf.length,InetAddress.getByName("127.0.0.1"),10000);
  25.                 ds.send(dp);
  26.                 ds.close();
  27.                

  28.         }

  29. }
  30. [code]import java.io.FileOutputStream;
  31. import java.io.OutputStream;
  32. import java.net.DatagramPacket;
  33. import java.net.DatagramSocket;
  34. import java.net.SocketException;


  35. public class UDPReceiver {

  36.         /**
  37.          * @param args
  38.          * @throws Exception
  39.          */
  40.         public static void main(String[] args) throws Exception {
  41.                 // TODO Auto-generated method stub
  42.                 DatagramSocket ds=new DatagramSocket(10000);
  43.                 byte[] buf=new byte[1024];//如果我要给接受端传个100M的数据,我总不能new100M的数组吧,怎么用循环解决
  44.                 DatagramPacket dp=new DatagramPacket(buf,buf.length);
  45.                 ds.receive(dp);
  46.                 //String ip=dp.getAddress().getHostAddress();
  47.                 //int  prot=dp.getPort();
  48.                 String text=new String(dp.getData(),0,dp.getLength());
  49.                 //System.out.println(ip+prot+text);
  50.                 OutputStream os=new FileOutputStream("b.txt");
  51.                 os.write(text.getBytes());
  52.                
  53.                 ds.close();

  54.         }

  55. }
复制代码
[/code]
作者: 霍振鹏    时间: 2014-3-26 16:05
caijunsong 发表于 2014-3-26 15:35

谢谢 太没太理解你写的东西
作者: 龙健    时间: 2014-3-26 21:32
没运行,楼主自己运行一下
  1.   import java.io.*;
  2.       public class Demo1 {

  3.               import java.io.FileInputStream;
  4.               import java.io.InputStream;
  5.               import java.net.DatagramPacket;
  6.               import java.net.DatagramSocket;
  7.               import java.net.InetAddress;
  8.               import java.net.SocketException;


  9.               public class UDPSend {

  10.                       /**
  11.                        * @param args
  12.                        * @throws Exception
  13.                        */
  14.                       public static void main(String[] args) throws Exception {
  15.                               // TODO Auto-generated method stub
  16.                               DatagramSocket ds=new DatagramSocket();
  17.                               //String str="UDP 演示";
  18.                               StringBuilder sb=new StringBuilder();
  19.                               InputStream is=new FileInputStream("a.txt");
  20.                               int a=-1;
  21.                               while((a=is.read())!=-1)
  22.                               {
  23.                                       sb.append((char)a);
  24.                               }
  25.                               byte[] buf=sb.toString().getBytes();
  26.                               DatagramPacket dp=new DatagramPacket(buf,buf.length,InetAddress.getByName("127.0.0.1"),10000);
  27.                               ds.send(dp);
  28.                               ds.close();
  29.                              

  30.                       }

  31.               }
  32.               [code]import java.io.FileOutputStream;
  33.               import java.io.OutputStream;
  34.               import java.net.DatagramPacket;
  35.               import java.net.DatagramSocket;
  36.               import java.net.SocketException;


  37.               public class UDPReceiver {

  38.                       /**
  39.                        * @param args
  40.                        * @throws Exception
  41.                        */
  42.                       public static void main(String[] args) throws Exception {
  43.                               // TODO Auto-generated method stub
  44.                               DatagramSocket ds=new DatagramSocket(10000);
  45.                               byte[] buf=new byte[1024*64];//如果我要给接受端传个100M的数据,我总不能new100M的数组吧,怎么用循环解决
  46.                               DatagramPacket dp=new DatagramPacket(buf,buf.length);
  47.                               while(true)  //将缓冲区该为可以封包的最大限度64k,循环,一直接受来自客户端的数据
  48.                               {          
  49.                               ds.receive(dp);
  50.                               //String ip=dp.getAddress().getHostAddress();
  51.                               //int  prot=dp.getPort();
  52.                               String text=new String(dp.getData(),0,dp.getLength());
  53.                               //System.out.println(ip+prot+text);
  54.                               OutputStream os=new FileOutputStream("b.txt");
  55.                               os.write(text.getBytes());
  56.                               }
  57.                               ds.close();

  58.                       }

  59.               }





复制代码

作者: 霍振鹏    时间: 2014-3-26 22:45
龙健 发表于 2014-3-26 21:32
没运行,楼主自己运行一下

多谢了   。。。。。。。。。。但还是不行,,,我觉得一次如果读不过来,数据已经丢失了
作者: 霍振鹏    时间: 2014-3-28 15:49
打架帮帮忙呗  有没有解决办法




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2