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);
}
}
Ещё волнует вопрос. у меня вот прослушка сервера в проекте клиента реализована как отдельный поток. на запись может подобное сделать?
ТРЕБУЕТСЯ КОНСУЛЬТАЦИЯ ГРАММОТНЫХ ЛЮДЕЙ! ЗАРАНЕЕ СПАСИБО!