我有一个使用套接字的客户机/服务器应用程序,客户机在其中逐行输入文本。在服务器端,我希望一个线程一次接收一行文本,而第二个线程应将同一行写入文件。这一直持续到客户端停止。我的服务器正在接收文本行,但第二个线程未将其写入文件。
以下是接收文本的服务器线程代码。
public class EchoServer extends Thread {
public static String line = "none";
public EchoServer(int portnum) {
try {
server = new ServerSocket(portnum);
} catch (Exception err) {
System.out.println(err);
}
}
public void run() {
try {
while (true) {
Socket client = server.accept();
BufferedReader r = new BufferedReader(
new InputStreamReader(client.getInputStream()));
PrintWriter w = new PrintWriter(client.getOutputStream(),
true);
// w.println("Welcome to the Java EchoServer. Type 'bye' to close.");
while ((line = r.readLine()) != null) {
// read from Cleint
if (line != null) {
// p.destroy();
System.out.println(line);
// sleep(2000);
}
Thread.yield();
}
client.close();
}
} catch (Exception err) {
System.err.println(err);
}
}
private ServerSocket server;
}
以下是写入文件的线程
public class paste extends Thread {
// To create producer and consumer as threads
// Shared variable
public static int x = 0; // Maximum Limit to simulate a buffer
public String l;
public static int j = 1;
public void run() {
System.out.println("n");
if (EchoServer.line != "none") {
String fileName = "c:/sys prg lab/salfar1.txt";
try {
// Assume default encoding.
FileWriter fileWriter = new FileWriter(fileName, true);
// Always wrap FileWriter in BufferedWriter.
BufferedWriter bufferedWriter = new BufferedWriter(
fileWriter);
// Note that write() does not automatically
// append a newline character.
bufferedWriter.write(EchoServer.line);
bufferedWriter.newLine();
System.out.println("y");
EchoServer.line = "none";
// Always close files.
bufferedWriter.close();
} catch (IOException ex) {
System.out.println("Error writing to file '" + fileName
+ "'");
// Or we could just do this:
// ex.printStackTrace();
}
Thread.yield();
}
}
}
以下是主要功能
public class execute {
public static void main(String[] args) {
EchoServer s = new EchoServer(9999);
paste p = new paste();
s.start();
p.start();
}
}
在我看来,您的第二个线程运行一次然后退出,因此,当您的服务器接收到文本时,writer线程已经返回。尝试使用while(true)
与在服务器线程中相同的方法。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句