Toon posts:

[VB6] Winsock synchronous gebruiken ipv asynchronous

Pagina: 1
Acties:

Verwijderd

Topicstarter
Titel zegt het al eigenlijk :)

Ik gebruik winsock in een DLL om wat bestanden te uploaden naar een servertje (via het FTP protokool).
Ik heb het hele handeltje al inelkaar gezet en het lijkt nog te werken ook :*)

Maar (zoals dat bij FTP hoort) moet de client de data verbinding dicht smijten als het bestand verstuurd is. Maar omdat winsock asynchronous werkt wordt het _SendComplete event al aangeroepen als de data in het buffer is geplaatst en dus niet _echt_ verstuurd is. Ik kan _SendComplete dus niet gebruiken om af te vangen waneer ik de verbinding kan killen.

Nu verbreekt de server de data verbinding en stuur een reply 426 ipv een 250 terug :( Het bestand staat dan wel op de server, maar de code 'weet dit niet' omdat er een 250 verwacht wordt.

Kan ik winsock op de een of andere manier synchronous laten werken ? Of is een handig truukje voor :P


//PS
426 = Data Connection closed; transfer aborted.
250 = Requested File Action Okay, Completed

  • johnwoo
  • Registratie: Oktober 1999
  • Laatst online: 14:43

johnwoo

3S-GTE

Wordt het SendComplete event echt al aangeroepen voordat de data verstuurd is? Dat lijkt me nogal stug... Is het niet iets anders waardoor je die connection aborted krijgt? Probeer anders in de SendComplete handler even te wachten voordat je de verbinding sluit.
Een voor de hand liggend synchroon alternatief is het direct zelf gebruiken van de socket API.

[ Voor 9% gewijzigd door johnwoo op 17-12-2002 15:42 ]

4200Wp ZO + 840Wp ZW + 1680Wp NW | 14xIQ7+ + 1xDS3-L | MTVenusE | HWP1


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Kijk eens naar het _SendProgress event (hangt me iets van bij). Misschien heb je daar wat aan?

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Verwijderd

Topicstarter
Nee het event wordt echt aangeroepen, ik zie nl in de Intermediate (ook bij _SendProgress) dat de data verstuurd is, en op de monitor naast me zie ik de data vrolijk binnen komen terwijl VB al zegt dat dit verstuurd is.

Ik heb ergens gelezen dat dit in een buffer gestopt wordt en winsock handelt het verder wel voor mij af (asynchronous).

Ik zal eens naar die socket API kijken, ben er al veel over tegenkomen, maar niet in leesbare vorm :)


Jaah, met de API's kan het wel (dan kun je nl wel synchronous werken


//Edit : Oplossing gevonden toegevoegd.

[ Voor 12% gewijzigd door Verwijderd op 18-12-2002 15:29 ]