java中in.readline_Java:无法在socket in.readLine()之后写入socket

我转向你,我的头一直撞在墙上。

我正在做一个小的socket编程,当我把out.println(“…”)行代码放在while循环(in.readLine())之前时,可以看到它工作正常,但我需要它在循环中。

要说清楚,我没有看到任何错误。我只是没有看到文本出现在这个应用程序的客户端。它看起来好像在工作,但实际上不是。另外,我也不控制客户端,它由一个通过TCP连接到这个套接字侦听器应用程序的设备来处理。它是否有可能在读取数据后立即断开连接?

public class ConnectionHandlerTCP implements Runnable

{

private final Socket clientSocket;

ConnectionHandlerTCP(Socket socket)

{

clientSocket = socket;

}

public void run()

{

int uniqueId = 0;

try (

BufferedReader in = new BufferedReader( new InputStreamReader(clientSocket.getInputStream()));

PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);

){

String inputLine;

// This Line WORKS, I see it appear on the other side of the connection.

Log.debug("Sending now A");

out.println("text to send here");

while ((inputLine = in.readLine()) != null)

{

// This Line DOES NOT WORK, I do not see it on the other side of the connection.

//Log.debug("Sending now B");

//out.println("text to send here");

// ... bunch of commented out code here

}

in.close();

out.close();

clientSocket.close();

} catch (IOException e) {

Log.error("Exception caught when trying to read input.", e.getMessage());

} catch (Exception e) {

Log.error("Exception caught when trying to parse data.", e.getMessage());

}

}

}

任何帮助都将不胜感激。如果有帮助的话,这里是主课。

import java.net.*;

import java.io.*;

public class SocketListenerTCP

{

public static void main(String[] args) throws IOException {

if (args.length != 1) {

System.exit(1);

}

int portNumber = Integer.parseInt(args[0]);

while(true)

{

try (

ServerSocket serverSocket = new ServerSocket(portNumber);

) {

Socket clientSocket = serverSocket.accept();

new Thread(new ConnectionHandlerTCP(clientSocket)).start();

} catch (IOException e) {

Log.error("Exception caught", e.getMessage());

}

}

}

}

我把它简化了一点,完全去掉了循环,但仍然不能正常工作。

inputLine = in.readLine();

Log.debug(inputLine);

Log.debug("Sending now");

out.println("text to send here");

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这是一个简单的聊天服务器的代码实现。下面是代码的分析: 1. 创建一个服务器 ```java ServerSocket ss = new ServerSocket(9090); ``` 使用ServerSocket类创建一个服务器,并指定端口号为9090。 2. 等待客户端连接 ```java Socket sk = ss.accept(); ``` 使用ServerSocket的accept()方法,等待客户端连接。当客户端连接成功,accept()方法会返回一个Socket对象,该对象表示与客户端的连接。 3. 获取用户输入 ```java Scanner mys = new Scanner(System.in); System.out.println("请输入您要发送的信息:"); String str = mys.next(); ``` 使用Scanner类获取用户输入的信息,可以通过控制台输入。这里只是简单地演示了如何获取用户输入。 4. 发送消息到客户端 ```java OutputStream os = sk.getOutputStream(); OutputStreamWriter osw = new OutputStreamWriter(os); BufferedWriter bw = new BufferedWriter(osw); bw.write(str); bw.newLine(); bw.flush(); ``` 获取客户端的输出流,使用BufferedWriter类将消息写入输出流,并使用flush()方法刷新流。 5. 接收客户端的消息 ```java InputStream is = sk.getInputStream(); InputStreamReader isr = new InputStreamReader(is); BufferedReader br = new BufferedReader(isr); String sa = br.readLine(); System.out.println("客户端:"+sa); ``` 获取客户端的输入流,使用BufferedReader类读取输入流的消息,并输出到控制台上。注意,这里使用了readLine()方法,它会一直阻塞等待客户端的输入,直到客户端输入了一行字符串并通过回车键结束输入。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值