Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
App. WinForms / WPF .NET
Tasferimento files
sabato 01 luglio 2006 - 15.13
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
Isteriko
Profilo
| Newbie
10
messaggi | Data Invio:
sab 1 lug 2006 - 15:13
Ciao raga , ho appena finito di creare due applicazioni una client e una server per comunicare e passare dati da due pc in remoto.
Ora per trasferire del testo sono riuscito ad usare le socket con successo.. ma ho un piccolo problema con lo stesso metodo non riesco assolutamente a far trasferire file di qualunque tipo o specie... esempio voglio recuperare una foto dal server e portarla al client...
Come posso fare ?? quali sono i metodi da utilizzare per trasferire file ??
Premetto che utilizzo visualstudio 2003 .
Vi prego illuminatemi.......
Brainkiller
Profilo
| Guru
7.999
messaggi | Data Invio:
lun 3 lug 2006 - 09:07
>Come posso fare ?? quali sono i metodi da utilizzare per trasferire
>file ??
Il meccanismo è identico, perchè dici di non riuscire a trasferire file "binari" ? Che metodo hai utilizzato per il trasferimento ? Che inconvenienti incontri ? Perchè sostieni che non funziona ?
Ciao
David De Giacomi
Microsoft MVP
http://blogs.dotnethell.it/david/
blood
Profilo
| Senior Member
291
messaggi | Data Invio:
lun 3 lug 2006 - 09:36
>Ciao raga , ho appena finito di creare due applicazioni una client
>e una server per comunicare e passare dati da due pc in remoto.
>Ora per trasferire del testo sono riuscito ad usare le socket
>con successo.. ma ho un piccolo problema con lo stesso metodo
>non riesco assolutamente a far trasferire file di qualunque tipo
>o specie... esempio voglio recuperare una foto dal server e portarla
>al client...
>
>Come posso fare ?? quali sono i metodi da utilizzare per trasferire
>file ??
>
>Premetto che utilizzo visualstudio 2003 .
>
>Vi prego illuminatemi.......
scusa ma non effettui la conversione in binario per trasferire anche il testo??
Il procedimento è lo stesso, si converte in un buffer di bytes e si invia al client dove effettuerà l'operazione inversa...magari dicci che problemi ti dà così vediamo di risolverli
---------------
Piscopo Paolo
:: wD @ IRCnet :: .NET wannabe 8-)
Isteriko
Profilo
| Newbie
10
messaggi | Data Invio:
lun 3 lug 2006 - 11:58
Posto il codice sia di invio che di ricezione dati... funziona tutto ma se passo un dato di tipo binario non funziona suppongo che debba fare qualke conversione o non so che altro ....
INVIO DATI
Dim IP As String = ipclient
Dim PORT As Integer = 5555
Dim DATA As String = "ok"
Try
SendMessage(IP, PORT, DATA)
Catch ex As Exception
MessageBox.Show(ex.Message, "Error sending message")
End Try
Public Sub SendMessage(ByVal Ip As String, ByVal Port As Integer, ByVal Message As String)
If Not checkip(Ip) Then
Throw New Exception("Ip is not in the right format")
Exit Sub
End If
Try
Dim client As New System.Net.Sockets.TcpClient
Dim Buffer() As Byte = System.Text.Encoding.Default.GetBytes(Message.ToCharArray)
client.Connect(Ip, Port)
client.GetStream.Write(Buffer, 0, Buffer.Length)
client.Close()
Catch ex As Exception
Throw New Exception("Remote IP is not reachable")
End Try
RECUPERO DATI
Private Sub OnConnect()
Dim Client As System.Net.Sockets.Socket = Listener.AcceptSocket
Dim Buffer() As Byte
Try
Dim bi As Integer = 0
While Client.Available > 0
ReDim Preserve Buffer(bi)
Client.Receive(Buffer, bi, 1, Sockets.SocketFlags.None)
bi += 1
End While
Catch e As IndexOutOfRangeException
End Try
Dim message As String = System.Text.Encoding.Default.GetString(Buffer)
Dim REP As System.Net.IPEndPoint = Client.RemoteEndPoint
Client.Close()
Dim args As New InMessEvArgs(message, REP.Address.ToString())
RaiseEvent IncomingMessage(args)
End Sub
Public Structure InMessEvArgs
Dim message As String
Dim senderIP As String
Public Sub New(ByVal Message As String, ByVal SenderIP As String)
Me.message = Message
Me.senderIP = SenderIP
End Sub
End Structure
Private Sub OnIncomingMessage(ByVal Args As ServerClass.InMessEvArgs) Handles Srv.IncomingMessage
' recupero il comando inviato al server
comando = Args.message
ipclient = Args.senderIP
.
.
.
.
END SUB
Ciauz
blood
Profilo
| Senior Member
291
messaggi | Data Invio:
lun 3 lug 2006 - 12:55
devi crearti un OpenFileDialog per selezionare il file, dopodichè usi la funzione StreamFromFile (converti in byte) e dopodiche trasferisci..oppure:
Dim stream as String
Dim leggi_file As New System.IO.StreamReader(OpenFileDialog.FileName)
stream = file.ReadToEnd() ' leggi i byte del file
dopodiche userai uno StreamWriter per scriverlo sul file dall'altra parte dopo aver trasmesso i byte via socket ( penso che sai come fare )
ps. ma in questo code che hai incollato il file come ce lo mettevi che usi la funzione SendMessage solo con stringhe di dati???
---------------
Piscopo Paolo
:: wD @ IRCnet :: .NET wannabe 8-)
Isteriko
Profilo
| Newbie
10
messaggi | Data Invio:
lun 3 lug 2006 - 13:43
si praticamente riesco a trasmettere solo stringhe , cmq il codice l'ho riadattato da uno script trovato in rete...
Ora cerco di capire cio' che hai scritto praticamente faccio lo streamreader del file anche se è un file di tipo immagine?? dopo di che assegno tutto alla variabile stream e passo tale variabile come parametro nel sendmessage?
Dopo di che riscrivo il file con lo streamwriter dall'applicazione client...
Ho capito bene o ho saltato qualke procedimento?
Grazie
Isteriko
Profilo
| Newbie
10
messaggi | Data Invio:
lun 3 lug 2006 - 15:02
Dim file As String = "c:\windows\win32_system\captured.gif"
Dim stream As String
Dim FileReader As New System.IO.StreamReader(file)
stream = FileReader.ReadToEnd() ' leggi i byte del file
inviatestoimmagine(stream, ipclient)
Public Sub inviatestoimmagine(ByVal testo As String, ByVal ipclient As String)
Dim IP As String = ipclient
Dim PORT As Integer = 5555
Dim DATA As String = "immagine" & "*" & testo
Try
SendMessage(IP, PORT, DATA)
Catch ex As Exception
MessageBox.Show(ex.Message, "Error sending message")
End Try
End Sub
Public Sub SendMessage(ByVal Ip As String, ByVal Port As Integer, ByVal Message As String)
Try
Dim client As New System.Net.Sockets.TcpClient
Dim Buffer() As Byte = System.Text.Encoding.Default.GetBytes(Message.ToCharArray)
client.Connect(Ip, Port)
client.GetStream.Write(Buffer, 0, Buffer.Length)
client.Close()
Catch ex As Exception
Throw New Exception("Remote IP is not reachable")
End Try
End Sub
questo è lo script modificato in base a quanto ho capito ... ma non funziona lo stesso.. mi passa una stringa al client... :(
blood
Profilo
| Senior Member
291
messaggi | Data Invio:
lun 3 lug 2006 - 15:14
ma ci credo, non devi passargli il file mediante stringa ma devi usare l'openfiledialog come ti ho detto io e poi devi crearti un array di bytes() a cui devi assegnare il file.readtoend() che sarà poi il parametro con cui usare il send ... per il resto il metodo è quello hai capito bene.
Cerca qualche info sull'uso del openfiledialog e la cattura dei file, sicuramente ne verrai a capo da solo!
---------------
Piscopo Paolo
:: wD @ IRCnet :: .NET wannabe 8-)
Isteriko
Profilo
| Newbie
10
messaggi | Data Invio:
lun 3 lug 2006 - 15:17
il problema è che l'applicazione non è in locale ma in remoto quindi non posso usare l'openfiledialog ...
Isteriko
Profilo
| Newbie
10
messaggi | Data Invio:
lun 3 lug 2006 - 15:28
esiste un altro modo per passargli l'immagine?
Dim stream() As Byte
Dim FileReader As New System.IO.StreamReader(file)
stream = FileReader.ReadToEnd ' leggi i byte del file
mi restituisce un errore nella terza riga dicendo che è impossibile convertire un valore di tipo stringa in una matrice di byte...
ma non è che avresti un esempio già fatto magari vedo meglio?
grazie!
p.s.
anche utlizzando il metodo cosi per prova come hai detto tu mi restituisce lo stesso errore...
Dim stream() As Byte
Dim FileReader As New System.IO.StreamReader(OpenFileDialog1.FileName)
stream = FileReader.ReadToEnd ' leggi i byte del file
blood
Profilo
| Senior Member
291
messaggi | Data Invio:
mar 4 lug 2006 - 08:57
>Dim stream as String
>Dim leggi_file As New System.IO.StreamReader(OpenFileDialog.FileName)
>stream = file.ReadToEnd() ' leggi i byte del file
io cosi avevo detto...cmq sia al tuo ultimo code cambiaci da bytes a stringa la variabile a cui associ il readtoend
ps. se è ini remoto allora passagli direttamente l'intera path del file,quindi fai cosi:
Dim stream as String
Dim file as New System.IO.StreamReader("C:\ciccio\ciccio.jpg")
stream = file.ReadToEnd()
dopodichè dall'altra parte fai lo StreamWriter ed il file è pronto
---------------
Piscopo Paolo
:: wD @ IRCnet :: .NET wannabe 8-)
Isteriko
Profilo
| Newbie
10
messaggi | Data Invio:
mar 4 lug 2006 - 12:20
senti tutto ok come hai detto avevo provato anche ieri a cambiare da vettorebyte come mi avevi detto in string riesco a passare i dati ma quando vado a fare lo streamwriter mi da il seguente errore...
Illegal characters in path.
se vado a visualizzare i dati passati in una texbox sono i seguenti quindi credo che la cosa funzioni...
zVPcx0Tm8h?Mv}:D(t')O=O?z>1K c?g?3 k/?4 T!
quindi qualkosa trasferisce...
ciao
blood
Profilo
| Senior Member
291
messaggi | Data Invio:
mar 4 lug 2006 - 15:06
dice che la path in cui vuoi scrivere o dove è presente il file è errata...cosa c'entra la path scusa?
ps. ri pastami il codice che usi dalla parte in cui ricevi e poi scrivi con lo streamwriter
---------------
Piscopo Paolo
:: wD @ IRCnet :: .NET wannabe 8-)
Isteriko
Profilo
| Newbie
10
messaggi | Data Invio:
mar 4 lug 2006 - 15:34
allora
Public Sub dataReceived(ByVal data As System.String) Handles mySocketClientWrapper.dataReceived
'evento generato dal client in seguito alla ricezione di dati
listBoxRcv.Items.Add(New String(data + Chr(13) + Chr(10)))
End Sub
questa praticamente va a scrivere in una listbox i dati ricevuti in caso fosse del testo....
ora questa la dovrei trasformare come??
Public Sub dataReceived(ByVal data As System.String) Handles mySocketClientWrapper.dataReceived
Dim scrivi_filestream As New StreamWriter(data) 'questa è la stringa che restituisce errore....
End Sub
e cmq dopo che il codice che restituisce errore che altro dovrei fare per trasformare nuovamento lo streaming in un file jpg come in questo caso??
blood
Profilo
| Senior Member
291
messaggi | Data Invio:
mar 4 lug 2006 - 15:50
>
>Public Sub dataReceived(ByVal data As System.String) Handles
>mySocketClientWrapper.dataReceived
>
>Dim scrivi_filestream As New StreamWriter(data) 'questa è la
>stringa che restituisce errore....
>
>End Sub
>
ma no lì devi specificarci la path dove salvare il file ad es. "C:\ciccio.jpg"
dopodiche fai
scrivi_filestream.Write(data)
scrivi_filestream.Close()
ecco cosa c'entrava la path
---------------
Piscopo Paolo
:: wD @ IRCnet :: .NET wannabe 8-)
Isteriko
Profilo
| Newbie
10
messaggi | Data Invio:
mer 5 lug 2006 - 13:36
:))) ok provo immediatamente... thnx
fatto l'immagine la salva ma a quanto pare non la visualizza ... credo abbia bisogno di qualke tipo di conversione... sai gia come fare vero?? Grazie anticipatamente...
Try
Dim scrivi_filestream As New StreamWriter("c:\immagine.gif")
scrivi_filestream.Write(data)
scrivi_filestream.Close()
Catch ex As Exception
End Try
Isteriko
Profilo
| Newbie
10
messaggi | Data Invio:
mer 5 lug 2006 - 14:57
Ho trovato anche uno script per la conversione della stringa in un array di byte e successivamente scriverlo in un memorystream per poi assegnare l'immagine alla picturebox... ma non funziona... :(
Dim arraystring() As Byte = System.Text.Encoding.UTF8.GetBytes(data)
Dim count As Integer = arraystring.Length
Dim ms As New MemoryStream
ms.Write(arraystring, 0, count)
PictureBox1.Image = Image.FromStream(ms)
ms.Close()
quando vado ad assegnare alla picturebox l'image.fromstream(ms) mi dice invalid parameter used....
Ora ho lo stream è corrotto o non so che caxx devo fare ma dico io non esiste nessun esempio già bello e fatto di sta cosa?? UFF
Torna su
Stanze Forum
Elenco Threads
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?
Dopo esserti registrato potrai chiedere
aiuto sul nostro
Forum
oppure aiutare gli altri
Consulta le
Stanze
disponibili.
Registrati ora !