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 - NetworkStream tra Client e Server
Forum - C# / VB.NET - NetworkStream tra Client e Server

Avatar
MirkoDistefano (Normal User)
Pro


Messaggi: 119
Iscritto: 10/02/2013

Segnala al moderatore
Postato alle 3:37
Sabato, 04/01/2014
Salve a tutti,
ho creato un client ed un server che si connettono tra di loro.
Non appena il client si connette al server, attraverso un timer, deve inviargli l'indirizzo IP, il Nome Utente e il Nome Computer.
Il server una volta ricevute le tre stringhe deve deve elencarle in tre diverse label.
Il client invia questo testo:

#IP#IndirizzoIP

#NU#NomeUtente

#NC#NomeComputer

Il server invece ha questo codice:

Se il testo in arrivo inizia con "#IP#" elenca tutto il suo contenuto nella label1
Altrimenti se il testo in arrivo inizia con "#NU#" elenca tutto il suo contenuto nella label2
Altrimenti se il testo in arrivo inizia con "#NC#" elenca tutto il suo contenuto nella label3

Soltanto che il risultato nel server è questo:

Label1 =#IP#IndirizzoIP#NU#NomeUtente#NC#NomeComputer

Label2 =

Label3 =

In poche parole mi elenca tutto il contenuto sulla label1 lasciandomi vuote la label2 e la label3.
Non capisco come potrei risolvere la cosa, visto che il risultato che volevo era che la label1 mi elencasse l'IP, la label2 mi elencasse il nome utente e la label3 mi elencasse il nome del computer.


Un buon bugiardo deve avere una buona memoria
PM Quote
Avatar
MirkoDistefano (Normal User)
Pro


Messaggi: 119
Iscritto: 10/02/2013

Segnala al moderatore
Postato alle 3:45
Sabato, 04/01/2014
PARTE DI CODICE DEL SERVER:
//Client = TcpClient
//Stream = NetworkStream

If Client.Connected Then
Stream = Client.GetStream()
timer1.start
End If


Private Sub Timer1_Tick //Interval 1
        Dim Temp1() As Byte = UTF8.GetBytes("#IP#IndirizzoIP")
        Stream.Write(Temp1, 0, Temp1.Length)

        Dim Temp2() As Byte = UTF8.GetBytes("#NU#NomeUtente")
        Stream.Write(Temp2, 0, Temp2.Length)

        Dim Temp3() As Byte = UTF8.GetBytes("#NC#NomeComputer")
        Stream.Write(Temp3, 0, Temp3.Length)

        Timer1.Stop()
    End Sub

PARTE DI CODICE DEL CLIENT:

If Client.Available > 0 Then
Dim Temp(Client.Available - 1) As Byte
Stream.Read(Temp, 0, Temp.Length)
Dim TempString As String = UTF8.GetString(Temp)

If TempString.StartsWith ("#IP#")
Label1.Text = TempString

ElseIf TempString.StartsWith ("#NU#")
Label2.Text = TempString

ElseIf TempString.StartsWith ("#NC#")
Label3.Text = TempString
End If


Un buon bugiardo deve avere una buona memoria
PM Quote
Avatar
MirkoDistefano (Normal User)
Pro


Messaggi: 119
Iscritto: 10/02/2013

Segnala al moderatore
Postato alle 2:59
Lunedì, 06/01/2014
??


Un buon bugiardo deve avere una buona memoria
PM Quote
Avatar
amreo (Normal User)
Pro


Messaggi: 93
Iscritto: 18/03/2013

Segnala al moderatore
Postato alle 14:13
Martedì, 07/01/2014
Aggiungi ; o qualsiasi carattere per indicare separazione.
Se i dati inviati dal client non sono precisi, ma messaggi di Chat, a esempio, non ti conviene usare ; ma altri come non so %234&432£ , questa stringa non viene usato dai utenti.

modifica la parte di codice relativa al Client.Time_Click

Codice sorgente - presumibilmente VB.NET

  1. Const SEP As String = ";"
  2.  
  3. Private Sub Timer1_Tick //Interval 1
  4.         Dim Temp1() As Byte = UTF8.GetBytes("#IP#IndirizzoIP" & SEP)
  5.         Stream.Write(Temp1, 0, Temp1.Length)
  6.  
  7.         Dim Temp2() As Byte = UTF8.GetBytes("#NU#NomeUtente" & SEP)
  8.         Stream.Write(Temp2, 0, Temp2.Length)
  9.  
  10.         Dim Temp3() As Byte = UTF8.GetBytes("#NC#NomeComputer" & SEP)
  11.         Stream.Write(Temp3, 0, Temp3.Length)
  12.  
  13.         Timer1.Stop()
  14. End Sub




e la ricezione del server.
Codice sorgente - presumibilmente VB.NET

  1. Const SEP As String = ";"
  2. If Client.Available > 0 Then
  3. Dim Temp(Client.Available - 1) As Byte
  4. Stream.Read(Temp, 0, Temp.Length)
  5. Dim TempString As String = UTF8.GetString(Temp)
  6. Dim Part() As String = TempString.Split(SEP) 'Aggiungi Split, dovrebbe esserci 3 elementi, se non è una chat. se si è 'meglio usare If
  7. 'Split separa una stringa in più stringa, le stringhe vengono divise dal parametro passato
  8. If Part(0).StartsWith ("#IP#")
  9. Label1.Text = Part(0)
  10. End If
  11.  
  12. If Part(1).StartsWith ("#NU#")
  13. Label2.Text = Part(1)
  14. End If
  15.  
  16. If Part(2).StartsWith ("#NC#")
  17. Label3.Text = Part(2)
  18. End If




dovrebbe andare.

PM Quote
Avatar
MirkoDistefano (Normal User)
Pro


Messaggi: 119
Iscritto: 10/02/2013

Segnala al moderatore
Postato alle 2:51
Martedì, 04/02/2014
Facendo così arriva solo #IP#IndirizzoIp nella Label1
Label2 e Label3 restano vuote.


Un buon bugiardo deve avere una buona memoria
PM Quote
Avatar
MirkoDistefano (Normal User)
Pro


Messaggi: 119
Iscritto: 10/02/2013

Segnala al moderatore
Postato alle 3:01
Martedì, 04/02/2014
Funziona soltanto se la costante SEP è ";".
Se invece gli metto il "%234&432£" mi arriva soltanto #IP#IndirizzoIP nella Label1.
Come mai?


Un buon bugiardo deve avere una buona memoria
PM Quote