Visual Basic, .NET, ASP, VBScript
 

   
   
     

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

Страница: 1 |

 

  Вопрос: Winsock и While Добавлено: 26.12.02 22:51  

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

помогите плз разобраться %)

Программа должна выбирать из базы некоторые e-mail, потом коннектится на 80 порт к некоему серваку, выгр[sensored]ь в соответствии с данным е-маилом некую страницу и отсылать ее по этому емалу в теле письма. Каждому е-маилу соответствует свое ключевое слово ( по этому ключ. слову она и должна определять страницу)

если писать так :

.....................

With Winsock1

.RemoteHost = "www.rover.msft"

.RemotePort = "80"

End With

Winsock1.Connect

....................

Private Sub Winsock1_Connect()

Dim strCommand As String

Dim strWebPage As String

strWebPage = "http://www.rover.msft/search/search.asp"

'strWebPage = "/"

strCommand = "GET " & strWebPage & " HTTP/1.0" & vbCrLf

strCommand = strCommand & "Accept: */*" & vbCrLf

strCommand = strCommand & "Accept: text/html" & vbCrLf

strCommand = strCommand & vbCrLf

Winsock1.SendData strCommand

End Sub

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)

'Dim strData As String

Winsock1.GetData Body, vbString

End Sub

Private Sub Winsock1_Close()

Winsock1.Close

End Sub

то все работает, он страницу http://www.rover.msft/search/search.asp вытягивает. Если же winsock1.connect включить в while, то он вообще ничего не вытягивает

sel.ActiveConnection = ...

sel.Source = "SELECT ..."

sel.CursorType = 0

sel.CursorLocation = 2

sel.LockType = 3

sel.Open

With Winsock1

.RemoteHost = "www.rover.msft"

.RemotePort = "80"

End With

While Not sel.EOF

Bccstr = sel("email")

KeyWord = sel("keyword")

Winsock1.Connect

Dim MailKeyword As New CDONTS.NewMail

MailKeyword.From = ""

MailKeyword.Bcc = Bccstr

MailKeyword.Subject = "TEST"

MailKeyword.BodyFormat = 0

MailKeyword.MailFormat = 0

MailKeyword.Body = Body

Body = Empty

MailKeyword.Send

Set MailKeyword = Nothing

Sleep 2000

sel.MoveNext

Winsock1.Close

Wend

Private Sub Winsock1_Connect()

Dim strCommand As String

Dim strWebPage As String

strWebPage = "http://www.rover.msft/search/search.asp" '''?typeR=K&KeyWord=" & KeyWord & "&positionthis=999999"

'strWebPage = "/"

strCommand = "GET " & strWebPage & " HTTP/1.0" & vbCrLf

strCommand = strCommand & "Accept: */*" & vbCrLf

strCommand = strCommand & "Accept: text/html" & vbCrLf

strCommand = strCommand & vbCrLf

FileWriten (strCommand)

Winsock1.SendData strCommand

End Sub

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)

'Dim strData As String

Winsock1.GetData Body, vbString

FileWriten (Body)

End Sub

Private Sub Winsock1_Close()

Winsock1.Close

End Sub

почему он не хочет работать внутри while. Письма отсылает с пустым body

Ответить

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

Номер ответа: 1
Автор ответа:
 User Unknown



Вечный Юзер!

ICQ: uu@jabber.cz 

Вопросов: 120
Ответов: 3302
 Профиль | | #1 Добавлено: 27.12.02 09:48

Ну хоть на первом цикле он фурычит? Вообще я думаю, что вот здесь чуточку некорректно:

"GET " & strWebPage & " HTTP/1.0" & vbCrLf"

Я бы написал так:

"GET " & strWebPage & " HTTP/1.0\n\n"

Хотя.. по большому счету по-барабану.

По-моему код какой-то неполный... я например так и не понял кто такой этот CDONTS :)))

Ответить

Номер ответа: 2
Автор ответа:
 User Unknown



Вечный Юзер!

ICQ: uu@jabber.cz 

Вопросов: 120
Ответов: 3302
 Профиль | | #2 Добавлено: 27.12.02 09:54

Упс... про \n\n забудь. Это я под линухом на Сях писал:)

Ответить

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



Вопросов: 13
Ответов: 12
 Профиль | | #3 Добавлено: 27.12.02 14:51
CDONTS это чтоб почту отправлять

Ответить

Номер ответа: 4
Автор ответа:
 Андрей Щёкин [darxeth]



ICQ: 161560107 

Вопросов: 9
Ответов: 52
 Web-сайт: www.livejournal.com/users/darxeth_digital
 Профиль | | #4
Добавлено: 27.12.02 20:02

Хм, у тебя в While стоит команда Winsock.Connect. VB её выполняет, но ты не можешь заранее предсказать, когда случится событие Winsock_DataArrival. Скорее всего оно случится не сразу после Connect, если без DoEvents вообще случится до выхода из процедуры с циклом. В общем поставь Breakpoint в событие Winsock_DataArrival и проверь когда оно происходит.

 

Ответить

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



Вопросов: 13
Ответов: 12
 Профиль | | #5 Добавлено: 27.12.02 22:41
пробовал паузу аж на 10 сек ставить... (у меня сервак 300 коннекшинов обрабатывает за 7 сек)

Ответить

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



Вопросов: 13
Ответов: 12
 Профиль | | #6 Добавлено: 28.12.02 19:49

так что, никто не подскажет?

Ответить

Номер ответа: 7
Автор ответа:
 Андрей Щёкин [darxeth]



ICQ: 161560107 

Вопросов: 9
Ответов: 52
 Web-сайт: www.livejournal.com/users/darxeth_digital
 Профиль | | #7
Добавлено: 29.12.02 19:45

Попробуй вместо Sleep:

<PRE>

Dim tTimer As Double

tTimer = Timer

Do Until tTimer - Timer > (размер_паузы_в_мс / 100)

      DoEvents

Loop

</PRE>

 

Ответить

Страница: 1 |

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



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