Newsgroup: it.comp.lang.visual-basic
Titolo: Chat con Winsock

Sto realizzando una semplice chat con il controllo winsock.
Dato che mi sarebbe piaciuto criptare almeno un po' i dati, avevo
pensato una cosa del genere, quando devo inviare una stringa:
- ciclo che legge tutti i caratteri uno per volta e per ogni carattere:
1) lo converte in decimale ascii
2) somma un numero op random
3) invia op e il risultato della somma all'altro host
quando la stringa é finita, viene inviata la stringa "007" (zerozerosette)
che
indica la fine della spedizione
vi presento qui i due listati... dov'é che sbaglio?
Private Sub cmdInvia_Click()
  Dim s, c, op, fine As String
  Dim a, i, q, comodo, lung As Integer
  s = txtInvia.Text
  lung = Len(s)
  For i = 1 To lung
    c = Mid(s, i, 1)
    a = Asc(c)
    Randomize
    comodo = Int(Rnd * 28)
    op = "o" & comodo
    Winsock1.SendData op
    a = a + comodo
    a = Str(a)
    Winsock1.SendData a
  Next i
  fine = "007"
  Winsock1.SendData fine
  txtMittente.Text = txtMittente & txtInvia.Text & vbCrLf
  txtInvia.Text = ""
End Sub
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
  Dim ricevi, comodo2, comodo4 As String
  Dim op2, lung2 As Integer
  Winsock1.GetData Dalserver, vbString
  ricevi = Dalserver
  lung2 = Len(ricevi)
  If Mid$(ricevi, 1, 1) = "o" Then
    comodo2 = Mid$(ricevi, 2, lung2)
    op2 = Val(comodo2)
  ElseIf Mid$(ricevi, 1, 1) = "0" Then
    txtDestinatario.Text = txtDestinatario & vbCrLf
    Beep
  Else
    comodo3 = Val(ricevi)
    comodo3 = comodo3 - op2
    comodo4 = Chr$(comodo3)
    txtDestinatario.Text = txtDestinatario & comodo4
  End If
End Sub
--
Fabio Ruini
(
fabi...@libero.it
)
"Non si può descrivere la passione, la si
può soltanto vivere" (Enzo Ferrari)

Non ho provato il codice, ma alla prima occhiata direi che ti serva innanzi
tutto una funzione che codifichi / decodifichi i dati, da applicare quindi
in sede di trasmissione / ricevimento.
Anche il debug risulta piu' agevole, perche' cosi' capisci meglio dove stia
il problema.
Ciao
Aldo

purtroppo ci ho passato una nottata a debuggare...
i dati vengono inviati correttamente, il problema
mi sembra che ci sia nel momento in cui il numero
deve essere riconvertito in un carattere... in sostanza
nella terza condizione dell'if, quella in cui il carattere
che arriva deve essere tradotto
solo che non capisco dove sbaglio
--
Fabio Ruini
(
fabi...@libero.it
)
"Non si puņ descrivere la passione, la si
puņ soltanto vivere" (Enzo Ferrari)

 solo che non capisco dove sbaglio
Innanzi tutto ti conviene dichiarare le variabili del tipo giusto.
Tieni presente che:
Dim a, b As Integer
fa si' che *solo* b sia integer, mentre a e' variant (tipo predefinito di
vb).
Ciao
Aldo

ops... il tp non era cosě bastardo :-)
--
Fabio Ruini
(
fabi...@libero.it
)
"Non si puň descrivere la passione, la si
puň soltanto vivere" (Enzo Ferrari)

     Winsock1.SendData op
mi sembra che la variabile "comodo" venga inviata, (che è la chiave di
decrittografazione),
ma il carattere (contenuto nella variabile a) non viene nè crittografato nè
tanto meno
inviato, visto che sembra venga inviata solo una lettera "o" e un numero
ricavato a caso
(dalla funzione Rnd).
Guarda un po' meglio...........
Ciao
Sir Jo

 Guarda un po' meglio...........
No, se leggi il codice seguente noterai che somma comodo ad a e quindi invia
a. In questo momento sta inviando la chiave...
A parte che suggerirei uno xor (cosi' eviti di superare il 255) e di non
inviare il chr() ma direttamente il dato binario (usando quindi una
variabile a in forma byte e non una in forma integer), non sarebbe piu'
logico:
1) Sintetizzare una chiave di n bit ad inizio sessione
2) Passare la chiave una sola volta
3) Inviare la striga, criptata con la chiave iniziale, linea per linea
?
Tempo fa avevo postato una semplice routine di criptazione sul NG... Se
cerchi su Deja dovresti trovarla.
Ciaotutti,
Alessandro

 logico:
Sono pienamente d'accordo.
Ciao
Sir Jo

ehm, non metto in dubbio che esistano metodi migliori di quello che mi sono
inventato, però ormai mi piacerebbe proseguire su questa strada. L'invio
funziona alla perfezione, la ricezione anche, però quando vado a lavorare
sul numero che dovrei riconvertire in carattere ho dei problemi. L'ascii del
carattere che viene fuori é sempre quello giusto + op, nonostante io lo
sottragga...



*LOL* concordavo con l'impostazione della stringa intera zucchino :)
Ciaotutti,
Alessandro