我必须使用java与服务器发送和接收一些流。协议是telnet,如果我在windows中使用cmd命令:"telnet 10.0.1.5 9100"
,在"^AI202"
之后,我会得到响应。
代码java:
import java.io.*;
import java.net.*;
public static void main(String[] args) throws SocketException, IOException {
Socket s = new Socket();
PrintWriter s_out = null;
BufferedReader s_in = null;
String remoteip = "10.0.1.5";
int remoteport = 9100;
s.connect(new InetSocketAddress(remoteip , remoteport));
s_out = new PrintWriter( s.getOutputStream(), true);
s_in = new BufferedReader(new InputStreamReader(s.getInputStream()));
String message = "^AI202";
try{
System.out.println(s_in.readLine());
}
catch(Error e){
System.out.println(e);
}
s_out.close();
s_in.close();
s.close();
}
问题是一样的:s_in
调用方法readLine()
和程序循环无限。
我认为System.out.println(s_in.readLine());将尝试一遍又一遍地阅读它,每次都失败并导致无限循环。
尝试
String line ="";
while ((line = s_in.readLine()) != null) {
// Do what you want to do with line.
}
Java Socket BufferReader.readline获取空
问题是telnet
协议不会用换行符终止命令。
将读取块更改为
try {
char [] cbuf = new char[7];
System.out.println(s_in.read(cbuf, 0, cbuf.length));
} catch(Error e){
System.out.println(e);
}
你会得到一些意见。