Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Winsock.Close and listView Добавлено: 06.01.09 00:23  

Автор вопроса:  Aston | ICQ: 214-179-991 
Привет всем!
Буду опять всех мучат по поводу компонента Winsock. Я создал сервер с компонентом Winsock в массиве который слушает канал, при запросе подключения он соеденяется и создаёт другой компонент Winsock, которой слушает канал.
wsServer(Index).Close
wsServer(Index).Accept requestID
Load wsServer(Index + 1)
Load txtOutput(Index + 1)
wsServer(Index + 1).LocalPort = 2009
wsServer(Index + 1).Listen

Посоветовали на форуме.
Всё было бы хорошо, если бы не одно но. Как все знают есть такие случаи когда клиент отключается, получается что у определённого компонента срабатывает событие Close, в этом событии я применяю метод клозе. Вопрос состоит в том можно ли как то вернуть этот элемент на прослушку и подключение сново (Я не додумал как) По идее должны отключить последний компонент который слушает ( так как они используют один канал) и включить который был отключён. Проблема ещё в том что отключится могут несколько.

Можно ещё сказать да зачем использовать закрытые компоненты Winsock пусть будут, 1 слушает подключился и работает себе и упрастит сильно дело.
Дело ещё в том что у меня на сервере стоит компонент listView (настроен как таблица) - в котором отражаются подключённые клиенты.
 При первом методе я бы строку с него не удалял и завязал бы строку с индексом компонента, а в разделе (Статус) написал бы "отсоединён", при повторном подключении этого же компонента в эту страку загнал клиента.
При втором способе мне приходится удалять эти строки так как может присутствовать очень много избыточной информации, и увязать индексы со строками просто никак ( удалив одну строку - индекс всех нижних сразу меняется.

Ребята подскажите как лучше связать эти два дела:) Заранее спасиб!

Ответить

  Ответы Всего ответов: 1  

Номер ответа: 1
Автор ответа:
 Aston



ICQ: 214-179-991 

Вопросов: 42
Ответов: 272
 Профиль | | #1 Добавлено: 06.01.09 17:57
Привет всем решил первым способом :) кому интересно посмотрите.
  1. Private Sub wsServer_Close(Index As Integer)
  2. wsServer(Index).Close
  3. lvKomp.ListItems(Index + 1).SubItems(1) = "Ðàçúåäèí¸í"
  4. lvKomp.ListItems(Index + 1).SubItems(2) = "Íåèçâåñòåí"
  5. lvKomp.ListItems(Index + 1).SubItems(3) = "Íåòåñòèðóåòñÿ"
  6. End Sub
  7.  
  8. Private Sub wsServer_ConnectionRequest(Index As Integer, ByVal requestID As Long)
  9. For i = 0 To wsServer.Count - 1
  10. If wsServer(i).State = 0 Then
  11. wsServer(i).Accept requestID
  12. GoTo Con
  13. End If
  14. Next i
  15. wsServer(Index).Close
  16. wsServer(Index).Accept requestID
  17. Load wsServer(Index + 1)
  18. Load txtOutput(Index + 1)
  19. wsServer(Index + 1).LocalPort = 2009
  20. wsServer(Index + 1).Listen
  21. Con:
  22. End Sub
  23.  
  24. Private Sub wsServer_DataArrival(Index As Integer, ByVal bytesTotal As Long)
  25. Dim nom As Integer
  26. Dim dan As String
  27. wsServer(Index).GetData dan
  28. txtOutput(Index).Text = dan
  29. Select Case Left(txtOutput(Index).Text, 4)
  30.     Case Is = "Conn"
  31.         nom = lvKomp.ListItems.Count
  32.         If nom - 1 >= Index Then
  33.             lvKomp.ListItems(Index + 1).Text = Right(txtOutput(Index).Text, Len(txtOutput(Index).Text) - 5)
  34.             lvKomp.ListItems(Index + 1).SubItems(1) = "Ñîåäèí¸í"
  35.             lvKomp.ListItems(Index + 1).SubItems(2) = "Íåèçâåñòåí"
  36.             lvKomp.ListItems(Index + 1).SubItems(3) = "Íåòåñòèðóåòñÿ"
  37.         Else
  38.             lvKomp.ListItems.Add Index + 1, , Right(txtOutput(Index).Text, Len(txtOutput(Index).Text) - 5), , 2
  39.             lvKomp.ListItems(Index + 1).SubItems(1) = "Ñîåäèí¸í"
  40.             lvKomp.ListItems(Index + 1).SubItems(2) = "Íåèçâåñòåí"
  41.             lvKomp.ListItems(Index + 1).SubItems(3) = "Íåòåñòèðóåòñÿ"
  42.         End If
  43. End Select
  44. End Sub

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам