клиент не получает подтверждения от сервера

  • Автор темы BattleMage
  • Дата начала
B

BattleMage

я так понимаю, что теряется связь (сокет закрыт) и клиент не получает сообщения от сервера. а я его вроде нигде не закрываю, если только он сам не делает это скрытым образом...
сокеты они же двунаправленные?

код сервера такой:
Код:
public class Main extends Thread {

public static ServerSocket ss = null;
public static Thread t = null;
public static JTextArea ta = null;

@Override
public void run() {

try {
ss = new ServerSocket(5000);
ta.append("Server is ON\n");

while (true) {
Socket client = ss.accept();
BufferedReader br = new BufferedReader(new InputStreamReader(client.getInputStream()));
String str;
while ((str = br.readLine()) != null) {
ta.append("Server received: " + str + "\n");
PrintWriter pw = new PrintWriter(client.getOutputStream());
pw.println(str);
ta.append("Server sent: " + str + "\n");
pw.flush();
pw.close();
}
}

} catch (Exception e) {
}
}

public static void main(String[] args) throws IOException {
JFrame frame_server = new JFrame("Server");
frame_server.setSize(300, 300);
frame_server.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame_server.setLayout(null);

final JButton but_start = new JButton("Start");
final JButton but_stop = new JButton("Stop");
ta = new JTextArea();

but_start.setBounds(0, 0, 80, 20);
but_stop.setBounds(85, 0, 80, 20);
ta.setBounds(0, 25, 300, 250);

frame_server.add(but_start);
frame_server.add(but_stop);
frame_server.add(ta);

but_stop.setEnabled(false);

but_start.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent arg0) {
but_start.setEnabled(false);
but_stop.setEnabled(true);
t = new Main();
t.start();
}
});

but_stop.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent arg0) {
but_stop.setEnabled(false);
but_start.setEnabled(true);
t.interrupt();
try {
ss.close();
ta.append("Server is OFF\n");
} catch (IOException e) {
ta.append("Exception: " + e.getMessage() + "\n");
}

}
});

frame_server.setVisible(true);
}
}

код клиента следующий:
Код:
public class Main extends Thread {

public static Socket client = null;
public static Thread t = null;
public static String cientName;
public static JTextArea ta = null;

@Override
public void run() {
try {
//оставить здесь?
client = new Socket("localhost", 5000);

BufferedReader br = new BufferedReader(new InputStreamReader(client.getInputStream()));
String str;

while ((str = br.readLine()) != null) {
ta.append("Server: " + str + "\n");
}

client.close();
} catch (UnknownHostException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
}
}

public static void main(String[] args) throws IOException {
JFrame frame_client = new JFrame("Client");
frame_client.setSize(300, 300);
frame_client.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame_client.setLayout(null);

ta = new JTextArea();
final JTextField tf = new JTextField();
JButton but_send = new JButton("Send");
JButton but_close = new JButton("Close");

ta.setBounds(0, 0, 300, 200);
tf.setBounds(0, 200, 200, 30);
but_send.setBounds(200, 200, 100, 30);
but_close.setBounds(0, 230, 100, 30);

frame_client.add(ta);
frame_client.add(tf);
frame_client.add(but_send);
frame_client.add(but_close);

t = new Main();

t.start();

but_send.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {
try {
if (!tf.getText().equals("")) {
PrintWriter pw = null;
pw = new PrintWriter(client.getOutputStream());
pw.println(tf.getText());
pw.flush();
pw.close();
ta.append("Client sent: " + tf.getText() + "\n");
tf.setText("");
}
} catch (IOException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
}

}
});

but_close.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {
try {
t.interrupt();
client.close();
System.exit(0);
} catch (IOException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
}
}
});

frame_client.setVisible(true);
}
}

Ещё волнует вопрос. у меня вот прослушка сервера в проекте клиента реализована как отдельный поток. на запись может подобное сделать?

ТРЕБУЕТСЯ КОНСУЛЬТАЦИЯ ГРАММОТНЫХ ЛЮДЕЙ! ЗАРАНЕЕ СПАСИБО!
 
C

Creo

клиент не получает подтверждения от сервера, jdbc; socket closed. Мне кажется название топика не совсем соответствует коду, который тут преведён.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!