将 UDP 套接字数据保存到文件中

Posted

技术标签:

【中文标题】将 UDP 套接字数据保存到文件中【英文标题】:save UDP socket data into file 【发布时间】:2012-05-03 13:21:31 【问题描述】:

我有一个发送和接收 UDP 套接字的代码

发送UDP代码:

public static void main(String args[]) throws Exception


    try
      
          FileOutputStream fo = new FileOutputStream("OUTFILE.txt");
          PrintStream ps = new PrintStream(fo);  
          DatagramSocket Socket = new DatagramSocket(4555);
          byte[] receiveData = new byte[1000000];    
          DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);

          while(true)
           

               receivePacket.setLength(receiveData.length);
               Socket.receive(receivePacket);

                String sentence = new String( receivePacket.getData());


                System.out.printf("RECEIVED: %s  " , new String(receivePacket.getData()));
                ps.println(sentence);
                ps.println();
                ps.close();
                fo.close();

         

          File file = new File("OUTFILE.txt");
          FileInputStream fis = new FileInputStream(file);
          byte[] fsize = new byte[(int) file.length()];
          int size = fis.read(fsize);
          System.out.println("Received Size = " + size);


       
        catch (Exception e) 
          System.err.println(e);
        




我想将每个接收到的数据包的值写入文件,然后获取整个文件的大小。 在我的代码中,我刚刚收到了写入文件中的第一个接收值。 您能告诉我如何将收到的整个值写入文件中。

【问题讨论】:

【参考方案1】:

在第一个循环结束时,您将关闭流,因此无法写入其他行。您需要将 ps.close();fs.close() 调用移到循环之外。此外,你有一个无限循环,它保证从文件中读取的代码不能被调用——你需要有一些机制来确定何时停止循环。

【讨论】:

谢谢 Nate,但将 .close() 移到循环外不起作用。我尝试了这种条件来停止循环 if (receivePacket.getLength()==0) break;但它不会停止循环 这不是打破循环的有效方法。阅读 DatagramSocket.receive() 的 JavaDoc:“此方法阻塞,直到接收到数据报。数据报包对象的长度字段包含接收到的消息的长度。” Nate 能否请您给我一个提示,我该如何停止循环??

以上是关于将 UDP 套接字数据保存到文件中的主要内容,如果未能解决你的问题,请参考以下文章

UDP和Socket通信步骤

通用 Windows 上的 UDP 套接字未接收数据

C# 框架中的 UDP 数据报套接字(来自 UWP 的端口)

在 Go 中写入客户端 UDP 套接字

Python学习之——Socket套接字(UDP连接)

如何在 iOS swift 中使用 UDP 套接字流式传输音频?