Geachte,
Ik ben al een tijdje bezig in vb.net en probeer nu een bestand door te sturen van client naar server
Momenteel heb ik de volgende code:
Momenteel verstuur ik enkel de laatste 2000 bytes, (veld_ontvangen) is gewoon een txtveld waar ik de gegevens nog eens in toon
d is een arraylist, de data wordt van de client gestuurd onder de vorm 55-66-8-51-103-58, vandaar dat ik split op (-) om de bytes te kunnen onderscheiden.
Nu controleer ik ook op lege bytes en deze laat hij ervan tussen, alleen als ik nu laat printen hoeveel plaatsen er gevuld zijn in d krijg ik de waarde 2005, terwijl er maar 2000 zijn verzonden.
als ik de arraylist laat printen zie ik dat er 3 lege plaatsen zijn:
- kan er niet bijkomen hoe dit kan
- dan zit ik nog altijd met 2 bytes teveel
Een 2de probleem is dat de byte array in de client soms groter of kleiner is, orde +-20 bytes
Vandaar dan ook men vraag Hoe kan dit? en nog belangrijker is dit een omslachtige manier van werken of bestaat er al een class die dit werk al doet?
Alvast bedankt
Kristof
Ik ben al een tijdje bezig in vb.net en probeer nu een bestand door te sturen van client naar server
Momenteel heb ik de volgende code:
Visual Basic: Client - (functie om van bestand naar byte array te gaan
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| Private Function ReadFile(ByVal filePath As String) As Byte() Dim oFile As System.IO.FileInfo oFile = New System.IO.FileInfo(filePath) Dim oFileStream As System.IO.FileStream = oFile.OpenRead() Dim lBytes As Long = oFileStream.Length Dim fileData(lBytes - 1) As Byte If (lBytes > 0) Then oFileStream.Read(fileData, 0, lBytes) oFileStream.Close() End If Return fileData End Function |
Visual Basic: Client - (functie om van byte array door te sturen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| Private Sub Send() Dim sw As IO.StreamWriter Dim arr() As Byte = ReadFile("test.bmp") Try sw = New IO.StreamWriter(tcpClient.GetStream) sw.Write("filesending:" & arr.Length) sw.Flush() For i As Integer = arr.Length - 2000 To arr.Length - 1 veld_ontvangen.AppendText(arr(i) & vbCrLf) sw.Write(arr(i) & "-") sw.Flush() Next Catch ex As Exception MessageBox.Show(ex.ToString) End Try End Sub |
Momenteel verstuur ik enkel de laatste 2000 bytes, (veld_ontvangen) is gewoon een txtveld waar ik de gegevens nog eens in toon
Visual Basic: Server- (functie om data te ontvangen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
| Private Sub lees(ByVal ar As System.IAsyncResult) Dim totalRead As Integer Try totalRead = mClient.GetStream.EndRead(ar) Catch ex As Exception MessageBox.Show(ex.ToString) End Try If totalRead > 0 Then Dim receivedString1 As String = System.Text.Encoding.UTF8.GetString(readBuffer, 0, totalRead) If receivedString1.StartsWith("filesending:") Then Dim split() As String = receivedString1.Split(":") aantal = split(1) MessageBox.Show(aantal) ElseIf d.Count - 1 = aantal Then MessageBox.Show("einde") vormfile() Else Try Dim splitt() As String = receivedString1.Split("-") For i As Integer = 0 To splitt.Length - 1 If Len(splitt(i).ToString) <> 0 Then d.Add(splitt(i)) Console.WriteLine(splitt(i) & " - " & Len(splitt(i).ToString)) End If Next Catch ex As Exception MessageBox.Show(ex.ToString & " de ERROR") End Try End If End If Try mClient.GetStream.BeginRead(readBuffer, 0, BYTES_TO_READ, AddressOf lees, Nothing) Catch ex As Exception MessageBox.Show(ex.ToString) End Try End Sub |
d is een arraylist, de data wordt van de client gestuurd onder de vorm 55-66-8-51-103-58, vandaar dat ik split op (-) om de bytes te kunnen onderscheiden.
Nu controleer ik ook op lege bytes en deze laat hij ervan tussen, alleen als ik nu laat printen hoeveel plaatsen er gevuld zijn in d krijg ik de waarde 2005, terwijl er maar 2000 zijn verzonden.
als ik de arraylist laat printen zie ik dat er 3 lege plaatsen zijn:
- kan er niet bijkomen hoe dit kan
- dan zit ik nog altijd met 2 bytes teveel
Een 2de probleem is dat de byte array in de client soms groter of kleiner is, orde +-20 bytes
Vandaar dan ook men vraag Hoe kan dit? en nog belangrijker is dit een omslachtige manier van werken of bestaat er al een class die dit werk al doet?
Alvast bedankt
Kristof