0

VB.Netでファイル共有プログラムを作成したのですが、ファイルを送信しようとすると、受信側でファイルが正しく受信されません。私が送ったファイルの一部だけです。たとえば、100 MB のファイルを送信した場合、10 MB しか受信されません。22KB、39MBなどの場合もあります。受信したファイルのサイズは常に同じではありません。この問題の原因は何だと思いますか? ファイル全体を正しく受信するにはどうすればよいですか?

送信部

Sub Main()
    Dim ip As New IPEndPoint(IPAddress.Any, 8888)' Port Server
    Dim sock As New Sockets.Socket(AddressFamily.InterNetwork, SocketType.Stream,   ProtocolType.IP)' Protocol type
    sock.Bind(ip)
    sock.Listen(100)
    While True' Check Client Connection
        Try
           msg("Accept Client Connect")
           Dim csock As Sockets.Socket = sock.Accept
           Dim csend(1024 * 10000) As Byte
           Dim path As String = "C:\Users\IT\Desktop\test\" ' Location to save file
           Dim bLen As Integer = csock.Receive(csend) ' Byte Read Len
           Dim fileLen As Integer = BitConverter.ToInt32(csend, 0) ' File Len
           Dim fName As String = Encoding.ASCII.GetString(csend, 4, fileLen) ' File Name
           msg("Start Receive....." & fName)
           Dim bWrite As New BinaryWriter(File.Open(path + fName, FileMode.Append))
           bWrite.Write(csend, 4 + fileLen, bLen - 4 - fileLen)
           msg("File receiced and Save " & path)
           bWrite.Close()
           csock.Close()
       Catch ex As Exception
           msg(ex.Message)
       End Try
    End While
    Console.ReadLine()
End Sub

Sub msg(ByVal mesg As String)
mesg.Trim()
Console.WriteLine(" >> " + mesg)
End Sub

受信部

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)     Handles Button2.Click
    Dim ipServer As IPAddress() = Dns.GetHostAddresses("127.0.0.1") ' IP Server
    Dim ip As IPEndPoint = New IPEndPoint(ipServer(0), 8888)
    Dim csock As Socket = New Socket(AddressFamily.InterNetwork, SocketType.Stream,     ProtocolType.IP)
    Dim fName As String = TextBox1.Text
    Dim path As String = TextBox2.Text
    Dim fNameByte() As Byte = Encoding.ASCII.GetBytes(fName)
    Dim fData() As Byte = File.ReadAllBytes(path & "\" & fName)
    Dim cData(4 + fName.Length + fData.Length) As Byte
    Dim fDataLen() As Byte = BitConverter.GetBytes(fNameByte.Length)
    Try
       fDataLen.CopyTo(cData, 0)
       fNameByte.CopyTo(cData, 4)
       fData.CopyTo(cData, 4 + fNameByte.Length)
       csock.Connect(ip)
       csock.Send(cData)
       MsgBox("Success Send File ")
       csock.Close()
    Catch ex As Exception
       MsgBox(ex.Message)
    End Try
End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)  Handles Button1.Click
    If OpenFileDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then
    TextBox1.Text = System.IO.Path.GetFileName(OpenFileDialog1.FileName)
    TextBox2.Text = System.IO.Path.GetDirectoryName(OpenFileDialog1.FileName)
    End If
End Sub
4

1 に答える 1