Java套接字缓冲读取程序Null
它应该通过将您所写的内容发送到套接字并再次从套接字中获取来回显。发生的情况是,当我输入某个内容并按enter键时,大约需要10秒钟,然后显示为Java套接字缓冲读取程序Null,java,sockets,null,bufferedreader,Java,Sockets,Null,Bufferedreader,它应该通过将您所写的内容发送到套接字并再次从套接字中获取来回显。发生的情况是,当我输入某个内容并按enter键时,大约需要10秒钟,然后显示为echo:null 预期 输入 试验 输出 回声:测试 现实 输入 试验 输出 回音:空 我的问题是: 我犯了什么新手错误 我怎么修理它 先读后评论 我需要测试套接字的功能。通过做这样简单的事情,它帮助我理解如何使用它们。我想创建一个实时聊天服务器。但是,如果这个简单的程序不起作用,我就不能。我不笨到不使用userInput。我知道 问题是,我在同一线程
echo:null
预期
输入
试验
输出
回声:测试
现实
输入
试验
输出
回音:空
我的问题是:
- 我犯了什么新手错误
- 我怎么修理它 先读后评论 我需要测试套接字的功能。通过做这样简单的事情,它帮助我理解如何使用它们。我想创建一个实时聊天服务器。但是,如果这个简单的程序不起作用,我就不能。我不笨到不使用userInput。我知道
线程上访问echoSocket
的输入流
和输出流
。readLine@zack6849其目的是测试套接字发送和检索数据的使用情况。这与@zack6849所说的一模一样。您想回显userInput
。你已经读过了。附和它。你把它扔掉了。不要把它扔掉。附和它。你刚读到的那句话。不是另外一行。如果您试图测试服务器,不要期望它遵守预期的协议。在另一个线程上读取它的输入,而不是写入它的线程,然后按原样、未缓冲、未包装的方式将InputStream读取给读卡器。@EJP我不知道您相信什么,但您引用了第一条注释,并且您同意作为echo输出的变量是userInput。用户输入是从控制台输入读取的,而不是从服务器读取的。这显然不符合目的。
public static void main(String[] args) throws IOException {
String hostName = "127.0.0.1";
int portNumber = 4848;
Socket echoSocket = new Socket(hostName, portNumber);
PrintWriter out = new PrintWriter(echoSocket.getOutputStream(), true);
BufferedReader in = new BufferedReader(new InputStreamReader(echoSocket.getInputStream()));
BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));
String userInput;
while ((userInput = stdIn.readLine()) != null) {
out.println(userInput);
System.out.println("echo: " + in.readLine());
}
}