BufferedWriter仅在第一次工作

时间:2011-11-28 05:31:04

标签: java

我有一个简单的服务器 - 客户端程序,它从客户端获取信息并将其传递给服务器。消息通过DatagramSocket传递。然后,服务器接收消息并将其写入文本文件。

我的初始消息正常工作(打印到文件)。但是,如果我再次运行客户端,则新消息不会写入文件。我必须重新启动服务器以便再次打印消息。

我有一个arrayCopy方法,它复制两个数组并将它放入一个更大的数组中。

客户端

public static void main(String[] args) throws IOException {
    System.out.println("Enter Username");
    BufferedReader usernameInput = new BufferedReader(new InputStreamReader(System.in));

    // Get the Username
    String username = directoryInput.readLine();
    byte[] usrname = username.getBytes();

    //Copy Username to Array
    byte[] tempArray = copyarray(packetheader, usrname);

    buffer = tempArray;
    mypacket = new DatagramPacket(buffer, buffer.length, IPaddr, 40000);
    clientSocket = new DatagramSocket();
    clientSocket.send(mypacket);

服务器

public static void main(String args[]) throws Exception {
    String Database;
    textfile = "C:\\textfile.txt";
    DatagramSocket serverSock = new DatagramSocket(40000);

    byte[] rbuf = new byte[97];

    DatagramPacket recievedPacket = new DatagramPacket(rbuf, rbuf.length);
    serverSock.receive(recievedPacket);
    String byteToString = new String(recievedPacket.getData(), 0, recievedPacket.getLength(), "US- ASCII");
    FileWriter fstream = new FileWriter(textfile);
    BufferedWriter out = new BufferedWriter(fstream);
    out.write(byteToString);
    out.close
}

1 个答案:

答案 0 :(得分:0)

以下应该做你想要的,你需要的是一个允许你阅读下一个包的循环,以及下一个包等。

public static void main(String args[]) throws Exception {
    String textfile = "C:\\textfile.txt";
    DatagramSocket serverSock = new DatagramSocket(40000);

    byte[] rbuf = new byte[97];

    DatagramPacket recievedPacket = new DatagramPacket(rbuf, rbuf.length);

    while(true) {
        serverSock.receive(recievedPacket);
        String byteToString = new String(recievedPacket.getData(), 0, recievedPacket.getLength(), "US-ASCII");
        FileWriter fstream = new FileWriter(textfile);
        BufferedWriter out = new BufferedWriter(fstream);
        out.write(byteToString);
        out.close();
        recievedPacket.setLength(rbuf.length);
    }
}

但是,这将使用新消息覆盖该文件,而不是附加它们(如果这是您想要的)。如果要存储所有消息,可能需要将文件创建移出循环。