Я создал 2 Java-программы с сокетами в нем.Я хочу, чтобы клиент отправлял непрерывные данные на сервер.Но после того, как сообщение отправлено на сервер, клиент продолжает отправлять на сервер значение 'null' (это происходит, когда я закрываю сокет в клиентской программе).Вот мои коды:
import ...
public class MainClient {
private Socket serverSock;
private PrintStream clientOutput;
public static void main(String[] args) {
MainClient client = new MainClient();
client.runClient();
}
public void runClient() {
try {
serverSock = new Socket("127.0.0.1",8282);
clientOutput = new PrintStream(serverSock.getOutputStream());
clientOutput.println("Hello, I'm Connected.");
for (int i=0;i<5;i++) {
clientOutput.println(i + "");
clientOutput.flush();
}
} catch (IOException e) {
e.printStackTrace();
}finally {
// try {
// serverSock.close(); It will keeps sending 'null' data to the server if I use this line.
// } catch (IOException e) {
// e.printStackTrace();
// }
}
}
}
На стороне сервера:
public class MainServer {
private ServerSocket serverSocket;
private int listenPort = 8282;
private InputStream inps;
private Socket clientSocket;
private BufferedReader clientInput;
private MainServer() {
String clientMsg = "";
try {
serverSocket = new ServerSocket(listenPort);
System.out.println("Server is Listening on " + listenPort);
clientSocket = serverSocket.accept();
clientInput = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
while(clientSocket.isConnected()) {
clientMsg = clientInput.readLine();
System.out.println("Client : " + clientMsg);
}
}catch(IOException ex) {
ex.printStackTrace();
}finally {
try {
clientSocket.close();
} catch (IOException e) {}
}
}
public static void main(String[] args) {
new MainServer();
}
}
Я пытался закрыть OutputStream на стороне клиента с помощью clientOutput.close();
, но после этого он отправляет нулевые значения на серверотправляет цикл 0-4.Чтобы это остановить и избежать отправки клиентом нулевых данных, я не должен вставлять serverSock.close();
на клиенте, но он возвращает SocketException.Я хотел, чтобы клиент отправил сообщение «Закрыто» после его завершения.
Сводка, выходные данные на сервере:
Client: 0
Client: 1
Client: 2
Client: 3
Client: 4
Client: null
Client: null
//And so on..
Я думаю, что в клиентской программе чего-то не хватает, яУгадай?Спасибо за помощь:)