|
|
|
Проблемы с построением клиент-серверного приложения (чат)
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Я начинающий программист. Хожу на курсы по Java где дали задание написать чат, который работате по сети. Я начал реализовывать механизмы чата и первым делом хотел реализовать проверку на наличие пользователей на сервере, и сразу столкнулся с проблемой. Для реализации чата я создал форму, класс клиента и класс сервера, и отдельный класс с методом main в котором создаётся обьект класса клиента и в EventQueue.invokeLater() запускается форма, принимая на вход обьект созданного класса клиента. По моему задуму логика должна была работать так: 1. Пои нажатии кнопки Connect - форма должна была считать имя пользователя, которое введено в соответствующее поле, и передать его обьекту класса клиента. 2. Далее в классе формы должен был вызваться метод класса клиента, который создаёт подключение к серверу через сокет, и в этом методе он должен передать серверу имя пользователя, а тот в свою очередь должен был отвечать, по факту, есть пользователь или нет, и взависимости от этого форма должна была поменять свои аттрибуты (затенить кнопку Connect, сделать поле имени пользователя нечитаемым, и кнопку send активной, и кнопку disconnect активной), если пользователя нет, и выйти по return; если пользователь уже имелся. Но при нажатии кнопки Connect ничего не происходит и форма виснет, и даже не перерисовывается, а когда её принудительно Terminate то в консоль со стороны сервера выбрасывается следующее: java.net.SocketException: Connection reset at java.net.SocketInputStream.read(Unknown Source) at java.net.SocketInputStream.read(Unknown Source) at sun.nio.cs.StreamDecoder.readBytes(Unknown Source) at sun.nio.cs.StreamDecoder.implRead(Unknown Source) at sun.nio.cs.StreamDecoder.read(Unknown Source) at java.io.InputStreamReader.read(Unknown Source) at java.io.BufferedReader.fill(Unknown Source) at java.io.BufferedReader.readLine(Unknown Source) at java.io.BufferedReader.readLine(Unknown Source) at tasks.one.ChatServer.connectionsEstablisher(ChatServer.java:42) at tasks.one.ChatServer.main(ChatServer.java:63) Эксепшн в линии 42 это попытка сервера прочитать из сокета: Код: java 1. Я хотел бы понять, что здесь не так. Из-за чего виснет форма, и сервер не читает строку, хотя я записываю её в сокет и вызываю flush(); Я прочитал немало информации по многопоточности в интернете, но пока всё равно не могу понять в чём дело. А может проблема тут и не в многопоточности. Если у вас найдётся время - помогите пожалуйста. Я понимаю, что это не совсем касается чата, которого ожидают на курсах, но мне кажется, что я застрял в каком-то фундаментальном принципе, который должен знать, по этому не могу от него отстать. Он меня мучает. PS: На курсах - те немногие, которые сделали чат - нагуглокодили, и не огут обьяснить как он работает, у преподавателя в этом тоже нет времени разбираться. Спасибо. Коды классов: Класс Сервера: Код: 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. Класс клиента: Код: 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. Класс формы(конкретно кнопки Connect. Всё остальное, пока, сплошное форматирование): Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. tfUserName - ссылка на поле ввода имени пользователя; clientProgram - ссылка на обьект класса клиента полученого через конструктор. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2012, 19:35:08 |
|
||
|
Проблемы с построением клиент-серверного приложения (чат)
|
|||
|---|---|---|---|
|
#18+
Exordin, сервер выполняет операцию readLine() и ждет символ конца строки. Клиент послал строку, но без символа конца. Надо еще выполнить socketWriter.newLine(). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2012, 19:51:32 |
|
||
|
Проблемы с построением клиент-серверного приложения (чат)
|
|||
|---|---|---|---|
|
#18+
rfq, Таки да!! :) Спасибо вам! Я вычитал где-то, что, чтобы это всё работало - нужно оформлять строку .write(переменная_типа_String + "\n"), чтоб произошёл перевод строки, но это не срабатывало. А то, что вы посоветовали - помогло :) Ещё раз спасибо :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2012, 20:13:06 |
|
||
|
|

start [/forum/topic.php?fid=59&tid=2131637]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
37ms |
get topic data: |
17ms |
get forum data: |
3ms |
get page messages: |
45ms |
get tp. blocked users: |
1ms |
| others: | 307ms |
| total: | 444ms |

| 0 / 0 |
