Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - VB.NET Problema con networkstream
Forum - C# / VB.NET - VB.NET Problema con networkstream

Pagine: [ 1 2 3 4 ] Precedente | Prossimo
Avatar
carant (Normal User)
Pro


Messaggi: 69
Iscritto: 08/11/2009

Segnala al moderatore
Postato alle 18:28
Domenica, 08/11/2009
Questo topic è stato chiuso dal moderatore

Ciao a tutti,
Ciao a tutti,
sto cercando di inviare stringhe tramite un networkstream ma mi dà un errore...
Riporto il codice:
codice:

Codice sorgente - presumibilmente VB.NET

  1. Dim stream As NetworkStream            
  2. stream = client.GetStream()          
  3. If stream.CanRead Then            
  4. Dim c(client.ReceiveBufferSize) As Byte        
  5. Dim size = c.Length
  6. stream.Read(c, 0, size)
  7. End If




Naturalmente prima c'è una procedura per la connessione...
Dice che il flusso di informazioni non supporta funzioni di ricerca(su stream.canread)...
che devo fare??
Ciao.


Antonio
PM
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 16:42
Lunedì, 09/11/2009
Strano, di solito quell'eccezione viene generata in altri casi, come, ad esempio, l'uso della proprietà Position o Length o del metodo Seek. Sei sicuro che sia proprio quella linea?


"Infelici sono quelli che hanno tanto cervello da vedere la loro stupidità."
(Fligende Blatter)

"Dubitare di se stessi è il primo segno d'intelligenza."
(Ugo Ojetti)
PM
Avatar
carant (Normal User)
Pro


Messaggi: 69
Iscritto: 08/11/2009

Segnala al moderatore
Postato alle 17:16
Lunedì, 09/11/2009
Veramente adesso non mi dà più errori: si blocca il programma e tutto visual basic..:-?
Se per te il codice va bene forse è il mio pc e quindi vado avanti.
Posto tutta la procedura:
Codice sorgente - presumibilmente VB.NET

  1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  2.         client = New TcpClient("127.0.0.1", 25)
  3.  
  4.         If client.Connected Then
  5.             ToolStripStatusLabel1.Text = "Connessione stabilita"
  6.             Dim stream As NetworkStream
  7.             stream = client.GetStream()
  8.             If stream.CanRead Then
  9.                 Dim c(client.ReceiveBufferSize) As Byte
  10.                 Dim size As Integer = c.Length
  11.                 stream.Read(c, 0, size)
  12.             End If
  13.         End If
  14.  
  15.     End Sub


Ciao.:)


Antonio
PM
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 12:36
Martedì, 10/11/2009
Devi aspettare che si connette, quindi... non si è bloccato.

Ultima modifica effettuata da Il Totem il 10/11/2009 alle 12:37


"Infelici sono quelli che hanno tanto cervello da vedere la loro stupidità."
(Fligende Blatter)

"Dubitare di se stessi è il primo segno d'intelligenza."
(Ugo Ojetti)
PM
Avatar
carant (Normal User)
Pro


Messaggi: 69
Iscritto: 08/11/2009

Segnala al moderatore
Postato alle 19:14
Martedì, 10/11/2009
Quando si deve connettere mi esce subito il  messaggio "Connesso"...
Forse è perchè l'oggetot stream non è mai stato creato.. se io scrivo stream=client.getstream() ho creato l'oggetto?? o devo usare new?? perchè se è così mi chiede il socket e devo cambiare tutto, dovrei connettere due computer con il socket...
(è la prima volta che scrivo networking)!!!
:):):)
Dimmi come devo fare...
ciao.


