|
TCP сервер в WinForm приложении
|
|||
---|---|---|---|
#18+
Я работаю на С++, но тут потребовалось доработать .NET приложение. Прошу помочь. Есть WinForm приложение, нужно что бы оно запускало TCP сервер и принимало некие текстовые команды. По мотивам с Хабра я сделал нечто (класс TcpServer) что вроде бы работает. Кроме одной проблемы, приложение падает на выходе. Т.е. оно получает команду "Q" и в потоке GUI вызывается метод Close() для главной формы. В событии FormClosing() вызывается метод TcpServer.Stop(). И я так понимаю, что падает оно именно на TcpServer.Stop(). Нужно как-то прервать поток блокирующего чтения. Без метода TcpServer.Stop() оно вообще зависает. Заранее спасибо. Код: c# 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2020, 15:11 |
|
TCP сервер в WinForm приложении
|
|||
---|---|---|---|
#18+
petrav По мотивам с Хабра я сделал нечто Лучше, все-таки, делать по мотивам с документации :)) Удивительно даже не то, что оно падает, а то что оно не падает еще до момента падения :)) ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2020, 16:39 |
|
TCP сервер в WinForm приложении
|
|||
---|---|---|---|
#18+
fkthat petrav По мотивам с Хабра я сделал нечто Лучше, все-таки, делать по мотивам с документации :)) Удивительно даже не то, что оно падает, а то что оно не падает еще до момента падения :)) Понимаете, .NET — это не мой профиль. У меня тут в модернизации три проекта одновременно и мне нужен результат. Нет времени изучать .NET ради ерундовой доработки. Впрочем, проблему я решил. Я сам удивляюсь, что оно работает. Но если Вы можете мне что-то посоветовать, то я Вас с удовольствием выслушаю. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2020, 17:09 |
|
TCP сервер в WinForm приложении
|
|||
---|---|---|---|
#18+
petrav Нет времени изучать .NET ради ерундовой доработки. Лично я, все-таки, для ерундовой замены смесителя в ванной предпочитаю пригласить профессионального сантехника, а не делать это самому, рискуя залить потом полдома на стоимость в пару-тройку своих зарплат ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2020, 18:00 |
|
TCP сервер в WinForm приложении
|
|||
---|---|---|---|
#18+
fkthat petrav Нет времени изучать .NET ради ерундовой доработки. Лично я, все-таки, для ерундовой замены смесителя в ванной предпочитаю пригласить профессионального сантехника, а не делать это самому, рискуя залить потом полдома на стоимость в пару-тройку своих зарплат Не логично себя ведёте. Троллить тоже нужно профессионально. А у Вас как-то кисло получается. Наняли бы творческого человека, который для Вас писал бы подобные посты. Что бы с огоньком, с изюминкой, что бы жертву пробирало аж до "да не бомбит у меня" . Скучно с вами, с любителями. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2020, 18:15 |
|
TCP сервер в WinForm приложении
|
|||
---|---|---|---|
#18+
petrav Троллить тоже нужно профессионально. Да я без всякой мысли про трололо. Просто считаю, что каждой задачей должен заниматься человек с соответствующей подготовкой. Если бы меня нагрузили на С++ что-то делать, то я бы просто отказался. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2020, 18:25 |
|
TCP сервер в WinForm приложении
|
|||
---|---|---|---|
#18+
thread.Abort(); вот такого быть не должно от слова совсем, поток завершится сам, как только будет к этому готов так же проблема этого запроса в том, что в буфере может быть не вся строка, может быть часть строки и даже часть часть символа. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2020, 18:37 |
|
TCP сервер в WinForm приложении
|
|||
---|---|---|---|
#18+
petrav, Вот простейший пример (без параллельной обработки запросов): Код: c# 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2020, 00:58 |
|
TCP сервер в WinForm приложении
|
|||
---|---|---|---|
#18+
Код: c# 1. 2. 3.
А што так можно было? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2020, 01:27 |
|
TCP сервер в WinForm приложении
|
|||
---|---|---|---|
#18+
Relic Hunter Код: c# 1. 2. 3.
А што так можно было? Приватное поле инициализированное нуллом (хотя это не требуется, т.к. поля автоматически инициализируются значением по умолчанию и линтер на такое выдаст предупреждение). ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2020, 01:47 |
|
TCP сервер в WinForm приложении
|
|||
---|---|---|---|
#18+
Што такое линтер? Не слышал. fkthat Relic Hunter Код: c# 1. 2. 3.
А што так можно было? Приватное поле инициализированное нуллом (хотя это не требуется, т.к. поля автоматически инициализируются значением по умолчанию и линтер на такое выдаст предупреждение). ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2020, 01:58 |
|
TCP сервер в WinForm приложении
|
|||
---|---|---|---|
#18+
Если попытаться использовать неинициализированную переменную VS выдаст ошибку и не соберет проект. Причем здесь какой-то линтер с его ненужными предупреждениями? fkthat ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2020, 02:17 |
|
TCP сервер в WinForm приложении
|
|||
---|---|---|---|
#18+
Relic Hunter Если начать использовать неинициализированную переменную VS выдаст ошибку и не соберет проект. Причем здесь какой-то линтер с его ненужными предупреждениями? Ерунду не пиши. https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/language-specification/classes#fields The initial value of a field, whether it be a static field or an instance field, is the default value (Default values) of the field's type. It is not possible to observe the value of a field before this default initialization has occurred, and a field is thus never "uninitialized". ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2020, 02:24 |
|
TCP сервер в WinForm приложении
|
|||
---|---|---|---|
#18+
Relic Hunter Если попытаться использовать неинициализированную переменную VS выдаст ошибку и не соберет проект. Это касается только локальных переменных. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2020, 05:46 |
|
TCP сервер в WinForm приложении
|
|||
---|---|---|---|
#18+
Автор, тебе нужен не TCP- сервер, а сокет-сервер. Желательно, асинхронный. Но код бесплатно за тебя никто писать не будет. Направление я дал. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2020, 07:45 |
|
TCP сервер в WinForm приложении
|
|||
---|---|---|---|
#18+
petrav fkthat пропущено... Лучше, все-таки, делать по мотивам с документации :)) Удивительно даже не то, что оно падает, а то что оно не падает еще до момента падения :)) Понимаете, .NET — это не мой профиль. У меня тут в модернизации три проекта одновременно и мне нужен результат. Нет времени изучать .NET ради ерундовой доработки. Впрочем, проблему я решил. Я сам удивляюсь, что оно работает. Но если Вы можете мне что-то посоветовать, то я Вас с удовольствием выслушаю. 1. Нет времени изучать .NET ради ерундовой доработки. - лучше и не скажешь 2. "Я сам удивляюсь, что оно работает." - не удивляйтесь, вряд ли оно работает. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2020, 16:34 |
|
TCP сервер в WinForm приложении
|
|||
---|---|---|---|
#18+
Ролг Хупин 1. Нет времени изучать .NET ради ерундовой доработки. - лучше и не скажешь 2. "Я сам удивляюсь, что оно работает." - не удивляйтесь, вряд ли оно работает. Вам есть что сказать по моему коду или просто хочется поболтать? Только плиз без лямбд и прочих линкью. Кстати, проблема с выходом из потока чтения решилась просто. Удалённое приложение разрывает коннект и поток чтения генерирует по этому поводу исключение. Дальше try/catch и выход их потока. Всё это конечно система нипель. Но пока работает. Да, это печально всё. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2020, 09:56 |
|
TCP сервер в WinForm приложении
|
|||
---|---|---|---|
#18+
fkthat petrav Троллить тоже нужно профессионально. Да я без всякой мысли про трололо. Просто считаю, что каждой задачей должен заниматься человек с соответствующей подготовкой. Если бы меня нагрузили на С++ что-то делать, то я бы просто отказался. А еще есть поговорка-хочешь сделать хорошо- сделай сам. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2020, 10:09 |
|
TCP сервер в WinForm приложении
|
|||
---|---|---|---|
#18+
petrav Да, это печально всё. "Печально" это видеть таких "специалистов" как ты. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2020, 10:15 |
|
TCP сервер в WinForm приложении
|
|||
---|---|---|---|
#18+
fkthat petrav Да, это печально всё. "Печально" это видеть таких "специалистов" как ты. Хорошо, что это мои проблемы, а не ваши. Меня другое удивляет. Ведь вопрос же простой и сформулирован в первом же посте: как прервать поток блокирующего чтения? Конечно, Abort() это крайняя мера. Почему никто из вас ответить не может? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2020, 10:46 |
|
TCP сервер в WinForm приложении
|
|||
---|---|---|---|
#18+
petrav Почему никто из вас ответить не может? petrav Только плиз без лямбд и прочих линкью. Вот приходит к тебе человек и просит подсказать, как половчее пассатижами забить гвоздь. Ты заикаешься про молоток, а он тебе говорит ненене, я вообще молотком не работаю и не хочу разбираться, расскажи про пассатижи. Вот будет у тебя желание ответить на его простой вопрос? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2020, 12:02 |
|
TCP сервер в WinForm приложении
|
|||
---|---|---|---|
#18+
Shocker.Pro petrav Почему никто из вас ответить не может? Т.е. корректно завершить поток чтения из Ethernet — это уже говнокод? Неожиданно. Shocker.Pro А когда ТС пишет petrav Только плиз без лямбд и прочих линкью. Вот приходит к тебе человек и просит подсказать, как половчее пассатижами забить гвоздь. Ты заикаешься про молоток, а он тебе говорит ненене, я вообще молотком не работаю и не хочу разбираться, расскажи про пассатижи. Вот будет у тебя желание ответить на его простой вопрос? Аналогия некорректна. Я, например, использую лямбды в С++, но если меня попросят в стиле: можно как-нибудь попроще, а то у меня обстоятельства? Конечно, я в своём совете обойдусь и без лямбд. Потому что это не более чем синтаксический сахар. По сути к искусству программирования отношения не имеет, если совсем уж плотно не погружаться в функциональные языки. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2020, 12:40 |
|
|
start [/forum/topic.php?fid=20&msg=40022532&tid=1398412]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
31ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
49ms |
get tp. blocked users: |
1ms |
others: | 269ms |
total: | 397ms |
0 / 0 |