VB.net: Ошибка, когда Socket закрывает сервер

Добрый вечер, сначала я комментирую вам ресурсы, которые я использую с маленькими изменениями.

  1. Сервер sockets я это взял этого учебника. http://www.elguille.info/colabora/puntoNET/PabloTilli_SocketsVBNET.htm

  2. Клиент я использую версию visual studio 2010 этой веб-страницы. http://www.ajpdsoft.com/modules.php?name=News&file=article&sid=579

Я смог послать сообщения с обеих сторон, проблема, которая у меня есть, состоит в том, что, когда я закрываю сервер с нею x, у меня остаются visual studio работая, я представляю, что он будет, потому что есть какой-то трэд где-то здесь функционируя, но он не был бы должен быть не?

0
задан 22.09.2016, 20:28
2 ответа

Я думаю, что действительно проблема, - в котором ты закрываешь формуляр (сервер), что заканчивает трэд, где этот прокручивает изображение в окне, но это не обязательно закрывает трэды, открытые им: когда ты закрываешь приложение (с X) заканчивается главный трэд и любой трэд "фона" (Баккгроунд Треад), но это не заканчивает трэды "спереди" (Форегроунд Треад).

Документации мы имеем:

Одиннадцать all foreground threads belonging to в process have terminated, the common language runtime ends the process. Any remaining background threads пахал stopped and do not завершите...

By default, the following threads execute in the foreground (that is, their IsBackground property returns false):

  • The primary thread (or main application thread).
  • All threads created by calling в строительного Thread class.

Решение:

Самое простое состоит, в том, чтобы создав трэд, ты показал ему, что это трэд "фона":

tcpThd = New Thread(AddressOf EsperarCliente)
tcpThd.IsBackground = True
tcpThd.Start()

Таким образом, закрыв для себя все трэды спереди (в твоем одиноком случае один: главный), все трэды фона закроются немедленно (CLR берется за то, чтобы заканчивать их).

Как добавочное замечание: прими во внимание, что статья о Guille - 12 лет назад! не обязательно будьте самым работоспособным / безопасным способом делать то, что ты хочешь в настоящее время (хотя будь хорошо, если ты только практикуешь).

1
ответ дан 24.11.2019, 13:19
  • 1
    Способ больше " простая, который я нашел, чтобы играть с sockets. Может быть, бук лучшие другие, ты можешь показывать мне какую-то страницу ссылки?, much и # 237; пропасти спасибо. –  JCN 06.10.2016, 18:45
  • 2
    Он оставался, не закрываясь, схвати, что сделанный hque был в formclosingPrivate Sub frmPpal_FormClosing (sender Эксперт Обхект, и Эксперт FormClosingEventArgs) Handles Me.FormClosing WinSockServer.Cerrar() End Sub и на процесс Закрывать я изменил порядок и - в и # 241; adido завершение thread. Может быть, будьте очень ортодоксальным, или совсем не...., но хорошим... For Each InfoClienteActual In Clientes.Values Call CerrarThread(IDClienteActual) Call Cerrar(InfoClienteActual.Socket.RemoteEndPoint) Next –  JCN 06.10.2016, 19:04

Восток cГіdigo я использовал в процедуре завершения, в которое я позвонил из formclosing, это не будет самая ортодоксальная форма, но функционируй.

Public Sub Cerrar() Dim InfoClienteActual As InfoDeUnCliente
For Each InfoClienteActual In Clientes.Values Call CerrarThread(IDClienteActual) Call Cerrar(InfoClienteActual.Socket.RemoteEndPoint) Next End Sub

1
ответ дан 24.11.2019, 13:19