File Transfer mit TCPClient

30/01/2009 - 15:21 von Gerhard W. | Report spam
Hi,

ich arbeite gerade an einem Projekt mit PDA und PC. Ich muss vom PDa auf den
PC Dateien übertragen. Ich habe auch schon eine Kommunikationslösung im
Internet gefunden. Übertragen werden lediglich XML-Dateien. Die Übertragungen
funktionieren soweit, leider sind die empfangenen Dateien fehlerhaft.

Kann jemand erkennen wo hier der Fehler liegt.

Am PC wird folgendes ausgeführt:
Dim handlerSocket As Socket
Dim tcpListener As New TcpListener(IPAddress.Any, 8888)
tcpListener.Start()
handlerSocket = tcpListener.AcceptSocket
If handlerSocket.Connected Then
Dim networkStream As NetworkStream = New
NetworkStream(handlerSocket)
Dim blockSize As Int16 = 1024
Dim thisRead As Int16
Dim dataByte(blockSize) As Byte
SyncLock Me
Dim fileStream As Stream
fileStream = File.OpenWrite(XMLDatei)
While (True)
thisRead = networkStream.Read(dataByte, 0, blockSize)
fileStream.Write(dataByte, 0, dataByte.Length)
If thisRead = 0 Then
Exit While
End If
End While
fileStream.Close()
End SyncLock
handlerSocket.Close()
handlerSocket = Nothing
End If
Catch ex As Exception

End Try
tcpListener.Stop()

