Я пытаюсь заняться программированием на языке Socket на Java и использую метод BufferedStreamReader.read (char []).
Документ Java содержит:
Читает символы в массив. это
метод будет блокироваться, пока не будет
доступно, ошибка ввода-вывода или
конец потока достигнут.
Только это не блокирует на входе.
Может ли кто-нибудь указать на проблему со следующим кодом? Даже со строкой, которая записывает в выходной поток, строка, которая печатает «RCVD:», печатает, но без данных после RCVD.
public class Main {
/**
* @param args the command line arguments
*/
private static Socket tcpSocket;
public static void main(String args[]) {
try {
tcpSocket = new Socket("localhost", 8080);
} catch (UnknownHostException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
}
new Thread(new Runnable() {
public void run() {
try {
System.out.println("Starting listening");
char[] dataBytes = new char[9];
BufferedReader netStream = new BufferedReader(new InputStreamReader(tcpSocket.getInputStream()));
while (true) {
netStream.read(dataBytes);
System.out.println("RCVD: " + String.copyValueOf(dataBytes));
}
} catch (UnknownHostException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
}
}
}).start();
new Thread(new Runnable(){
public void run() {
System.out.println("Starting Writer");
PrintWriter out = null;
try {
out = new PrintWriter(tcpSocket.getOutputStream(), true);
for (int i = 0 ; i < 10 ; i++)
{
// out.println("000000000");
}
} catch (IOException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
}
}
}).start();
}
}
ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ
Я пытался изменить номер порта, и приложение зависало, возможно, я подключаюсь к чему-то еще, работающему на машине.
Также я получаю постоянный поток байтов, все из которых являются пробелами по его виду.