Я написал две небольшие программы Java: клиент TCP, который отправляет много строк данных из файла txt, и TCP-сервер, который принимает соединение и получает строку за строкой ,Java-сервер TCP получил каждую строку от Клиента, когда все они отправлены
Он работает, но сервер получает все линии вместе, когда передача завершена, и клиент закрывает сокет. Я не понимаю, почему, потому что я использую флеш после каждой строки, отправленной в Клиент, и я всегда думал, что это должно избежать такой ситуации.
Если файл test.txt содержит номера 1 2 3 ... 10, каждый в новой строке, вывод сервера: «12345678910», а затем в новой строке он записывает в консоли «null».
Серверный код:
import java.io.*;
import java.net.*;
class ServidorTCP {
private String HOST;
static final int PUERTO = 20001;
public ServidorTCP() {
try{
ServerSocket skServidor = new ServerSocket(PUERTO);
Socket skCliente = skServidor.accept();
DataInputStream inFromClient = new DataInputStream(new BufferedInputStream(skCliente.getInputStream()));
while(true){
String lineaLeida = inFromClient.readUTF();
if(lineaLeida.equals("END")) break;
System.out.println(lineaLeida);
}
inFromClient.close();
skCliente.close();
skServidor.close();
System.out.println("Transmission ended");
} catch(Exception e) {
System.out.println(e.getMessage());
}
}
public static void main(String[] arg) {
new ServidorTCP();
}
}
Cliente код:
import java.io.*;
import java.net.*;
class ClienteTCP {
static final String HOST = "192.168.1.201";
static final int PUERTO = 20001;
public ClienteTCP() {
try{
Socket skCliente = new Socket(HOST, PUERTO);
if(skCliente.isConnected()) System.out.println("Connected!");
DataOutputStream outToServer = new DataOutputStream(skCliente.getOutputStream());
File testFile = new File("test.txt");
BufferedReader input = new BufferedReader(new FileReader(testFile));
String line;
while((line=input.readLine())!=null) {
if(!line.endsWith("\n")) line = line + "\n";
System.out.println("Sending: " + line);
outToServer.writeBytes(line);
outToServer.flush();
Thread.currentThread().sleep(1000);
}
outToServer.writeBytes("END");
input.close();
outToServer.close();
skCliente.close();
} catch(Exception e) {
System.out.println(e.getMessage());
}
}
public static void main(String[] arg) {
new ClienteTCP();
}
}
Где проблема?
EDIT: Я отредактировал код, как было предложено. Теперь не получает nohing
Причина в том, что я попытался использовать «DataInputStream in = new DataInputStream (socket.getInputStream())», а при компиляции он говорит, что он устарел: | Что следует использовать тогда? –
@RomanRdgz См. Пункты (1), (2) или (3) в моем ответе. – EJP
Я использую теперь «DataInputStream inFromClient = новый DataInputStream (новый BufferedInputStream (skCliente.getInputStream())), а затем« String lineaLeida = inFromClient.readUTF() ». Проблема все еще происходит –