A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 霍振鹏 中级黑马   /  2014-3-26 13:51  /  1299 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

在看毕老师的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]

评分

参与人数 1技术分 +1 收起 理由
枫儿 + 1 神马都是浮云

查看全部评分

5 个回复

倒序浏览

谢谢 太没太理解你写的东西
回复 使用道具 举报
没运行,楼主自己运行一下
  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.               }





复制代码

评分

参与人数 1技术分 +1 收起 理由
itpower + 1

查看全部评分

回复 使用道具 举报
龙健 发表于 2014-3-26 21:32
没运行,楼主自己运行一下

多谢了   。。。。。。。。。。但还是不行,,,我觉得一次如果读不过来,数据已经丢失了
回复 使用道具 举报
打架帮帮忙呗  有没有解决办法
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马