Newsgroup: it.comp.lang.visual-basic
Titolo: Trasmettere dati via internet con Winsock

Ciao a tutti,
vorrei dare ad un mio programma la possibilita' di trasmettere dati su
internet attraverso il winsock. Il problema e' che devo spedire
abbastanza roba (una decina di kb), e questa roba non e' testo, ma
sono dati di un tipo definito da me, con dentro stringhe, interi,
array di altri tipi a loro volta definiti da me.. ecc.
Mettiamo che io abbia 
private type tipo1
  a as integer
  b as string
end type
private type tipo2
  array(1000) as tipo1
  c as boolean
  d as string
  ecc.. ec...
end type
dim x as tipo2
Bene, come faccio a spedire x con winsock?
Devo spedire tutte le singole componenti separatamente, tipo:
for t=1 to 1000
  winsock1.senddata x.array(t).a
  winsock1.senddata x.array(t).b
next t
winsock1.senddata x.c
ecc. ecc..
Oppure c'e' un modo piu' veloce, ad esempio trasformando la variabile
x in un'unica sequenza di byte da ricomporre alla fine?
Scusatemi se sono domande da "absolute beginner", ma e' quello che
sono!
Ciao,
Anders

x in un'unica sequenza di byte da ricomporre alla fine?
Puo' essere una soluzione.
Per le stringhe vedi di stabilire come conoscerne la lunghezza
(cioe' usa campi di stringhe a lunghezza fissa oppure lasciale
a lunghezza variabile, ma allora prevedi anche un campo
in cui ti scrivi quanto e' lunga la stringa) e stai attento alle conversioni
automatiche in unicode che fa vb.
-- 
ciao, hal


ma non c'era un controllo apposta, mi pare microsoft internet control
o simile..
Cosma

o simile..
Non l' ho mai usato perche' mi e' sembrato un po' rigido, ma mi sembra
strano che permetta di fare quello che ha chiesto etha.
Attendo comunque smentite :)
-- 
ciao, hal

Non ho provato a inviarlo e riceverlo pero dovrebbe andare bene
prima lo converti in un array e siccome vb è bastardo e lavora un po iun
unicode e un po no lo converti in stringa
infine quando lo ricevi dall'altra parte prima lo riconverti in unicode e
poi lo assegni alla tua struttura
dove c'e' "*************************" dovresti inviare la stringa e la parte
dopo serve in fase di ricezione
posta se non capisci
ciao
L2K
-- CODE --
Private Declare Sub CopyMemory Lib "Kernel32" _
  Alias "RtlMoveMemory" _
  (lpvDest As Any, lpvSrc As Any, ByVal dwSize&)
Private Declare Sub CopyString Lib "Kernel32" _
  Alias "RtlMoveMemory" _
  (lpvDest As Any, ByVal strSrc As String, ByVal dwSize&)
Private Type tipo1
    i As Integer
    s As String * 20
End Type
Private Type tipo2
    arr(10) As tipo1
    i As Integer
    s As String * 20
End Type
Private Sub Form_Load()
    Dim t1 As tipo2
    Dim t2 As tipo2
    Dim str As String
    Dim bArray() As Byte
    t1.arr(0).i = 10
    t1.arr(0).s = "ciao"
    t1.arr(3).s = "fracchia"
    t1.i = 32
    ReDim bArray(Len(t1))
    CopyMemory bArray(0), t1, Len(t1)
    str = Left(StrConv(bArray, vbUnicode), Len(t1))
    str = StrConv(str, vbFromUnicode)
    str = StrConv(str, vbUnicode)
    CopyString t2, str, Len(t2)
    Debug.Print t2.arr(0).i
    Debug.Print t2.arr(0).s
    Debug.Print t2.arr(3).s
    Debug.Print t2.i
End Sub
-- END CODE ---

scusa tra
strconv in vbfromunicode
e
strconv in vbunicode
ci doveva essere
'**********************************
L2K


Grazie mille, adesso lo studio un po' e poi lo provo.
Ti faccio sapere, ciao,
Anders

> o simile..
h> Non l' ho mai usato perche' mi e' sembrato un po' rigido, ma mi sembra
h> strano che permetta di fare quello che ha chiesto etha.
E' molto comodo se devi usare due protocolli standard, HTTP e FTP. Ma non
puoi usarlo per altri. Solo quei due.
-- 
Gian  | main(){printf(&unix["\021%six\012\0"],(unix)["have"]+"fun"-0x60);}
Uberto|                        David Korn, 1987 ioccc best one liner 
Lauri |-------------------------------------------------------------------
(aka saint) >>Vedere X-Nospam nell'header - See X-Nospam field in Header<<