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

Тема в разделе "Java", создана пользователем BattleMage, 10 июн 2010.

  1. BattleMage

    BattleMage Гость

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

    код сервера такой:
    Код (Text):
    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);
    }
    }
    код клиента следующий:
    Код (Text):
    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);
    }
    }
    Ещё волнует вопрос. у меня вот прослушка сервера в проекте клиента реализована как отдельный поток. на запись может подобное сделать?

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

    Creo Гость

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

Поделиться этой страницей