5

我设置了服务器和客户端,这基本上是一个基本的文本电子邮件系统。我目前正在使用 PrintWriter 在服务器和客户端之间发送文本。我正在尝试创建一个基于附件的系统,为此我使用了 ObjectOutputStream。

private static PrintWriter output;
private static ObjectOutputStream outStream;

public ClientHandler(Socket socket) throws IOException
{
    client = socket;
    outStream = new ObjectOutputStream(client.getOutputStream());
    input = new Scanner(client.getInputStream());
    output = new PrintWriter(client.getOutputStream(), true);
}

我目前遇到的问题是,如果我尝试通过输出打印机发送文本,由于某种原因,额外的字符将被添加到发送的文本的开头,这意味着程序无法识别通过打印机传递给客户端的关键字。如果我注释掉 outStream 对象的创建,问题就会停止。

谁能给我任何建议来尝试解决这个冲突问题?

4

3 回答 3

4

这个额外的文本来自对象输出流。

将 ObjectOutputStream 和 PrintStream 附加到同一个输出流基本上是行不通的。你必须想出一个使用 1 或其他的解决方案。要仅使用 PrintStream,您可能会考虑将您的对象转换为 JSON 或 XML。另一方面,您可以只使用 ObjectOutputStream 并将您的字符串写入 ObjectOutputStream

于 2012-04-11T20:36:04.737 回答
0

扩展您的 ClientHandler 并覆盖构造函数以包含处理文件传输的代码。打开两个端口,一个用于文本,另一个用于文件传输。

private static PrintWriter output;

public ClientHandler(Socket socket) throws IOException
{
    client = socket;
    input = new Scanner(client.getInputStream());
    output = new PrintWriter(client.getOutputStream(), true);
}

private static ObjectOutputStream outStream;

public ClientFileHandler(Socket socket) extends ClientHandler throws IOException
{
    client = socket;
    outStream = new ObjectOutputStream(client.getOutputStream());

}
于 2012-04-11T20:46:22.553 回答
0

ObjectOutputStream只能用作ObjectOutputStream该频道上的一个。PrintWriter如果您确实需要,请在另一个插座上使用。

于 2012-04-11T20:35:42.530 回答