Advertisement
Guest User

Untitled

a guest
Apr 26th, 2018
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.67 KB | None | 0 0
  1. import javax.swing.*;
  2. import java.awt.*;
  3. import java.net.*;
  4. import java.util.regex.*;
  5.  
  6. public class ChatUPD extends JFrame {
  7. private JTextArea taMain; //текстовое окно
  8. private JTextField tfMsg; //поле для ввода
  9.  
  10. private final String FRM_TITLE = "4at";
  11. private final int FRM_LOC_X = 200;
  12. private final int FRM_LOC_Y = 200;
  13. private final int FRM_WIDTH = 400;
  14. private final int FRM_HEIGHT = 400;
  15.  
  16. private final int PORT = 9876;
  17. private final String IP_BROADCAST = "192.168.0.255"; // ??????????????? InetAddres.getLocalHost()
  18.  
  19. private class thdReceiver extends Thread{ //создание класса-потока (наследующего от обобщённого потока)
  20. @Override
  21. public void start(){
  22. super.start();
  23. try {
  24. customize();
  25. }catch (Exception ex) {
  26. ex.printStackTrace();
  27. }
  28. }
  29. private void customize() throws Exception {
  30. DatagramSocket receiveSocket = new DatagramSocket(PORT);
  31. Pattern regex = Pattern.compile("[\u0020-\uFFFF]"); //регулярка для отсечения лишних нулов и невидимых знаков. Нужно разбираться в выбранной кодировке
  32. while (true){
  33. byte[] receiveData = new byte[2048];
  34. DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
  35. receiveSocket.receive(receivePacket);
  36. InetAddress IPAddress = receivePacket.getAddress();
  37. int port = receivePacket.getPort();
  38. String sentence = new String(receivePacket.getData());
  39. Matcher m = regex.matcher(sentence); //выявляет и выдает все символы
  40.  
  41. taMain.append(IPAddress.toString() + ":" + port + ": ");
  42. while (m.find())
  43. taMain.append(sentence.substring(m.start(), m.end()));
  44. taMain.append("\r\n"); //перевод каретки
  45. taMain.setCaretPosition(taMain.getText().length());
  46. }
  47. }
  48. }
  49.  
  50. private void btnSend_Handler() throws Exception {
  51. DatagramSocket sendSoket = new DatagramSocket();
  52. InetAddress IPAddress = InetAddress.getByName(IP_BROADCAST);
  53. byte[] sendData;
  54. String sentence = tfMsg.getText();
  55. tfMsg.setText("");
  56. sendData = sentence.getBytes("UTF-8");
  57. DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, PORT);
  58. sendSoket.send(sendPacket);
  59. }
  60.  
  61. private void frameDraw(JFrame frame){
  62. tfMsg = new JTextField();
  63. taMain = new JTextArea(FRM_HEIGHT/19, 50);
  64. JScrollPane spMain = new JScrollPane(taMain);
  65. spMain.setLocation(0,0);
  66. taMain.setLineWrap(true);
  67. taMain.setEditable(false);
  68.  
  69. JButton btnSend = new JButton();
  70. btnSend.setText("Send");
  71. btnSend.setToolTipText("Broadcast a massage");
  72. btnSend.addActionListener(e -> { //лямбда, как сделать без нее, см в первой версии
  73. try {
  74. btnSend_Handler();
  75. }catch (Exception ex) {
  76. ex.printStackTrace();
  77. }
  78. });
  79. // задаем параметры окна:
  80. frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
  81. frame.setTitle(FRM_TITLE);
  82. frame.setLocation(FRM_LOC_X, FRM_LOC_Y);
  83. frame.setSize(FRM_WIDTH, FRM_HEIGHT);
  84. frame.setResizable(false);
  85. frame.getContentPane().add(BorderLayout.NORTH, spMain);
  86. frame.getContentPane().add(BorderLayout.CENTER, tfMsg);
  87. frame.getContentPane().add(BorderLayout.EAST, btnSend);
  88. frame.setVisible(true);
  89. }
  90.  
  91. private void antistatic (){ // является методом класса ChatUPD
  92. System.out.println("Hello world!!"); //шняжка на проверку работоспособности
  93. frameDraw(new ChatUPD()); //метод для отрисовки. метод класса вызывается из другого метода этого класса
  94. new thdReceiver().start(); //пытаемся запустить поток, должен быть вне статического окружения
  95. }
  96.  
  97. public static void main (String[] args){
  98. new ChatUPD().antistatic(); // создаём экземпляр класса ChatUPD и вызываем его метод antistatic
  99. }
  100. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement