Oppure

Loading
04/08/09 12:58
klez91
Ciao a tutti, ho scritto una nuova classe MySocket ereditandola da System.Net.Sockets.Socket aggiungendo alcuni metodi e proprietà, solo che adesso quando provo ad accettare una connessione attraverso la funzione AcceptSocket() della classe TCPListener in questo modo:
    Private Listener As New System.Net.Sockets.TcpListener(256)
    Private Client As MySocket

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        If Listener.Pending Then
            Client = Listener.AcceptSocket 'Qui ricevo l'eccezione...
        End If
    End Sub

...ricevo la seguente eccezione InvalidCastException - Impossibile eseguire il cast di oggetti di tipo 'System.Net.Sockets.Socket' sul tipo 'WindowsApplication1.MySocket', come del resto avrei dovuto aspettarmi a causa della conversione implicita tra System.Net.Sockets.Socket e MySocket. Come protrei risolvere questo problema? Grazie anticipatamente :k:
Ultima modifica effettuata da klez91 04/08/09 13:00
aaa
04/08/09 13:05
manvb.net
Prova con un CType(Listener.AcceptSocket, MySocket).
Ultima modifica effettuata da manvb.net 04/08/09 13:05
aaa
04/08/09 13:46
klez91
Si avevo provato già ma continua a darmi lo stesso errore...
aaa
04/08/09 15:04
manvb.net
Ops, hai ragione, non ho considerato che MySocket è una classe fatta da te, quindi devi scrivere una funzione che, dato il risultato di AcceptSocket, lo converta in MySocket. Non posso dirti come implementarla perchè non so come è fatta la classe MySocket.
Ultima modifica effettuata da manvb.net 04/08/09 15:05
aaa
04/08/09 18:31
klez91
Si scusa, non so se sia il caso di postarla perchè è abbastanza lunga ed inoltre contiene ancora molte imperfezioni, in ogni caso la classe è strutturata così:
Imports System.Net.Sockets
Public Class MySocket
    Inherits System.Net.Sockets.Socket

Sub New(ByVal addressFamily As System.Net.Sockets.AddressFamily, ByVal socketType As System.Net.Sockets.SocketType, ByVal protocolType As System.Net.Sockets.ProtocolType)
        MyBase.New(addressFamily, socketType, protocolType)
    End Sub

'Qui sono presenti diverse proprietà...
'diverse funzioni dichiarate come private...
'diverse sub dichiarate come public...
'il tutto si va ad aggiungere ai metodi e alle funzioni già presenti, non vine sostituito alcun metodo...
End Class

Ti ringrazio per l'aiuto, se sarà necessario non esiterò a postare la classe interamente nel prossimo post. Granzie ancora ciao:k:
aaa
04/08/09 18:53
ruggy94
A quanto ho capito, non hai eseguito nessun override, quindi per convertire il tuo MySocket in Socket, basta che crei un nuovo socket e alle sue proprietà assegni il valore delle corrispondenti proprietà del tuo MySocket. (Correggetemi se sbaglio)
aaa
04/08/09 20:07
klez91
Si, infatti, non è stato eseguito nessun override, però non ho capito bene cosa intendi...
aaa
04/08/09 20:12
ruggy94
Postato originariamente da klez91:

Si, infatti, non è stato eseguito nessun override, però non ho capito bene cosa intendi...

Forse la mia spiegazione è stata un po' intricata.
Sempre se ho ragione, quello che intendo è questo.
Public Class A
public var1 as int16
public var2 as string
End Class


Public Class B
Inherits A
public var3 as int32
End Class


Dim Prova as new B
B.var3=5
B.var2="ciao"

Function ConvertBtoA(X as B) as A
Dim Test as new A
Test.var1=X.var1
Test.var2=X.Var2
return Test
End Function
aaa