【发布时间】:2014-05-30 12:39:43
【问题描述】:
我尝试使用 InputStream 类中的 read() 方法,但它阻塞了线程,我尝试了 readLine() 方法也阻塞了线程。
在这些尝试之后,我使用了这个:
public static void main(String[] args) throws IOException{
Socket s = new Socket();
String host = "";
s.connect(new InetSocketAddress(host, 23));
Response response = new Response(s);
response .start();
if(response .isInterrupted()){
System.out.println(response .getSb().toString());
}
}
public class Response extends Thread {
Socket s;
BufferedReader s_in = null;
InputStream in = null;
private StringBuffer sb = new StringBuffer();
public Response(Socket s){
this.s = s;
}
@Override
public void run() {
try {
s_in = new BufferedReader(new InputStreamReader(s.getInputStream()));
in = s.getInputStream();
char ch;
int i;
while(!Thread.currentThread().isInterrupted()){
i = s_in.read();
ch = (char) i;
System.out.print(ch);
getSb().append(getSb());
}
System.out.print(getSb());
} catch (IOException ex) {
Logger.getLogger(Response.class.getName()).log(Level.SEVERE, null, ex);
}
}
public StringBuffer getSb() {
return sb;
}
}
public class Message extends Thread{
Socket s;
PrintWriter s_out = null;
public Message(Socket s){
this.s = s;
}
@Override
public void run(){
try {
s_out = new PrintWriter(s.getOutputStream(), true);
} catch (IOException ex) {
Logger.getLogger(Message.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
但是当我运行应用程序时,套接字没有足够的时间将所有数据发送到 InputStream。
所以,我可能会验证流何时结束。开始阅读。
感谢您的帮助!
【问题讨论】: