Salve.
Sto realizzando un'applicazione che permette lo scambio di dati tramite tcpclient e tcpserver, e che supporta più client.
Il mio primo obiettivo sarebbe di implementare una chat multiutente, ho già creato le funzioni che gestiscono i thread e sembrano funzionare bene.
In particolare mi interessa trasferire una classe (che ho chiamato "pacchetto") utilizzando la serializzazione binaria. La classe è così definita:
<Serializable()> Public Class pacchetto
Public idfrom As Integer
Public idto As Integer
Public tipo As Integer
Public dati As String
Public Sub New(ByVal da As Integer, ByVal a As Integer, ByVal tipodidato As Integer, ByVal messaggio As String)
idfrom = da
idto = a
tipo = tipodidato
dati = messaggio
End Sub
End Class
Per testare il tutto ho provato ad inviare dal server al client un'istanza di pacchetto, chiamata "welcome", con una semplice frase e l'integer identificativo del client, ma ricevo un'eccezione di Deserialize() che recita:
"Il flusso di input non è un formato binario valido. Il contenuto iniziale (in byte) è: FF-FF-FF-FF-00-00-00-00-01-00-00-00-06-03-00-00-00 ..."
Le due funzioni che utilizzo per inviare/ricevere le classi Pacchetto, sono le seguenti:
Public Sub Scrivi(ByRef streamdascrivere As NetworkStream, ByVal pacchettodainviare As pacchetto)
Try
formatter.Serialize(streamdascrivere, CType(pacchettodainviare, Object))
Catch errorescrivi As Exception
MsgBox("Errore nella serializzazione" & vbNewLine)
End Try
End Sub
Public Function leggi(ByRef streamdaleggere As NetworkStream) As pacchetto
Dim pacchettoricevuto As New pacchetto(0, 0, 0, "")
If streamdaleggere.CanRead Then
Try
pacchettoricevuto = formatter.Deserialize(streamdaleggere)
Catch erroreleggi As Exception
Form1.stato.AppendText("Errore nella deserializzazione" & vbNewLine)
End Try
End If
Return pacchettoricevuto
End Function
Tengo a precisare che la serializzazione, e quindi l'invio di dati, non da alcun errore, presumo quindi che funzioni, poi magari ho sbagliato qualcosa proprio lì..