我有一个客户端套接字连接到服务器套接字,服务器会在连接时不时向客户端发送数据。目前我的客户端使用一个while循环来继续从服务器接收数据,即使服务器没有发送任何东西。
我的问题是,有没有更有效的方法来收听输入?
我在想可能为套接字连接创建一个线程,并在没有传入数据时将其置于睡眠状态,并在有数据传入时发送中断。这行得通吗?如果让线程进入睡眠状态,它会破坏套接字连接吗?
我无法修改服务器套接字,它不会启动连接。
import java.io.*;
import java.net.Socket;
public class core_socket {
public static void main(String[] args) {
String host = ("192.168.100.206");
int port = 4025;
try {
Socket socket = new Socket(host, port);
System.out.println("created socket\n");
OutputStream os = socket.getOutputStream();
boolean autoflush = true;
PrintWriter out = new PrintWriter(socket.getOutputStream(), autoflush);
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
// read the response
boolean loop = true;
StringBuilder sb = new StringBuilder(8096);
while (loop) {
if (in.ready()) {
int i = 0;
while (i != -1) {
i = in.read();
sb.append((char) i);
}
loop = false;
}
}
// display the response to the out console
System.out.println(sb.toString());
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}