Antonio
PM
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 11:46
Mercoledì, 11/11/2009
Nono stai facendo confusione. Tu non ti devi preoccupare di creare l'oggetto, altrimenti GetStream sarebbe totalmente inutile, non ti pare? L'inizializzazione con New serve per creare una nuova istanza di un oggetto, è vero, ma in questo caso c'è qualcun altro che la crea per noi, ossia la funzione GetStream. Se l'oggetto non fosse esistito avresti ricevuto un'eccezione di tipo NullReferenceException.
Lo stream esiste, ma la connessione può non essere sempre istantanea, quindi ti suggerisco di usare dei breakpoint per controllare dove l'esecuzione si blocca. E poi non hai postato il codice del server: magari l'errore è lì.


"Infelici sono quelli che hanno tanto cervello da vedere la loro stupidità."
(Fligende Blatter)

"Dubitare di se stessi è il primo segno d'intelligenza."
(Ugo Ojetti)
PM
Avatar
carant (Normal User)
Pro


Messaggi: 69
Iscritto: 08/11/2009

Segnala al moderatore
Postato alle 19:38
Giovedì, 12/11/2009
Non so cosa sia un breakpoint, quindi posto il codice del server:
CLIENT:
Codice sorgente - presumibilmente VB.NET

  1. Private client As TcpClient
  2.  
  3.     Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  4.         client = New TcpClient("127.0.0.1", 25)
  5.         If client.Connected Then
  6.             ToolStripStatusLabel1.Text = "Connessione stabilita"
  7.             Dim stream As NetworkStream
  8.             stream = client.GetStream()
  9.             If stream.CanRead Then
  10.                 Dim c(client.ReceiveBufferSize) As Byte
  11.                 Dim size As Integer = c.Length
  12.                 stream.Read(c, 0, size)
  13.                 Dim msg
  14.                 msg = stream.Read(c, 0, size)
  15.                 Dim msgdascrivere As String
  16.                 msgdascrivere = System.Text.Encoding.ASCII.GetChars(msg)
  17.                 TextBox1.Text = msgdascrivere
  18.             End If
  19.         End If
  20.     End Sub




SERVER:
Codice sorgente - presumibilmente VB.NET

  1. Public listener As TcpListener = New TcpListener(25)
  2.     Private client As TcpClient = New TcpClient()
  3.     Public stream As NetworkStream
  4.  
  5.     Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
  6.         listener.Start()
  7.         If listener.Pending Then
  8.             Timer1.Stop()
  9.             client = listener.AcceptTcpClient()
  10.             listener.Stop()
  11.         End If
  12.         If client.Connected Then
  13.             stream = client.GetStream()
  14.             Dim msg
  15.             msg = System.Text.Encoding.ASCII.GetBytes("ciao")
  16.             stream.Write(msg, 0, msg.length)
  17.         End If
  18.     End Sub


:)


Antonio
PM
Avatar
Gianluca87 (Ex-Member)
Expert


Messaggi: 300
Iscritto: 16/11/2008

Segnala al moderatore
Postato alle 23:09
Giovedì, 12/11/2009
oddio...un socket in mano a un timer...


a domanda precisa, risposta precisa...
a domanda generica, risposta generica...
PM
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 16:01
Venerdì, 13/11/2009
Ma tu stai richiamando Start tante volte quante i tick del timer, ossia ogni decimo di secondo gli dici di iniziare a mettersi in ascolto: è inutile e assurdo, basta una sola volta.
E poi perchè inizializzi il tcpclient? Non ti serve inizializzarlo, perchè l'unico modo che hai di riceverne un'istanza valida è attraverso listener.AcceptTcpClient.

Dato che hai una certa ossessione per i costruttori, è sempre meglio NON inizializzare una variabile di tipo reference, ma solo dichiararla. La si inizializza poco prima dell'uso, e la si distrugge appena terminato di usarla.


"Infelici sono quelli che hanno tanto cervello da vedere la loro stupidità."
(Fligende Blatter)

"Dubitare di se stessi è il primo segno d'intelligenza."
(Ugo Ojetti)
PM
Pagine: [ 1 2 3 4 ] Precedente | Prossimo