und am PDA mache ich folgendes:
Dim fileBuffer As Byte()
Dim fileStream As Stream
If File.Exists(Datei) Then
fileStream = File.OpenRead(Datei)
ReDim fileBuffer(fileStream.Length)
fileStream.Read(fileBuffer, 0, fileStream.Length)
Try
Dim clientSocket As New TcpClient(ZielHost, 8888)
Dim netWorkStream As NetworkStream
netWorkStream = clientSocket.GetStream()
If netWorkStream.CanWrite Then
netWorkStream.Write(fileBuffer, 0, fileStream.Length)
netWorkStream.Close()
Else
MsgBox("Fehler bei der Übertragung! Es kann nicht
gesendet werden...", MsgBoxStyle.OkOnly)
End If
Catch ex As Exception
MsgBox(ex.Message, MsgBoxStyle.OkOnly)
End Try
fileStream.Close()
Else
MsgBox("Keine Datei (Dienstbuch.xml) zum Senden gefunden!",
MsgBoxStyle.OkOnly)
End If

...und hier die empfangene fehlerhafte Datei:
<?xml version="1.0" encoding="utf-16"?>
<Daten>
<Datensatz UserID="36" Von="07:00" Bis="07:30" KM="0" EH="2" CodeID="1"
PatientenID="" PatientenText="" Datum="30.01.09" />
<Datensatz UserID="31" Von="07:00" Bis="07:30" KM="0" EH="2" CodeID="17"
PatientenID="" PatientenText="" Datum="30.01.09" />
<Artikelbuchungen UserID="10" Datum="04.01.09" PatientenID="40"
IDArtikel="59" Menge="2" IDEinheit="1" IDArtikelgruppe="1" />
<Artikelbuchungen UserID="31" Datum="30.01.09" PatientenID="163"
ID䄀爀琀椀欀攀氀㴀∀㜀 ∀ 䴀攀渀最攀㴀∀㔀∀ 䤀䐀䔀椀渀栀攀椀琀㴀∀㄀∀ 䤀䐀䄀爀琀椀欀攀氀最爀甀瀀瀀攀㴀∀㈀∀ ⼀㸀ഀ਀    㰀䄀爀琀椀欀攀氀戀甀挀栀甀渀最攀渀 唀猀攀爀䤀䐀㴀∀㌀㘀∀ 䐀愀琀甀洀㴀∀㌀ ⸀ ㄀⸀ 㤀∀ 倀愀琀椀攀渀琀攀渀䤀䐀㴀∀㄀㈀∀ 䤀䐀䄀爀琀椀欀攀氀㴀∀㔀㤀∀ 䴀攀渀最攀㴀∀㐀∀ 䤀䐀䔀椀渀栀攀椀琀㴀∀㄀∀ 䤀䐀䄀爀琀椀欀攀氀最爀甀瀀瀀攀㴀∀㄀∀ ⼀㸀ഀ਀㰀⼀䐀愀琀攀渀㸀䐀㴀∀㌀㄀∀ 嘀漀渀㴀∀ 㜀㨀  ∀ 䈀椀猀㴀∀ 㜀㨀㌀ ∀ 䬀䴀㴀∀ ∀ 䔀䠀㴀∀㈀∀ 䌀漀搀攀䤀䐀㴀∀㄀㜀∀ 倀愀琀椀攀渀琀攀渀䤀䐀㴀∀∀ 倀愀琀椀攀渀琀攀渀吀攀砀琀㴀∀∀ 䐀愀琀甀洀㴀∀㌀ ⸀ ㄀⸀ 㤀∀ ⼀㸀ഀ਀    㰀䄀爀琀椀欀攀氀戀甀挀栀甀渀最攀渀 唀猀攀爀䤀䐀㴀∀㄀ ∀ 䐀愀琀甀洀㴀∀ 㐀⸀ ㄀⸀ 㤀∀ 倀愀琀椀攀渀琀攀渀䤀䐀㴀∀㐀 ∀ 䤀䐀䄀爀琀椀欀攀氀㴀∀㔀㤀∀ 䴀攀渀最攀㴀∀㈀∀ 䤀䐀䔀椀渀栀攀椀琀㴀∀㄀∀ 䤀䐀䄀爀琀椀欀攀氀最爀甀瀀瀀攀㴀∀㄀∀ ⼀㸀ഀ਀    㰀䄀爀琀椀欀攀氀戀甀挀栀甀渀最攀渀 唀猀攀爀䤀䐀㴀∀㌀㄀∀ 䐀愀琀甀洀㴀∀㌀ ⸀ ㄀⸀ 㤀∀ 倀愀琀椀攀渀琀攀渀䤀䐀㴀∀㄀㘀㌀∀ 䤀䐀
Artikel="70" Menge="5" IDEinheit="1" IDArtikelgruppe="2" />
<Artikelbuchungen UserID="36" Datum="30.01.09" PatientenID="12"
IDArtikel="59" Menge="4" IDEinheit="1" IDArtikelgruppe="1" />
</Daten>D="31" Von="07:00" Bis="07:30" KM="0" EH="2" CodeID="17"
PatientenID="" PatientenText="" Datum="30.01.09" />
<Artikelbuchungen UserID="10" Datum="04.01.09" PatientenID="40"
IDArtikel="59" Menge="2" IDEinheit="1" IDArtikelgruppe="1" />
<Artikelbuchungen UserID="31" Datum="30.01.09" PatientenID="163" ID

...genauso wie oben dargestellt erhalte ich die Datei...

Danke für eure Hilfe.

Gerhard
 

Lesen sie die antworten

#1 Gerhard W.
30/01/2009 - 16:25 | Warnen spam
Danke, hab ich kurz vorher selbst entdeckt. Vom PDA zum PC funktioniert es
wunderbar, nur vom PC zum PDA wird zwar die Datei übertragen, aber die ist
leer????

Hab den Code schon x-mal kontrolliert und finde den Fehler nicht. Verwende
am PC den selben Code wie am PC für die Übertragung.

LG
Gerhard


"Stefan L" wrote:

Moin,

ein Fehler ist definitiv beim Schreiben die falsche Lànge. Du darfst
maximal die empfangene Anzahl Bytes schreiben.
Das erklàrt die Wiederholung. Und wenn der Stream nicht genügend Daten
hatte auch die geschredderten Datan in der Mitte.

Gruss,
Stefan


While (True)
thisRead = networkStream.Read(dataByte, 0, blockSize)
If thisRead = 0 Then
Exit While
End If
fileStream.Write(dataByte, 0, thisRead) '* <== besser so
End While




Ähnliche fragen