Привет Я пишу простую java-программу для чтения данных из сокетов, но попал в проблему, где после каждого ввода я получаю много пробелов.Почему многие пространства добавляются, когда я получил некоторые данные из сокетов?
AIM: Напишите простой серверный сокет, который может считывать CORRECT данные из клиентского сокета.
До сих пор: я смог написать код для чтения из сокета, даже умеющего читать данные, но дело в том, что я получаю много пробелов в конце.
Таким образом, мне пришлось использовать trim(), чтобы в конечном итоге управлять пробелами, но я до сих пор не знаю, правильно это или нет.
Поблагодарите за входные данные.
ПРИМЕЧАНИЕ. Для подключения к соке я использую telnet-службу windows7.
readSocket() {
System.out.println(client_socket);
try {
System.out.println("reading socket");
/*BufferedReader brIn = new BufferedReader(new InputStreamReader(client_socket.getInputStream()));
String inputLine = null;
while ((inputLine = brIn.readLine()) != null) {
System.out.println(inputLine);
}*/
InputStream is = client_socket.getInputStream();
byte[] byteArr = new byte[1024];
int inputsize = -1;
int currentPos = 0;
StringBuffer sb = new StringBuffer(11111);
/*while((inputsize = is.read(byteArr)) != -1) {
String processed = new String(byteArr);
sb.append(processed);
}*/
int BUFFER_SIZE = 1024;
int read;
byte[] buffer = new byte[BUFFER_SIZE];
String processed = "";
while ((read = is.read(byteArr, 0, BUFFER_SIZE)) != -1) {
String current = new String(byteArr);
//os.write(buffer, 0, read);
System.out.println("current Process "+current);
//processed +=current;
sb.append(current.toString().trim());
}
System.out.println("Socket input is : "+sb.toString());
System.out.println("Sending response to client "+processed.toString());
//client_socket.getOutputStream().write(sb.toString().getBytes());
//client_socket.getOutputStream().close();
FileOutputStream fos = new FileOutputStream(new File("C:\\Users\\himanshu2100\\eee.txt"));
fos.write(processed.getBytes());
fos.close();
is.close();
client_socket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Ну используя предложение как Роджер Lindsjö и mprivat, я переработан ту часть, где я читал из потока.
readSocket() {
System.out.println(client_socket);
try {
System.out.println("reading socket");
InputStream is = client_socket.getInputStream();
byte[] byteArr = new byte[1024];
int read;
int BUFFER_SIZE = 1024;
ByteArrayOutputStream baos = new ByteArrayOutputStream();
while ((read = is.read(byteArr, 0, BUFFER_SIZE)) != -1) {
baos.write(byteArr, 0, read); //This is an optimized design, instead of having so many strings
}
System.out.println("Output is :"+new String(baos.toByteArray()));
baos.close();
is.close();
client_socket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Я надеюсь, что это лучшее решение, поэтому отправляйте его. Предложения приветствуются.
Это означает, что я должен перенести все данные в массив байтов, а затем, когда чтение будет завершено из сокета, а затем перевести на строку или на любой другой носитель. –