Здравствуйте, Мне нужна быстрая помощь в этой программе сокетов Server/Client, которую я пишу на Java. Все работает по назначению при вводе стандартного ввода на стороне клиента. Каждый раз сервер отвечает правильными данными. Но когда я отправляю данные на Сервер с помощью actionListener, ничего не возвращается. Данные передаются и считываются сервером и могут быть распечатаны на стороне сервера, они просто не возвращаются Клиенту.Сокеты Java: клиент и сервер. Сервер не отвечает при получении данных с помощью переключателя
Так что это должно быть проблема с форматированием или типом данных, отправляемых с помощью actionListener (к сожалению, я недостаточно знаю о потоках), или это проблема с потоком на стороне сервера?
Любая помощь очень ценится!
public class Serv {
public static void main(String[] args) throws IOException {
\t \t ServerSocket serverSocket = null;
try {
serverSocket = new ServerSocket(8889);
System.out.println("Waiting for client...");
} catch (IOException e) {
System.err.println("Could not listen on port: 8889.");
System.exit(1);
}
Socket clientSocket = serverSocket.accept();
\t \t \t BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
\t \t \t PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
\t \t \t String inputLine, outputLine;
\t \t \t Protocol p = new Protocol();
\t \t \t out.println("welcome");
while ((inputLine = in.readLine()) != null) {
\t \t outputLine = p.processInput(inputLine);
\t \t \t System.out.println("Input: "+inputLine + "\nOutput: "+outputLine);
out.println(outputLine);
\t \t \t if (outputLine.equals("Exit")) { break; }
\t \t }
\t \t out.close();
in.close();
clientSocket.close();
serverSocket.close();
}
}
public class Cl extends JFrame {
\t
\t public static PrintWriter out = null; \t
\t public static String fromUser;
\t \t
\t public static void Client() { \t \t
\t \t saveAnswer.addActionListener(new ActionListener() {
\t \t \t public void actionPerformed(ActionEvent e) {
\t \t \t \t \t ButtonModel b = group.getSelection();
\t \t \t \t \t if (b.getActionCommand() == "A") { sendAnswer = radioA.getText(); }
\t \t \t \t \t if (b.getActionCommand() == "B") { sendAnswer = radioB.getText(); }
\t \t \t \t \t if (b.getActionCommand() == "C") { sendAnswer = radioC.getText(); }
\t \t \t \t \t String data = "÷" + sendAnswer;
\t \t \t \t \t out.println(data);
\t \t \t \t }
\t \t });
\t }
\t public static void main(String[] args) throws IOException {
Socket Socket = null;
BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));
\t \t boolean checkOpen = false;
\t \t Socket clientS = new Socket("localhost", 8889);
out = new PrintWriter(clientS.getOutputStream(), true);
\t \t BufferedReader in = new BufferedReader(new InputStreamReader(clientS.getInputStream()));
\t \t String fromServer;
\t \t
while ((fromServer = in.readLine()) != null) {
\t \t \t if (fromServer.startsWith("®")) {
\t \t \t \t if (checkOpen == false) { Cl.Client(); checkOpen = true; }
\t \t \t \t qA.splitter(fromServer);
\t \t \t }
if (fromServer.equals("Exit")) { break; }
\t \t fromUser = stdIn.readLine();
\t \t \t if (fromUser != null) {
System.out.println("Client: " + fromUser);
out.println(fromUser);
\t \t \t \t }
\t \t \t \t else { System.out.println("trouble"); }
}
out.close();
in.close();
stdIn.close();
Socket.close();
\t }
}
Извините, что я забыл добавить, я удалил все несущественные данные, так как я на 99% уверен, что я сузил проблему до чего-то внутри этого кода. Я могу опубликовать все это, если это поможет! – Maguire
Код, который не хорошо отформатирован, часто является кодом, который люди не будут читать. Подумайте о попытке опубликовать хорошо отформатированный читаемый код. Лучше всего, если вы можете создать и опубликовать [mcve] (http://stackoverflow.com/help/mcve). –
Почему вы читаете программу stdin в программе Swing? – EJP