Страница: 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
А зачем использовать
, если я хочу не слушать порт, а соединятца. Вот если бы я использовал Listen(Bind), вот тогда...
Номер ответа: 33
Автор ответа:
mc-black
ICQ: 308-534-060
Вопросов: 20
Ответов: 1860
Web-сайт:
Профиль | | #33
Добавлено: 24.03.06 19:30
Вот-вот, клиенту вообще без надобности привязывать порт - главное чтобы при этом фаервол был всегда не против Просто понасоздавай методом Load новых Winsock-контролов в отдельных потоках (CreateThread) и каждым в отдельности качай чего там тебе надо.
Номер ответа: 34
Автор ответа:
AsHeS
ICQ: 229759992
Вопросов: 14
Ответов: 93
Профиль | | #34
Добавлено: 27.03.06 16:33
Нашел в закромах родины
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
Если я правильно новый винсок в массиве активируется строкой
Номер ответа: 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
я вибираю
така какие апи? Напишите пожалуйста! Пли-и-из!
Номер ответа: 41
Автор ответа:
Programmer
Вопросов: 71
Ответов: 246
Профиль | | #41
Добавлено: 03.04.06 13:02
я вибираю
така какие апи? Напишите пожалуйста! Пли-и-из!
И чтобы вместе с винсоком.
Номер ответа: 42
Автор ответа:
Programmer
Вопросов: 71
Ответов: 246
Профиль | | #42
Добавлено: 06.04.06 16:09
Люди, ну напишите, какие АПИ и как их использовать?!!!
Номер ответа: 43
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #43
Добавлено: 06.04.06 19:05
схади на dasharm.com там тусуют монстры сетевого программирования вбсокет найди что-ли...