|
| Fil overførelse Fra : Tajen |
Dato : 18-01-02 13:45 |
|
Kan man overføre filer med winsock???...
| |
Thomas Nielsen (18-01-2002)
| Kommentar Fra : Thomas Nielsen |
Dato : 18-01-02 14:39 |
|
"Tajen" <tajen@genistreg.dk> wrote in message
news:3c481937$0$62877$edfadb0f@dspool01.news.tele.dk...
> Kan man overføre filer med winsock???...
Ja det kan du, men sender du store mængder binære data giver det ofte
problemer.
En mulig løsning er evt at uuencode din fil først også sende den.
/Thomas
| |
Tomas Christiansen (18-01-2002)
| Kommentar Fra : Tomas Christiansen |
Dato : 18-01-02 23:40 |
|
Thomas Nielsen skrev:
> Ja det kan du, men sender du store mængder binære data giver det
ofte
> problemer.
Hvorfor?
Hvad kan der være problemer med?
-------
Tomas
| |
Morten Snedker (19-01-2002)
| Kommentar Fra : Morten Snedker |
Dato : 19-01-02 15:51 |
|
On Fri, 18 Jan 2002 23:40:29 +0100, "Tomas Christiansen"
<toc@blikroer.removethis.dk> wrote:
>Thomas Nielsen skrev:
>> Ja det kan du, men sender du store mængder binære data giver det
>ofte
>> problemer.
>
>Hvorfor?
>Hvad kan der være problemer med?
Næh vel? Så vidt jeg ved er det Winsock'en der bruges, ex. til
Internet...ik' ?
/Snedker
| |
Vestergaard (19-01-2002)
| Kommentar Fra : Vestergaard |
Dato : 19-01-02 16:32 |
|
"Morten Snedker" <morten_nospam@dbconsult.dk> skrev i en meddelelse
news:3c49879f.1039314@news.inet.tele.dk...
> On Fri, 18 Jan 2002 23:40:29 +0100, "Tomas Christiansen"
> <toc@blikroer.removethis.dk> wrote:
>
> >Thomas Nielsen skrev:
> >> Ja det kan du, men sender du store mængder binære data giver det
> >ofte
> >> problemer.
> >
> >Hvorfor?
> >Hvad kan der være problemer med?
>
> Næh vel? Så vidt jeg ved er det Winsock'en der bruges, ex. til
> Internet...ik' ?
>
> /Snedker
Da jeg prøvede at lave en filoverførsel med winsock var der det problem at
hvis det var for store mængder data kunne det ikke være i bufferen, og
derfor ikke sendes. Jeg fandt ud af at jeg skulle splitte filen op og sende
delene hver for sig, og så samle den igen på remote-siden.
Spørg ikke om et eksempel for jeg gik død med projektet :(
Jacob V.
| |
Tajen (19-01-2002)
| Kommentar Fra : Tajen |
Dato : 19-01-02 17:31 |
|
"Vestergaard" <svester@post5.tele.dk> skrev i en meddelelse
news:3c49925f$0$231$edfadb0f@dspool01.news.tele.dk...
>
> "Morten Snedker" <morten_nospam@dbconsult.dk> skrev i en meddelelse
> news:3c49879f.1039314@news.inet.tele.dk...
> > On Fri, 18 Jan 2002 23:40:29 +0100, "Tomas Christiansen"
> > <toc@blikroer.removethis.dk> wrote:
> >
> > >Thomas Nielsen skrev:
> > >> Ja det kan du, men sender du store mængder binære data giver det
> > >ofte
> > >> problemer.
> > >
> > >Hvorfor?
> > >Hvad kan der være problemer med?
> >
> > Næh vel? Så vidt jeg ved er det Winsock'en der bruges, ex. til
> > Internet...ik' ?
> >
> > /Snedker
>
>
> Da jeg prøvede at lave en filoverførsel med winsock var der det problem at
> hvis det var for store mængder data kunne det ikke være i bufferen, og
> derfor ikke sendes. Jeg fandt ud af at jeg skulle splitte filen op og
sende
> delene hver for sig, og så samle den igen på remote-siden.
> Spørg ikke om et eksempel for jeg gik død med projektet :(
>
> Jacob V.
>
>
Nu er det bare sådan at hvis jeg forsøge at sende en fil..
åbner den med binary access... sender ca. 4byte af en fil på 20mb...
| |
Tomas Christiansen (21-01-2002)
| Kommentar Fra : Tomas Christiansen |
Dato : 21-01-02 00:12 |
|
Tajen skrev:
> > "Morten Snedker" <morten_nospam@dbconsult.dk> skrev i en
meddelelse
> > news:3c49879f.1039314@news.inet.tele.dk...
> > > On Fri, 18 Jan 2002 23:40:29 +0100, "Tomas Christiansen"
> > > <toc@blikroer.removethis.dk> wrote:
osv. osv.
Vær venlig kun at citere det (dvs. den eller de få linier), som du
svarer på.
> Nu er det bare sådan at hvis jeg forsøge at sende en fil..
> åbner den med binary access... sender ca. 4byte af en fil på 20mb...
Okay, så se her:
1. Opret et almindeligt exe-projekt (kald det GET) med en form.
2. Placer en label på formen, kald labelen lblProgress og sæt dens
AutoSize egenskab til True.
3. Læg følgende kode ind:
Option Explicit
Private bFirst As Boolean
Private iFile As Integer
Private Sub Form_Load()
bFirst = True
WS.LocalPort = 30111
WS.Listen
End Sub
Private Sub WS_Close()
If iFile <> 0 Then Close #iFile: iFile = 0
WS.Close
lblProgress = "Done"
Form_Load
End Sub
Private Sub WS_ConnectionRequest(ByVal requestID As Long)
WS.Close
WS.Accept requestID
lblProgress = "0"
End Sub
Private Sub WS_DataArrival(ByVal bytesTotal As Long)
Dim bData() As Byte
Dim bNameLen() As Byte
Dim sFilename As String
If bytesTotal = 0 Then Exit Sub
If bFirst Then
WS.GetData bNameLen, , 2
WS.GetData bData, , bNameLen(0)
sFilename = bData
iFile = FreeFile
Open sFilename & ".WSGET" For Binary As #iFile
bFirst = False
End If
WS.GetData bData
Put #iFile, , bData
lblProgress = LOF(iFile)
lblProgress.Refresh
End Sub
Private Sub WS_Error(ByVal Number As Integer, Description As String,
ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String,
ByVal HelpContext As Long, CancelDisplay As Boolean)
MsgBox "Get error: " & Description
Unload Me
End Sub
4. Opret et nyt almindeligt exe-projekt (kald det PUT) med en form.
5. Placer en label på formen, kald labelen lblProgress og sæt dens
AutoSize egenskab til True.
6. Placer en textbox på formen og kald den txtFile.
7. Læg følgende kode ind:
Option Explicit
Const BlockSize As Long = 60000
Private iFile As Integer
Private Sub txtFile_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
txtFile.Enabled = False
WS.Connect "127.0.0.1", 30111
End If
End Sub
Private Sub WS_Connect()
Dim bData() As Byte
iFile = FreeFile
Open txtFile.Text For Binary As #iFile
bData = Chr(LenB(txtFile.Text)) & txtFile.Text
WS.SendData bData
End Sub
Private Sub WS_Error(ByVal Number As Integer, Description As String,
ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String,
ByVal HelpContext As Long, CancelDisplay As Boolean)
MsgBox "Put error: " & Description
Unload Me
End Sub
Private Sub WS_SendComplete()
Dim lBytesLeft As Long
Dim bData() As Byte
lBytesLeft = LOF(iFile) - Loc(iFile)
If lBytesLeft > 0 Then
If lBytesLeft > BlockSize Then
ReDim bData(1 To BlockSize)
Else
ReDim bData(1 To lBytesLeft)
End If
Get #iFile, , bData
WS.SendData bData
lblProgress = Loc(iFile) & " / " & LOF(iFile)
lblProgress.Refresh
Else
Close #iFile: iFile = 0
WS.Close
txtFile.Enabled = True
End If
End Sub
8. Start nu GET og PUT.
9. Indtast et filnavn i PUT programmet og tryk Enter.
Nu skulle PUT gerne sende filnavn og indhold til GET, som tager
filnavnet og tilføjer ".WSGET" og gemmer data.
10. Fortsæt med punkt 9 lige så mange gange du har lyst.
Bemærk at denne kode er IKKE "produktionsklar". Der er totalt mangel
på fejlhåndtering og der er ganske mange ting, som der ikke tages
højde for, men er kun men som et "bevis"/eksempel på at
Winsock-kontrollen sagtens kan overføre binære data uden nogensomhelst
former for problemer.
-------
Tomas
| |
Mads Vanggaard (23-01-2002)
| Kommentar Fra : Mads Vanggaard |
Dato : 23-01-02 15:32 |
|
Dette er en NON-blocking overførsel. Er der nogen som kan lave samme type
eksempel bare med blocking??
"Tomas Christiansen" <toc@blikroer.removethis.dk> skrev i en meddelelse
news:a2fiol$17kj$1@news.cybercity.dk...
> Tajen skrev:
> > > "Morten Snedker" <morten_nospam@dbconsult.dk> skrev i en
> meddelelse
> > > news:3c49879f.1039314@news.inet.tele.dk...
> > > > On Fri, 18 Jan 2002 23:40:29 +0100, "Tomas Christiansen"
> > > > <toc@blikroer.removethis.dk> wrote:
>
> osv. osv.
>
> Vær venlig kun at citere det (dvs. den eller de få linier), som du
> svarer på.
>
> > Nu er det bare sådan at hvis jeg forsøge at sende en fil..
> > åbner den med binary access... sender ca. 4byte af en fil på 20mb...
>
> Okay, så se her:
>
> 1. Opret et almindeligt exe-projekt (kald det GET) med en form.
> 2. Placer en label på formen, kald labelen lblProgress og sæt dens
> AutoSize egenskab til True.
> 3. Læg følgende kode ind:
>
> Option Explicit
>
> Private bFirst As Boolean
> Private iFile As Integer
>
> Private Sub Form_Load()
> bFirst = True
> WS.LocalPort = 30111
> WS.Listen
> End Sub
>
> Private Sub WS_Close()
> If iFile <> 0 Then Close #iFile: iFile = 0
> WS.Close
> lblProgress = "Done"
> Form_Load
> End Sub
>
> Private Sub WS_ConnectionRequest(ByVal requestID As Long)
> WS.Close
> WS.Accept requestID
> lblProgress = "0"
> End Sub
>
> Private Sub WS_DataArrival(ByVal bytesTotal As Long)
> Dim bData() As Byte
> Dim bNameLen() As Byte
> Dim sFilename As String
> If bytesTotal = 0 Then Exit Sub
> If bFirst Then
> WS.GetData bNameLen, , 2
> WS.GetData bData, , bNameLen(0)
> sFilename = bData
> iFile = FreeFile
> Open sFilename & ".WSGET" For Binary As #iFile
> bFirst = False
> End If
> WS.GetData bData
> Put #iFile, , bData
> lblProgress = LOF(iFile)
> lblProgress.Refresh
> End Sub
>
> Private Sub WS_Error(ByVal Number As Integer, Description As String,
> ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String,
> ByVal HelpContext As Long, CancelDisplay As Boolean)
> MsgBox "Get error: " & Description
> Unload Me
> End Sub
>
>
> 4. Opret et nyt almindeligt exe-projekt (kald det PUT) med en form.
> 5. Placer en label på formen, kald labelen lblProgress og sæt dens
> AutoSize egenskab til True.
> 6. Placer en textbox på formen og kald den txtFile.
> 7. Læg følgende kode ind:
>
> Option Explicit
>
> Const BlockSize As Long = 60000
> Private iFile As Integer
>
> Private Sub txtFile_KeyPress(KeyAscii As Integer)
> If KeyAscii = 13 Then
> txtFile.Enabled = False
> WS.Connect "127.0.0.1", 30111
> End If
> End Sub
>
> Private Sub WS_Connect()
> Dim bData() As Byte
> iFile = FreeFile
> Open txtFile.Text For Binary As #iFile
> bData = Chr(LenB(txtFile.Text)) & txtFile.Text
> WS.SendData bData
> End Sub
>
> Private Sub WS_Error(ByVal Number As Integer, Description As String,
> ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String,
> ByVal HelpContext As Long, CancelDisplay As Boolean)
> MsgBox "Put error: " & Description
> Unload Me
> End Sub
>
> Private Sub WS_SendComplete()
> Dim lBytesLeft As Long
> Dim bData() As Byte
> lBytesLeft = LOF(iFile) - Loc(iFile)
> If lBytesLeft > 0 Then
> If lBytesLeft > BlockSize Then
> ReDim bData(1 To BlockSize)
> Else
> ReDim bData(1 To lBytesLeft)
> End If
> Get #iFile, , bData
> WS.SendData bData
> lblProgress = Loc(iFile) & " / " & LOF(iFile)
> lblProgress.Refresh
> Else
> Close #iFile: iFile = 0
> WS.Close
> txtFile.Enabled = True
> End If
> End Sub
>
> 8. Start nu GET og PUT.
> 9. Indtast et filnavn i PUT programmet og tryk Enter.
> Nu skulle PUT gerne sende filnavn og indhold til GET, som tager
> filnavnet og tilføjer ".WSGET" og gemmer data.
> 10. Fortsæt med punkt 9 lige så mange gange du har lyst.
>
> Bemærk at denne kode er IKKE "produktionsklar". Der er totalt mangel
> på fejlhåndtering og der er ganske mange ting, som der ikke tages
> højde for, men er kun men som et "bevis"/eksempel på at
> Winsock-kontrollen sagtens kan overføre binære data uden nogensomhelst
> former for problemer.
>
> -------
> Tomas
>
| |
Tomas Christiansen (23-01-2002)
| Kommentar Fra : Tomas Christiansen |
Dato : 23-01-02 22:49 |
|
Mads Vanggaard skrev:
> Dette er en NON-blocking overførsel. Er der nogen som kan lave samme
type
> eksempel bare med blocking??
>
> "Tomas Christiansen" <toc@blikroer.removethis.dk> skrev i en
meddelelse
> news:a2fiol$17kj$1@news.cybercity.dk...
> > Tajen skrev:
> > > > "Morten Snedker" <morten_nospam@dbconsult.dk> skrev i en
> > meddelelse
> > > > news:3c49879f.1039314@news.inet.tele.dk...
> > > > > On Fri, 18 Jan 2002 23:40:29 +0100, "Tomas Christiansen"
> > > > > <toc@blikroer.removethis.dk> wrote:
osv.osv.osv.osv.osv.osv.osv.osv.osv.osv.osv.osv.
HVIS du dog bare gad KUN at citere de par linier, som du vil
kommentere!
Mig bekendt er det ikke muligt at styre i Winsock kontrollen, men det
kan jo løses ved at vente med at sende, indtil en kvittering er
modtaget. Når TCP-forbindelsen er åbnet, er den jo to-vejs, så det er
ikke svært selv at bygge ind.
-------
Tomas
| |
|
|