powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Не создается до конца клиент
3 сообщений из 3, страница 1 из 1
Не создается до конца клиент
    #39718448
Lestat666
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
При создании клиента очень часто фрэйм не создается до конца, исключения не выкидываются



код клиента:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
package client;

import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.ScrollPaneLayout;
import javax.swing.border.Border;
import javax.swing.border.TitledBorder;

public class Client extends JFrame {
    String name;
    Socket socket;
    BufferedReader br;
    DataOutputStream oos;
    DataInputStream ois; 
    String in;
    String outMessage;
    JFrame mainFrame = new JFrame ("Client v1.0");
    JPanel pan = new JPanel();
    JTextArea area = new JTextArea();    
    JScrollPane scrollPane = new JScrollPane (area, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
    JTextField message = new JTextField(10);
    JButton button = new JButton ("Send");
    
public static void main (String [] args) {    
    new Client().clientwork(); 
}    

    public synchronized void clientwork () {
        try {
        this.makeFrame();
        socket = new Socket ("localhost", 3345);
        oos = new DataOutputStream (socket.getOutputStream());
        ois = new DataInputStream (socket.getInputStream());       


        this.setTextArea("You connect to socket \n");
        this.setTextArea("Your's DataInputStream and DataOutputStream are initialized \n");
        
        //Запуск потока-слушателя
        Thread read = new Thread (new ClientReader());
        read.start();        
        }       
        catch (Exception e) {e.printStackTrace();}                        
        }
    
    public synchronized void setTextArea (String text) {
        area.append(text);
    }

    public synchronized void makeFrame () {       

        mainFrame.setSize(300, 400);
        mainFrame.setResizable(false);
        mainFrame.setVisible(true);
        mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        mainFrame.add(pan);
        
        Border br = BorderFactory.createLineBorder(Color.BLACK, 1);
        Border br1 = BorderFactory.createTitledBorder(br, "chat window", TitledBorder.CENTER, TitledBorder.ABOVE_TOP );
        
        area.setEditable(false);
        area.setLineWrap(true);
        area.setMaximumSize(scrollPane.getMaximumSize());
        area.setAlignmentX(Component.CENTER_ALIGNMENT);
        area.setLineWrap(true);
        area.setWrapStyleWord(true);
        
        message.setMaximumSize(new Dimension(280, 30));
        message.setAlignmentX(Component.CENTER_ALIGNMENT);
        
        scrollPane.setSize(new Dimension (250,200));
        scrollPane.setLayout(new ScrollPaneLayout());
        scrollPane.setBorder(br1);

        pan.setLayout(new BoxLayout(pan, BoxLayout.PAGE_AXIS));
        pan.add(Box.createVerticalStrut(10));
        pan.add(message);
        
        pan.add(scrollPane);        
        pan.add(Box.createRigidArea(new Dimension (200, 40)));
        pan.add(Box.createVerticalStrut(20));
        pan.add(message);
        button.setAlignmentX(Component.CENTER_ALIGNMENT);
        pan.add(Box.createVerticalStrut(20));
        pan.add(button);
        pan.add(Box.createVerticalStrut(20));
                
        button.addActionListener(new ActionListener () {
            @Override
            public synchronized void actionPerformed(ActionEvent e) {
                try {                      
                    outMessage=message.getText();                                        
                    if (outMessage.equalsIgnoreCase("exit")) {                    
                        setTextArea("client killed connection \n");                       
                        //System.out.println("Closing connection and channels DONE");
                        setTextArea("Closing connection and channels DONE \n");
                        oos.flush();
                        oos.close();
                        ois.close();
                        mainFrame.dispose();
                        socket.close();
                }                     
                    oos.writeUTF(outMessage);
                    oos.flush();
                    message.setText("");
                } catch (Exception ex) {
                    ex.printStackTrace();
                }
                finally {
                try {
                    oos.flush();
                    oos.close();
                    ois.close();
                    mainFrame.dispose();
                } 
                catch (IOException ex) {ex.printStackTrace();}
                } 
            }
        }
        );  
    }    
    
    public class ClientReader implements Runnable {
        @Override
        public synchronized void run () {
            try {
               ois = new DataInputStream (socket.getInputStream()); 
               while (true) {
                   String entry=ois.readUTF();
                   setTextArea(entry+"\n");
                   System.out.println(entry); 
               }
            }
            catch (IOException e) {
                e.printStackTrace();
            }
            finally {
                try {ois.close();} 
                catch (IOException ex) {ex.printStackTrace();}
            } 
        }
    } 
}





код сервера:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
package server2;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;

public class Server2 {

    static ArrayList <SimpleServer> servers = new ArrayList <SimpleServer>();
    Socket client;
    
    public static void main(String[] args) {
        new Server2().go();
    }
    
    public void go () {
        try {
            ServerSocket server = new ServerSocket(3345);
            System.out.println("connection accepted");
            System.out.println("DataInputStream and DataOutputStream created");
            while (!server.isClosed()) { 
                System.out.println("Server reading from channel");                
                client = server.accept();
                SimpleServer s = new SimpleServer(client);
                s.start();
                servers.add(s);
                System.out.println("Connection accepted."); 
            }             
        }
        catch (Exception e) {
            e.printStackTrace();
        }
    }

private class SimpleServer extends Thread {
    private Socket client;
    private String name;
    private boolean fl;
    private DataOutputStream out;
    private DataInputStream in;
    
    public SimpleServer (Socket client) {
        this.client=client;
    }
    
    private void writeToAll (ArrayList <SimpleServer> monoServer, String smth) throws IOException {
        for (SimpleServer sr : monoServer)  {
            sr.out.writeUTF(smth);
            sr.out.flush();
        }
    }
    
        @Override
        public synchronized void run() {
            try {
                out = new DataOutputStream (client.getOutputStream());
                in = new DataInputStream (client.getInputStream()); 
                
                while (true) {
                    
                    //ask client's name
                    while (fl==false) {
                       out.writeUTF("write your name");
                       name=in.readUTF();
                       writeToAll(servers, name+" came to chat"); 
                       this.out.writeUTF("Welcome to chat "+name+"\n");
                       System.out.println(name+" came to chat");
                       fl=true;
                    }   
                    
                    String entry=in.readUTF();
                    //this.out.writeUTF("your message has been delivered \n");
                    writeToAll(servers, name+": "+entry);
                    System.out.println(name+": "+entry);
                                       
                    if (entry.equalsIgnoreCase("exit")) {
                    System.out.println("client write EXIT - client disconnectred");              
                    System.out.println("closing connection and channel");
                    System.out.println("closing connection and channel done"); 
                    break;
                }        
            }
            in.close();
            out.flush();
            out.close();
            client.close();  
            this.interrupt();            
            }
            catch (Exception e) { e.printStackTrace(); }
            finally {
                try {
                in.close();
                out.flush();
                out.close();
                }
                catch (Exception e) {}
            }
        }
    }        
}
...
Рейтинг: 0 / 0
Не создается до конца клиент
    #39718492
cossack5
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lestat666,
Я не спец по swing, но мне кажется нужно юзать dispatch queue, т.е.
Код: java
1.
2.
3.
4.
5.
6.
 SwingUtilities.invokeLater(  ()->  {
                this.makeFrame();
                this.setTextArea("You connect to socket \n");
                this.setTextArea("Your's DataInputStream and DataOutputStream are initialized \n");
                
            });
...
Рейтинг: 0 / 0
Не создается до конца клиент
    #39718563
Фотография by-pass
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы разберитесь для начала, как работает сокет: тынц
Потом рюшки приделаете.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Не создается до конца клиент
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]