Я пытаюсь отправить сообщение на сервер через клиента, но не вижу сообщения на сервере. Это показывает, что он подключается правильно. Я думаю, что проблема как-то связана с этим в классе Client, но я не совсем уверен. Пожалуйста, дайте мне знать, есть ли у кого-нибудь решение.
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String send = reader.readLine();
out.println(send);
out.flush();
Это клиентский класс:
package com.evolution.client;
import java.net.*;
import java.io.*;
public class Client {
private Socket client;
private PrintWriter out;
private BufferedReader in;
public static void main(String[] args) {
Client client = new Client();
client.startConnection("localhost", 325);
}
public void startConnection(String ip, int port) {
try {
client = new Socket(ip, port);
out = new PrintWriter(client.getOutputStream(), true);
in = new BufferedReader(new InputStreamReader(client.getInputStream()));
System.out.println("Connected");
out.println("Connection started from, " + client.getLocalAddress());
out.flush();
while (true) {
String recieve = in.readLine();
System.out.println(recieve);
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String send = reader.readLine();
out.println(send);
out.flush();
}
} catch (Exception e) {
System.out.println(e);
}
}
public void stopConnection() {
try {
in.close();
out.close();
client.close();
}
catch (Exception e) {
}
}
}
Это файл класса сервера:
package com.evolution.server;
import java.io.*;
import java.net.*;
public class Server {
private int port = 325;
private ServerSocket server;
private Socket client;
private PrintWriter out;
private BufferedReader in;
public static void main(String[] args) throws IOException {
Server server = new Server();
System.out.println("Start Up!");
server.start(server.port);
}
public void start(int port) throws IOException {
server = new ServerSocket(port);
try {
while (true) { //always runs unless break;
client = server.accept();
out = new PrintWriter(client.getOutputStream(), true);
in = new BufferedReader(new
InputStreamReader(client.getInputStream()));
//out - send output
String inputLine;
while ((inputLine = in.readLine()) != null) {
if (inputLine.equalsIgnoreCase("shutdown"))
stop();
System.out.println(inputLine);
}
}
}
finally { //runs no matter what after try {}
server.close();
}
}
public void stop() {
try {
in.close();
out.close();
client.close();
server.close();
System.exit(0);
}
catch (Exception e) {
}
}
}
Если у вас есть возможные решения, дайте мне знать.
Линия Строка recieve = in.readLine (); на стороне клиента будет заблокирован (Блоки BufferedReader readLine ()). Поскольку сервер не отправляет больше строк, ваш код застрял там.
Удаление этой строки позволяет отправлять сообщения от клиента на сервер.
Ваш метод stop () пропустит все оставшиеся шаги при первом исключении. Вы должны заключить каждый вызов .close () в отдельный блок try..catch или написать функцию для закрытия InputStream / OutputStream / Socket.