Visual Basic, .NET, ASP, VBScript
 

   
   
     

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

Страница: 1 |

 

  Вопрос: Winsock Server Добавлено: 18.01.09 22:15  

Автор вопроса:  Aston | ICQ: 214-179-991 
Привет всем.
У меня возникла такая проблема. Сделал Winsock Server, который слушает по определённому порту. Компонент Winsock используется в массиве и при каждом новом подключении создаётся новый компонент и сново слушает. Проблему с отключением и использованием старых отключённых компонентов Winsock я решил. Проблема состоит в том что этот компонент предназначен и для работы в интернет. Я тестю программу на компе и интернет часто бывает включён и у меня кроме моего 1 клиента подключается ещё кто то по этому же порту - что мне очень бы не хотелось.
Можно ли как то при подключении идентифицировать того кто подключается чтобы избавится от ненужных подключений?

Ответить

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

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



ICQ: 298826769 

Вопросов: 53
Ответов: 1732
 Профиль | | #1 Добавлено: 18.01.09 23:59
Хм... странно... А что ты за порт слушаешь, 80 что-ли? :) А вообще - в начале просто пересылай какую-нибудь строку, а сервер пусть проверяет - есть строка - работаем дальше, нет - разрываем соединение...

Ответить

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



ICQ: 214-179-991 

Вопросов: 42
Ответов: 272
 Профиль | | #2 Добавлено: 19.01.09 02:20
Порт 2010 слушаю. Я эту идею прошёл. проблема в том, что событие Коннект происходит только на клиенте, тое после соединения только клиент отзывается что соединился. На сервере этого события не происходит, оно в коде получается делается(Слушаем, поступил запрос на соединение - соединяемся.)
  1. For i = 0 To wsServer.Count - 1
  2. If wsServer(i).State = 0 Then
  3. wsServer(i).Accept requestID
  4. GoTo Con
  5. End If
  6. Next i
  7. wsServer(Index).Close
  8. wsServer(Index).Accept requestID
  9. Load wsServer(Index + 1)
  10. wsServer(Index + 1).LocalPort = 2010
  11. wsServer(Index + 1).Listen
  12. Con:

Тут прописывать код для строки получаемой от клиента даже смысла нет не успеет дойти.
Я с клиента пересылаю строку что соединился. У меня ещё была такая проблема, что соединялся но как то по левому, тое соединение вроде есть но передача данных не происходит (ошибки лезут).
для этого на клиенте таймер стоит, который переподсоединяет до тех пор пока пердача данных не будет нормальной - это всё работает и нормально.
Твоё предложение можно принять, и это по ходу тоже надо в таймере ставить(по другому идей даже нет).
Но тут надо подумать дальше. При твоём случае соединение, строка не пришла, дисконект и сново слушаем и соединение. Проблема состоит в том что пару Winsock всё равно будут забиты левым соединением(хотя и будут отключатся и подключатся).
Тут должно быть что то радикальное :)
У меня если честно пока ничего в голову не пришло.

Ответить

Номер ответа: 3
Автор ответа:
 Arseny



ICQ: 298826769 

Вопросов: 53
Ответов: 1732
 Профиль | | #3 Добавлено: 19.01.09 08:22
так по-другому все равно наверное никак... если только проверять IP, и разрешать только известным.

Ответить

Номер ответа: 4
Автор ответа:
 Sneaks



Вопросов: 9
Ответов: 84
 Профиль | | #4 Добавлено: 19.01.09 10:38
поставь фаервол

Ответить

Номер ответа: 5
Автор ответа:
 Roman



Вопросов: 2
Ответов: 2
 Web-сайт: rf-info.do.am
 Профиль | | #5
Добавлено: 19.01.09 10:52
Ой, а можно пожалуйста рассказать про вот это?

Компонент Winsock используется в массиве и при каждом новом подключении создаётся новый компонент и сново слушает. Проблему с отключением и использованием старых отключённых компонентов Winsock я решил.


А то очень надо. Спасибо заранее.

Ответить

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



ICQ: 214-179-991 

Вопросов: 42
Ответов: 272
 Профиль | | #6 Добавлено: 19.01.09 12:15
На счёт Апи подумаю, может что то дельное придумаю.
Рома шас повторю код, хотя он был и выше.
  1. Private Sub wsServer_ConnectionRequest(Index As Integer, ByVal requestID As Long)
  2. For i = 0 To wsServer.Count - 1
  3. If wsServer(i).State = 0 Then
  4. wsServer(i).Accept requestID
  5. GoTo Con
  6. End If
  7. Next i
  8. wsServer(Index).Close
  9. wsServer(Index).Accept requestID
  10. Load wsServer(Index + 1)
  11. wsServer(Index + 1).LocalPort = 2010
  12. wsServer(Index + 1).Listen
  13. Con:
  14. End Sub


По моему мнению код простой и решение тоже, думаю разберёшься если хоть немного работал с этим компонентом.

Ответить

Номер ответа: 7
Автор ответа:
 Arseny



ICQ: 298826769 

Вопросов: 53
Ответов: 1732
 Профиль | | #7 Добавлено: 19.01.09 13:24
Aston пишет:
На счёт Апи подумаю

IP<>API
Я имел ввиду - проверять Winsock1.RemoteHostIP

Ответить

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



ICQ: 214-179-991 

Вопросов: 42
Ответов: 272
 Профиль | | #8 Добавлено: 19.01.09 14:58
Я понял правильно, подумаю как это реализовать как можно лучше и устроит ли оно меня. Пока что я использую отдельно массив нормально подключённых и работаю с ним :)

Ответить

Номер ответа: 9
Автор ответа:
 Smith



ICQ: adamis@list.ru 

Вопросов: 153
Ответов: 3632
 Профиль | | #9 Добавлено: 19.01.09 22:48
Стоит ли заморачиваться с этими левыми коннектами?
Если они активно паразитируют, понятно, а если это просто глюк?
Я бы не стал раздувать нормальный рабочий код, ради достижения недостижимого.

Ответить

Страница: 1 |

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



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