Не создается до конца клиент
#39718448
Ссылка:
Ссылка на сообщение:
Ссылка с названием темы:
|
|
|
При создании клиента очень часто фрэйм не создается до конца, исключения не выкидываются
код клиента:
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();}
}
}
}
}
код сервера:
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) {}
}
}
}
}
|
|