Visual Basic, .NET, ASP, VBScript
 

   
   
     

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

Страница: 1 | 2 | 3 |

 

  Вопрос: Исползование 2 Winsock-а в один порт. Добавлено: 05.03.06 21:20  

Автор вопроса:  Programmer

Ответить

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

Номер ответа: 31
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #31 Добавлено: 24.03.06 11:07
Да поняли тебя, поняли :)
Только непонятно - почему ты не хочешь использовать.LocalPort = 0 ? Портов жалко что ли :)

Ответить

Номер ответа: 32
Автор ответа:
 Programmer



Вопросов: 71
Ответов: 246
 Профиль | | #32 Добавлено: 24.03.06 14:57
А зачем использовать
LocalPort = 0 ?

, если я хочу не слушать порт, а соединятца. Вот если бы я использовал Listen(Bind), вот тогда...

Ответить

Номер ответа: 33
Автор ответа:
 mc-black



ICQ: 308-534-060 

Вопросов: 20
Ответов: 1860
 Web-сайт: mc-black.narod.ru/dzp.htm
 Профиль | | #33
Добавлено: 24.03.06 19:30
Вот-вот, клиенту вообще без надобности привязывать порт - главное чтобы при этом фаервол был всегда не против :) Просто понасоздавай методом Load новых Winsock-контролов в отдельных потоках (CreateThread) и каждым в отдельности качай чего там тебе надо.

Ответить

Номер ответа: 34
Автор ответа:
 AsHeS



ICQ: 229759992 

Вопросов: 14
Ответов: 93
 Профиль | | #34 Добавлено: 27.03.06 16:33
Нашел в закромах родины
Dim rcv As String

Dim bSending() As Boolean
Dim bFreeAccept() As Boolean

Private Sub Listen_ConnectionRequest(ByVal requestID As Long)
Debug.Print Now, "Listen_ConnectionRequest", requestID
Dim i As Long
    'find free accept winsock
    For i = 0 To NumSockets
        If bFreeAccept(i) Then Exit For
        DoEvents
    Next
    Debug.Print Now, "Listen_ConnectionRequest->Find free ", i
    ConcurrentlyConnections = ConcurrentlyConnections + 1
    If ConcurrentlyConnections > MaxConnections Then MaxConnections = ConcurrentlyConnections
    bFreeAccept(i) = False
    If Accept(i).State <> sckClosed Then Accept(i).Close
    Accept(i).Accept requestID
End Sub


Private Sub Accept_DataArrival(index As Integer, ByVal bytesTotal As Long)
Debug.Print Now, "Accept_DataArrival ", index, bytesTotal

Dim strData As String
    Accept(index).GetData rcv
    
    
     ' выделяем путь к файлу
      Call FilePach(rcv, FilePath, Param)
     If Param <> "" Then
     Call Parametrs(Param, Predmet, Statya)
        'Debug.Print Param + vbCrLf + Predmet + vbCrLf + Statya
     End If
   ' вытаскиваем данные из файла
      Select Case FilePath ' Выбираем тип запроса (list файл или что-то другое)
    Case "\close"
       End
    Case FilePath 'Данный Case для случая когда идет запрос файла а не части программы
      Call fileStr(FilePath, fileSt)
    End Select
            
   ' Добавляем "голову" к отправляемой информации
      Call AddHead(FilePath, head, Len(fileSt))
      fileSt = head & vbCrLf & vbCrLf & fileSt
    
    
    DoEvents
    bSending(index) = True
    Accept(index).SendData fileSt
    Do Until Not bSending(index)
         DoEvents
    Loop
    Accept(index).Close
    bFreeAccept(index) = True
    DoEvents
Debug.Print Now, "Accept_DataArrival->Free", index, ConcurrentlyConnections
    ConcurrentlyConnections = ConcurrentlyConnections - 1

 fileSt = "" ' очищаем переменные
 Param = ""
 Predmet = ""
 Statya = ""


End Sub

Private Sub Accept_SendComplete(index As Integer)
    bSending(index) = False
End Sub


Private Sub Form_Load()
Dim i As Long
    'load controls for concurrently connections
    NumSockets = 100
    ReDim bFreeAccept(NumSockets)
    ReDim bSending(NumSockets)
    bFreeAccept(0) = True
    bSending(0) = False
    For i = 1 To NumSockets
        Load Accept(i)
        bFreeAccept(i) = True
        bSending(i) = False
    Next
    ConcurrentlyConnections = 0
    'config listen winsock
    Listen.LocalPort = 80
    Listen.Listen

main.Hide

End Sub

Если я правильно новый винсок в массиве активируется строкой
Load Accept(i)

Ответить

Номер ответа: 35
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #35 Добавлено: 28.03.06 11:12

Просто понасоздавай методом Load новых Winsock-контролов в отдельных потоках (CreateThread) и каждым в отдельности качай чего там тебе надо.

Проще запустить винсоки в асинхронном режиме.
А с этой CreateThread просто завалишь все приложение.

Ответить

Номер ответа: 36
Автор ответа:
 AsHeS



ICQ: 229759992 

Вопросов: 14
Ответов: 93
 Профиль | | #36 Добавлено: 29.03.06 16:09
Запоздал я со своим кодом .
Ну а разве при коннекте надо прописывать локальный порт ?
В принципе юзай массив винсоков , и каждым отдельно делай коннект - многопоточность

Ответить

Номер ответа: 37
Автор ответа:
 Programmer



Вопросов: 71
Ответов: 246
 Профиль | | #37 Добавлено: 31.03.06 22:35
Зачем мне такой код? Я не использую ни accert, ни listen. Я использую метод connect! Повторяю:
сэрвер использует accert, listen, а клиент, к сэрверу, использует Connect!

Ответить

Номер ответа: 38
Автор ответа:
 Programmer



Вопросов: 71
Ответов: 246
 Профиль | | #38 Добавлено: 31.03.06 22:36
Массив виенсоков не помогает! Пишет Address in Use!

Ответить

Номер ответа: 39
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #39 Добавлено: 03.04.06 10:48
В общем, три страницы тебе объясняли - и все впустую... Во многом из-за флудеров :)
1. Использовать другой контрол.
2. Использовать API и SO_ReUseAddr
3. Установить LocalPort=0. Если тебе нужен Connect, то ты жестко привязан только по RemotePort.
Что еще непонятно?

Ответить

Номер ответа: 40
Автор ответа:
 Programmer



Вопросов: 71
Ответов: 246
 Профиль | | #40 Добавлено: 03.04.06 13:01
я вибираю
2. Использовать API и SO_ReUseAddr

така какие апи? Напишите пожалуйста! Пли-и-из!

Ответить

Номер ответа: 41
Автор ответа:
 Programmer



Вопросов: 71
Ответов: 246
 Профиль | | #41 Добавлено: 03.04.06 13:02
я вибираю
2. Использовать API и SO_ReUseAddr

така какие апи? Напишите пожалуйста! Пли-и-из!
И чтобы вместе с винсоком.

Ответить

Номер ответа: 42
Автор ответа:
 Programmer



Вопросов: 71
Ответов: 246
 Профиль | | #42 Добавлено: 06.04.06 16:09
Люди, ну напишите, какие АПИ и как их использовать?!!!

Ответить

Номер ответа: 43
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #43 Добавлено: 06.04.06 19:05
схади на dasharm.com там тусуют монстры сетевого программирования :) вбсокет найди что-ли... ;)

Ответить

Страница: 1 | 2 | 3 |

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



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