写一个简单的socket客户端和针对netcat的服务器进行测试。 问题是netcat服务器总是以UTF-8发送,客户端不能指望UTF-16。
下面是客户端代码:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.UnknownHostException;
public class LineReader {
/**
* @param args
*/
public static void main(String[] args) {
if (args.length < 2) {
System.out.println("usage: java LineReader charset url");
System.exit(1);
}
try {
final String charset = args[0];
final URI url = new URI(args[1]);
final String host = url.getHost();
final int port = url.getPort();
final Socket socket = new Socket(host, port);
final BufferedReader reader = new BufferedReader(
new InputStreamReader(socket.getInputStream(), charset));
while (true) {
final String line = reader.readLine();
System.out.println(line);
}
} catch (URISyntaxException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
底线:没有与ReadLine方法没有任何问题。
你的代码一定有问题,因为它肯定有效。执行以下代码:'String test =“first \ nsecond \ irdird \ r \ nfourth”; BufferedReader br = new BufferedReader(new StringReader(test)); 弦线; ((line = br.readLine())!= null){System.out.println(line); }' – 2012-01-01 16:14:05
你的意思是,如果你只接收换行,在Windows上,readline不能正确识别它们? – 2012-01-01 16:16:40
@Rob HYes。 readLine()永远挂起,或者如果套接字有一个定义的超时,然后抛出SocketTimeoutException:( – 2012-01-01 17:18:50