我写了一个简单的关于在客户端和服务器之间发送/接收消息的套接字教程。我使用DataOutputStream在流中写入字符串,但是如果我使用BufferedReader,服务器无法读取它
如果我使用PrintWriter来写(客户端),它可以工作。
这里怎么了?非常感谢。
1.客户:
client = new Socket("localhost", 1982);
DataOutputStream opStr = new DataOutputStream(client.getOutputStream());
//pw = new PrintWriter(client.getOutputStream(), true);
//pw.println("Hello, is there anybody out there?");// Can be read by BufferedReader
opStr.writeUTF("Hello, anyone there?");
opStr.flush();// BufferedReader can't read it
2.服务器:
openServer();// port 1982
while(true) {
Socket clientSocket = null;
// listen to connection.
clientSocket = echoServer.accept();
DataInputStream inStr = new DataInputStream(
clientSocket.getInputStream());
//System.out.println("M1: Got msg " + inStr.readUTF());// It showed the content
BufferedReader bfReader = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
System.out.println("got Messages: ");
String strLine = "";
// Don't show anything
while ((strLine = bfReader.readLine()) != null) {
System.out.println(strLine);
}
}
您希望将文件读取为文本(例如 BufferedReader )或二进制文件(例如 DataInputStream)。所以你不能同时使用两者。
public class Server
{
public static void main(String[] args)
{
DataInputStream inStr = null;
String str;
openServer();// port 1982
while(true)
{
Socket clientSocket = null;
// listen to connection.
clientSocket = echoServer.accept();
try
{
inStr = new DataInputStream(clientSocket.getInputStream());
str = inStr.readUTF();
System.out.print((String) str);
System.out.flush();
}
catch (IOException io)
{
System.err.println("I/O error occurred: " + io);
}
catch (Throwable anything)
{
System.err.println("Exception caught !: " + anything);
}
finally
{
if (inStr != null)
{
try
{
inStr.close();
}
catch (IOException io)
{
System.err.println("I/O error occurred: " + io);
}
}
}
}
}
}
你不能。如果在一端使用< code>writeUTF(),则必须在另一端使用< code>readUTF()。
您只需要决定要使用哪个API,而不是尝试混合和匹配它们。
我已经在互联网上闲逛了很长一段时间,我想知道如何在不打开不同端口的情况下一起使用BufferedReader和DataInputStream。我尝试过流式图像,但由于缓冲读取器存储了额外的字节,它创建了一个损坏的图像。当我尝试使用datainputstream.read()时,我无法轻松地读取整行文本。我的问题有什么解决办法吗?
我试图创建一个简单的java服务器应用程序,但我很难用BufferedReader正确读取用户的输入。问题是行delimeter仅为CR LF(“\r\n”),因此我不能使用readLine()标准方法。因此,我尝试实现我自己的方法: 现在,当我尝试获取并打印结果时: ...它只将字符序列打印到第一个换行符(“\r”或“\n”),其余输入由第二次调用readCRLFLine(inputStream
问题内容: 可以说我有一个文本文件:data.txt(包含2000行) 如何从500-1500,然后从1500-2000读取给定的特定行,并显示特定行的输出? 此代码将读取整个文件(2000行) 如何修改上述代码以读取特定行? 问题答案: 我建议使用java.io.LineNumberReader。它扩展了BufferedReader,您可以使用它来获取当前行号 您还可以使用Java 7 ,如果适
问题内容: 我想优化此代码: 事情是,我不知道如何读取bufferedReader的内容并将其复制到String中,比我上面的速度更快。我需要花费尽可能少的时间。谢谢 问题答案: 在循环中使用字符串连接是 在 经典的性能杀手(因为字符串是不可变的,整个越来越大的字符串被复制为每个连接)。改为这样做:
问题内容: 我想使用BufferedReader在控制台中输入多行文本,然后单击“ Enter”以查找整个文本长度的总和。问题在于,似乎我进入了一个无限循环,当我按“ Enter”键时,程序并没有结束。我的代码如下: 你能告诉我我在做什么错吗? 问题答案: 阅读所有行的惯用方式是。另外,我建议发表声明。就像是 如果你想,当你收到一个空行来结束循环,在添加一个测试为循环 JLS-14.15。该声明说
你好,虽然我读了很多其他答案,但我不明白如何关闭BufferedReader而不发送输入。这是我程序的阻塞部分: 当我从主线程调用“endListing()”时,程序终止--但不会在用户输入任何内容之前终止。我想让程序立即终止--如何启动这个BufferdReader(像BufferedReader一样创建(新的InputStreamReader(System.in))? 我试图在主线程中的这个线