我有一个简单的服务器 - 客户端程序,它从客户端获取信息并将其传递给服务器。消息通过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
}
答案 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);
}
}
但是,这将使用新消息覆盖该文件,而不是附加它们(如果这是您想要的)。如果要存储所有消息,可能需要将文件创建移出循环。