Olen tekemässä ohjelmaa joka toimii winsockin perusteella ja hakee omalta koneeltani tiedoston ja tuo sen richtextboxiin clientille (missä nytten clien onkaan). Olen testaillut erilaisia tapoja mutta en ole saannut ainoatakaan toimimaan joten tulin pyytämään ammattilaisilta apua.
Lähetä siis serverille aluksi tiedoston nimi ja polku..
winsock1.senddata "C:\testifilu.txt"
Tämän jälkeen sitten serverissä vastaanotetaan data avataan haluttu tiedosto..
Dim Data1,Data2 As String
winsock1.getdata Data1
open data1 for binary as #1
data2 = Input(FileLen(data1), #1)
close #1
'ja lähetetään tiedosto..
winsock1.senddata data2sitten clientissä avaat filun ja tallennat tulevan data sinne.
Hyvä muuten (ainanki helpompi kuin omani nimittäin yritin tehdä omaa proseduuria jne. :P) mutta se huuta tuosta
Open Data1 for binary as #1
rivistä mikäköhän siinä oikein on?
Mitä se valittaa? Ootko imuroinu hiirellä sen tekstin päältä tai selvittäny muuten Data1:n arvon? Kokeile laittaa varmuuden vuoksi pelkkä Close ilman #numeroo ennen Openia, se joskus voi toimia. Mut joskus vbkin vaan bugaa noitten tiedostonavausten kanssa silleen ettei sitä oikein voi käyttäjä korjata vaan pitää esim vaihtaa subin nimee tai jtkn, mulla on käynyt niin.
Se sanoo että: "Bad File name or number" en ole muuttannut mitään tuosta pätkästä. Olen kyllä kokeillut mutta en onnistunnut.
Joo, eli pistä vaikka msgboxiin tiedoston nimi tuossa vastaanotossa niin näet että se on varmasti oikein.. Ja tuo bad file number voisi viitata siihen että jokin tiedoston on jo avattu numerolla #1.
Ei itse asiassa toimi vaikka vaihdoin tuon #1 muuksi ja laitoin vastaan ottoon että se tulee msg boxiin silti tulee "bad file name or number"
EDIT: tai siis tulee msgbox esille mutta se on tyhjä.
Siinä se vika onkin; et voi avata ""-nimistä (tyhjä string) tiedostoa. Laita se tiedoston avaaminen ehtolauseen taakse: tiedosto avataan vain jos socketista on tullut jotain muuta kuin "".
En onnistunnut tekemään toimivaa ehtolausetta tuli huutoa
"Argument is not optional."
Tuomasta lainaten...
Dim Data1,Data2 As String
winsock1.getdata Data1
If Data1 <> "" Then
open data1 for binary as #1
data2 = Input(FileLen(data1), #1)
close #1
'ja lähetetään tiedosto..
winsock1.senddata data2
End IfEli siihen senddata/getdata:aan ei tarvitse muuten koskea.
laita siihen että:
if data1 = <> "" then 'tähän väliin tiedoston aukaisu end if
Edit: höh, sqwiik kerkes ensin :(
If Data1 <> "" Then
"Type mismatch" tulee tuosta rivistä.
Vilkaisepa, mitä muuttujassa Data1 on. Muuttujan tyyppi on määrittelyn perusteella Variant, mutta silloin vertailun pitäisi kyllä onnistua.
Nyt o pakko kyllä myöntää että en ihan tajunnut. =)
Eli kun virheilmoitus tulee, paina Debug. Vie sitten hiiri koodissa näkyvän muuttujan nimen kohdalle, jolloin muuttujan arvo tulee näkyviin. Voit myös kirjoittaa ikkunan alaosassa olevaan Immediate-ikkunaan "?Data1", jolloin muuttujan arvo tulee myös näkyviin. Tällä tavalla virheiden löytäminen helpottuu. :)
Tuota minä en tiennytkään. sieltä tuli "??????" kun laitoi tuolleen
Määrittele datan lähetyksessä sekä vastaanotossa muuttujat string-tyyppisiksi.
Hmm.. Ootko varma että winsokkis saa mitään dataa. Kun sokilla on se eventti DataArrival joka aktivoituu (tai suorittautuu tai jotain) heti kun sokki saa dataa, mutta muistaakseni muussa tapauksessa GetData ei palauta mitään.
Edit: Eli laita tuo koodi winsock1_DataArrival-subiin.
tuomas kirjoitti:
Dim Data1,Data2 As String
Tässä vika. Toi dimmaa Data1:n variantiksi ja Data2:n stringiksi. Laita
Dim Data1 As String, Data2 As String
variant-tyyppiin ei kannata ottaa soketista dataa. Se sottaantuu.
no kyllä on vbkin pilkunviilaamista ... :P
No niin nytten toimii kiitokset kaikille jotka ovat minua auttanneet.
EDIT: Yksi kysymys on vielä kun painan sitä suurennus nappia tuolta formin yläreunasta niin pelkkä formi suurenee mutta miten saisin että nuo osat (richtextbox jne) suurenisivat formin kanssa samalla?
EDIT: Vielä toinen kysymys kun haen tuon tiedoston tuolta koneelta niin en saa clientille kuin 7 riviä tekstiä vaikka kyseisessä tiedostossa on paljon paljon enemmän tekstiä. mikäköhän siinä on?
Cc kirjoitti:
miten saisin että nuo osat (richtextbox jne) suurenisivat formin kanssa samalla?
Löytyisiköhän siitä RichTextBoxista ominaisuus Anchor, johon voisi lisätä Topin ja Leftin lisäksi vielä Bottomin ja Rightin?
Cc kirjoitti:
en saa clientille kuin 7 riviä tekstiä
En tiedä, mutta onko käytettävällä datatyypillä ehkä jokin kokorajoitus? Tai ehkä socketin buffereilla?
Lisää tekstilaatikoiden yms. koon muuttaminen form_resize aliohjelmaan.
Jos data ei meinaa siirtyä kokonaan kannattaa aloittaa tarkistamalla että, tiedostoa ladattaessa kaikki data on tallessa.. ja sitten että kaikki on tallessa vielä siellä toisessakin päässä. Eli, miten tallennat tulevan datan / säilytät ennen tallennusta?
Aihe on jo aika vanha, joten et voi enää vastata siihen.