Jump to content
Windows Dragon

P2P File Sender

Recommended Posts

Windows Dragon

Boas pessoal... eu tenho estado a trabalhar num P2P File Sender mas agora encontrei um problema... Quando envio um ficheiro pela internet o ficheiro fica danificado :S

aqui está o codigo do servidor

Imports System.Net
Imports System.Net.Sockets
Imports System.IO
Imports System.Threading
Imports System.Text

Public Class Server
    Private filePath As String
    Delegate Sub nan()

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        TextBox1.Text = ""
        Dim fdlg As OpenFileDialog = New OpenFileDialog()
        fdlg.Title = "Dados a enviar..."
        fdlg.InitialDirectory = "c:\"
        fdlg.Filter = "Todos os ficheiros (*.*)|*.*|Todos os ficheiros (*.*)|*.*"
        fdlg.FilterIndex = 2
        fdlg.RestoreDirectory = True
        If fdlg.ShowDialog() = DialogResult.OK Then
            TextBox1.Text = fdlg.FileName
            Try
                Client = New TcpClient(TextBox2.Text, 8787)
                Dim Writer As New StreamWriter(Client.GetStream())
                Writer.Write(fdlg.SafeFileName)
                Writer.Flush()
                Button2.Enabled = True
            Catch ex As Exception
                MsgBox(ex.ToString)
            End Try
        End If
    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Button2.Enabled = False

        filePath = TextBox1.Text

        Dim sendThread As New System.Threading.Thread(AddressOf sendSub)
        sendThread.IsBackground = True
        sendThread.Start()
    End Sub

    Private Sub sendSub()
        Dim cli As New TcpClient
        cli.Connect(TextBox2.Text, 1300)
        Try
            Dim nstm As Stream = cli.GetStream()
            Dim fstm As Stream = New FileStream(filePath, FileMode.Open, FileAccess.Read)

            Dim buffer(1024 - 1) As Byte
            Do While True
                Dim bytesRead As Integer = fstm.Read(buffer, 0, buffer.Length)
                If bytesRead = 0 Then Exit Do
                nstm.Write(buffer, 0, bytesRead)
                nstm.Flush()
            Loop

            cli.Close()
            nstm.Close()
            fstm.Close()
            MsgBox("Ficheiro transferido com sucesso!", MsgBoxStyle.Exclamation, "Concluido")
            Invoke(New nan(AddressOf closeAll), New Object() {})

        Catch ex As Exception
            MsgBox("Ocurreu um erro:" & vbCr & ex.ToString, MsgBoxStyle.Critical, "Error")
        End Try
    End Sub


    Private Sub closeAll()
        Me.Close()

    End Sub
    Dim Client As New TcpClient
    Dim Message As String = ""
    Public strIPAddress As String
    Public strHostName As String

    Private Sub Server_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim WC As New System.Net.WebClient
        WC.Dispose()
    End Sub

    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
        If TextBox2.Text <> "" Then
            Button1.Enabled = True
        End If
    End Sub

E o Cliente...

Imports System.Net.Sockets
Imports System.Net
Imports System.IO
Imports System.Threading
Imports System.Text

Public Class FileTransfererClient
    Private filePath As String
    Dim Listener As New TcpListener(IPAddress.Any, 8787)
    Dim Client As New TcpClient
    Dim Message As String = ""
    Public Port As String
    Public strIPAddress As String
    Public strHostName As String
    Private Sub Listening()
        Listener.Start()
    End Sub

    Private Sub ListenSub()
        Dim server As New TcpListener(IPAddress.Any, 1300)
        server.Start()
        Try
            While True
                Dim c As TcpClient = server.AcceptTcpClient
                Dim s As NetworkStream = c.GetStream

                FileOpen(1, filePath, OpenMode.Binary)
                Dim buffer(1024 - 1) As Byte
                Do While True
                    Dim bytesRead As Integer = s.Read(buffer, 0, buffer.Length)
                    If bytesRead = 0 Then Exit Do
                    FilePut(1, buffer)
                Loop
                FileClose(1)

                s.Close()
                c.Close()
            End While
        Catch ex As Exception
            MsgBox("Ocurreu um erro:" & vbCr & ex.ToString, MsgBoxStyle.Critical, "Error")
        End Try
    End Sub
    
    Private Sub FileTransfererClient_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim ListThread As New Thread(New ThreadStart(AddressOf Listening))
        ListThread.Start()
        Dim WC As New System.Net.WebClient
        WC.Dispose()
        Listener.Start()
    End Sub

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        If Listener.Pending = True Then
            Message = ""
            Client = Listener.AcceptTcpClient()
            Dim Reader As New StreamReader(Client.GetStream())
            While Reader.Peek > 0
                Message = Message & Convert.ToChar(Reader.Read()).ToString
            End While
            TextBox1.Text = Message

        End If
    End Sub

    Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
        TextBox1.Enabled = False
        filePath = "C:\Users\" & Environment.UserName & "\Downloads\" & TextBox1.Text
        Dim ListenThread As System.Threading.Thread = New System.Threading.Thread(AddressOf ListenSub)
        ListenThread.IsBackground = True
        ListenThread.Start()
    End Sub
End Class

Eu suspeito que será nã encriptação e desencriptação do ficheiro... mas não estou a ver o que está mal :S

Share this post


Link to post
Share on other sites
Andrepereira9

Boas

Podes disponibilizar o projecto.

Tentei usar o codigo que deste, mas começa a dar-me erros


A informática chegou para resolver problemas que antes não existiam

Quem ri por último é porque está conectado a 52 Kbs.

Share this post


Link to post
Share on other sites
Windows Dragon

Nada?? Eu também ainda não consegui perceber o que se passa :S pk usando o IP 127.0.0.1 (localhost) fica tudo OK mas quando mando pela internet os ficheiros de audio ficam distorcidos e alguns  inutilizáveis e ficheiros rar danificados

Share this post


Link to post
Share on other sites
Andrepereira9

Boas

Não tenho tido muito tempo, mas já estive a testar via Internet (entre 2 ligações moveis distintas) e apenas os ficheiros .exe é que fica corrompidos. Os restantes ficam ok. Ainda não percebi é porquê, porque como disseste pelo localhost, não faz isso  🤔


A informática chegou para resolver problemas que antes não existiam

Quem ri por último é porque está conectado a 52 Kbs.

Share this post


Link to post
Share on other sites
Windows Dragon

Então podemos fazer o seguinte... eu envio-te ou tu a mim um ficheiro de audio ou rar/zip para ver se existem problemas... da ultima vez nao funcionou mt bem vou-te enviar um PM com o meu IP

==EDIT==

Testei agora com um ficheiro ZIP e o ficheiro está corrompido

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.