黑马程序员技术交流社区

标题: 关于UDP网络编程的问题。 [打印本页]

作者: 马林贺    时间: 2012-8-8 20:36
标题: 关于UDP网络编程的问题。
自己写了一段代码,实现的功能是,从发送端指定一个文件,在接收端实现控制台输出,为什么每次输出的结果都不完整,请高手解释。
     

   发送端代码:
  1. class UDPDemo {
  2. public static void main(String [] agre)throws Exception{
  3. while(true){
  4. System.out.println("请输入你要发送的文件地址");
  5. BufferedReader bf=new BufferedReader(new InputStreamReader(System.in));
  6. String uil=bf.readLine();
  7. FileInputStream fiin=new FileInputStream(uil);
  8. byte []fiby=new byte[1024];
  9. int len=-1;
  10. DatagramSocket ds=new DatagramSocket();
  11. while((len=fiin.read(fiby))!=-1){
  12. System.out.println(len);
  13. DatagramPacket dp =new DatagramPacket(fiby,1024,InetAddress.getByName("192.168.0.101"),1055);
  14. ds.send(dp);

  15. }}
  16. }
  17. }
复制代码
接收端代码:
  1. class UdpReceive
  2. {

  3. public static void main(String[] args) throws SocketException
  4. {
  5. DatagramPacket packet = null;
  6. DatagramSocket socket = null;
  7. byte[] recvBuf = new byte[1024];
  8. int port = 1055;

  9. socket = new DatagramSocket(port);
  10. System.out.println("WATING FOR MSG...");
  11. while(true){
  12. packet = new DatagramPacket(recvBuf, recvBuf.length);
  13. while (packet.getData().length != 0)
  14. {
  15. try
  16. {
  17. socket.receive(packet);
  18. }
  19. catch (IOException e)
  20. {
  21. e.printStackTrace();
  22. }
  23. String recvstr = new String(recvBuf, 0, packet.getLength());
  24. String sourceIp = packet.getAddress().getHostAddress();
  25. System.out.println("从设备: " + sourceIp + " 接受到原始报文: " + recvstr);

  26. }
  27. } }
  28. }
复制代码


作者: 马林贺    时间: 2012-8-8 20:59
有没有人帮忙解决下。
作者: 刘圣伟    时间: 2012-8-8 21:48
本帖最后由 刘圣伟 于 2012-8-8 21:52 编辑

27.System.out.println("从设备: " + sourceIp + " 接受到原始报文: " + recvstr);
你输出的是一个 字节数组啊,这个字节数组你才定义了多大?
在上面 08.byte[] recvBuf = new byte[1024];
才这么大,应该不够吧?
你看下,文件有多大,文件里面的要死小的话,应该可以的!
视频上面例子程序是

String data =new String (dp.getData(),0,dp.getLength());

dp是发送过来的数据包!

你这个程序的作用,应该是,用网络来传送文件,文件一般都挺大的,
只用一个BUFF,应该不够吧!
作者: 刘圣伟    时间: 2012-8-8 21:48
本帖最后由 刘圣伟 于 2012-8-8 21:55 编辑

27.System.out.println("从设备: " + sourceIp + " 接受到原始报文: " + recvstr);
你输出的是一个 字节数组啊,这个字节数组你才定义了多大?
在上面 08.byte[] recvBuf = new byte[1024];
才这么大,应该不够吧?
你看下,文件有多大,文件里面的要小的话,应该可以的!
视频上面例子程序是

String data =new String (dp.getData(),0,dp.getLength());

dp是发送过来的数据包!

作者: 马林贺    时间: 2012-8-9 12:22
刘圣伟 发表于 2012-8-8 21:48
27.System.out.println("从设备: " + sourceIp + " 接受到原始报文: " + recvstr);
你输出的是一个 字节数 ...

  已经通过循环输出了啊。
作者: 马林贺    时间: 2012-8-9 13:26
   木有人解决。。。




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