PDA

View Full Version : [vb.net] client remoto


manuel 66
18-03-2011, 12:33
sto creando 2 programmi, che comunicano tramite socket, il primo programma e quello che comanda, mentre il 2 e quello che riceve i comandi e esegue.
il problema e che quello che riceve ed esegue (credo sia un problema di thread) alla chiamata della funzione esegui non fa niente (non esegue le istruzioni if)

vi posto il codice del client:
Imports System.Net.Sockets
Imports System.Text.ASCIIEncoding

Public Class Form1
Dim Msg As String
Private Listener As TcpListener
Private Client As TcpClient
Private NetStream As NetworkStream

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Listener = New TcpListener(25)
Listener.Start()
End Sub

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick

If Listener.Pending Then


Client = Listener.AcceptTcpClient
NetStream = Client.GetStream
Msg = GetMessage(NetStream)

ListBox1.Items.Add(Msg)
esegui()
End If
End Sub

Private Function GetMessage(ByVal Stream As NetworkStream) As String
Try
If Stream.CanRead Then
Dim Bytes(Client.ReceiveBufferSize) As Byte
Dim Msg As String
Stream.Read(Bytes, 0, Bytes.Length)
Msg = ASCII.GetString(Bytes)
Return Msg.Normalize
Else
Return Nothing
End If
Catch
End
End Try

End Function

Private Sub esegui()
'MsgBox("esegui")
If Msg = "nome del comando" Then
MsgBox("output del comando")
End If
End Sub
End Class

jackk87
18-03-2011, 15:30
dai uno sguardo qui http://www.eggheadcafe.com/articles/20020323.asp ;)

manuel 66
18-03-2011, 16:12
grazie per aver risposto, ma sul link c'e piu o meno lo stesso identico codice, perche non esegue l'istruzione "if" quando chiamo la funzione esegui ?

jackk87
18-03-2011, 20:46
grazie per aver risposto, ma sul link c'e piu o meno lo stesso identico codice, perche non esegue l'istruzione "if" quando chiamo la funzione esegui ?



Imports System.Net.Sockets
Imports System.Text.ASCIIEncoding

Public Class Form1
Dim Msg As String
Private Listener As TcpListener
Private Client As TcpClient
Private NetStream As NetworkStream

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Listener = New TcpListener(25)
Listener.Start()
End Sub

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick

If Listener.Pending Then


Client = Listener.AcceptTcpClient
NetStream = Client.GetStream
Msg = GetMessage(NetStream)

ListBox1.Items.Add(Msg)
esegui()
End If
End Sub

Private Function GetMessage(ByVal Stream As NetworkStream) As String
Try
If Stream.CanRead Then
Dim Bytes(Client.ReceiveBufferSize) As Byte
Dim Msg As String
Stream.Read(Bytes, 0, Bytes.Length)
Msg = ASCII.GetString(Bytes)
Return Msg.Normalize
Else
Return Nothing
End If
Catch
End
End Try

End Function

Private Sub esegui()
'MsgBox("esegui")
If Msg = "nome del comando" Then
MsgBox("output del comando")
End If
End Sub
End Class

non ho capito a cosa ti serve la procedura esegui cmq le righe in rosso non mi piacciono fai una prova o metti dei punti brackpoint così da vedere cosa contiene la variabile msg al momento dell'if oppure prima dell'if metti un msgbox che ti stampa a video il contenuto per vedere se effettivamente contiene la stringa che hai inserito per il controllo

manuel 66
18-03-2011, 22:15
ho gia controllato con un msgbox il valore di Msg e corrisponde a quello inviato dal client(lo codifica in byte e li invia)
mi ero dimenticato di dire che quando il client che invia i comandi, si connette a quello che esegue esso si blocca, ed ogni volta che gli invio un comando si sblocca per un secondo e aggiorna la listbox; questo mi fa capire che dovrei mettere un multithread ma come ?

se vuoi vedere i sorgenti ecco il link http://www.megaupload.com/?d=XE97Z13F

jackk87
19-03-2011, 10:43
Ho visto il tuo programma e si blocca perchè non utilizzi i thread. Devi farti il programma da capo leggi qui -> http://vb.net-informations.com/communications/vb.net_chat_server_program.htm hai sia il client che il server in multithreading con codice pronto studialo e casomai adattalo al tuo progretto se hai problemi scrivi pure ;)

manuel 66
19-03-2011, 14:18
grazie mille, adesso provo

il client che invia l'ho convertito e funge bene, il server invece e molto piu difficile da convertire come voglio, ma finalmente riesco ad eseguire il ciclo if ed a ottenere un'output manca solo una cancellazione del codice superfluo