Hallo, ich möchte ein großes Datenpaket mittels TCP/IP übertragen.
Ich benutze das Client-Server-Model des hier beschriebenen Tutorials.
http://www.codeplanet.eu/tutorials/c...er-modell.html
Serverseitig:
Code:
public void SendMusiktitelListe(IPacket packet)
{
LogConsole("asked for Musiktitellist. Sending.", packet.Source);
Encoding enc = Encoding.Unicode;
IPacket replyPacket = Protocol.CreatePacket(SocketType.Stream);
replyPacket.Type = PacketType.MusiktitelListeReply;
replyPacket.Encoding = enc;
replyPacket.Source = ServerIPEndPoint;
replyPacket.Destination = packet.Source;
byte[] data = SerializeMusiktitelListe(enc); // Das komplette Paket
// zerteile das ganze Paket in kleinere mit 1500Bytes.
byte[] myWriteBuffer = new byte[Vars.MTU];
int index = 0;
// a = source array
// 1 = start index in source array
// b = destination array
// 0 = start index in destination array
// 3 = elements to copy
// Array.Copy(a, 1, b, 0, 3);
while ((index + Vars.MTU) < data.Length)
{
Array.Copy(data, index, myWriteBuffer, 0, Vars.MTU); // MTU = 1500
replyPacket.Data = myWriteBuffer;
Send(replyPacket);
index += Vars.MTU;
Thread.Sleep(100); // meiner Verzweiflung geschuldet! Hilft nicht!
};
if (index < data.Length)
{
myWriteBuffer = new byte[data.Length - index];
Array.Copy(data, index, myWriteBuffer, 0, data.Length - index);
replyPacket.Data = myWriteBuffer;
Send(replyPacket);
}
}
Clientseitig:
Code:
/// <summary>
/// Stores all possible packet types in the protocol.
/// </summary>
public void PacketReceived(object sender, PacketEventArgs e)
{
// Switch on message types
switch(e.Packet.Type)
{
case PaketType MusiktitelListeResponse:
UpdateMusiktitelListe(e.Paket);
break;
...
}
}
Code:
List<string> datenPakete = new List<string>();
private void UpdateMusiktitelListe(IPacket packet)
{
try
{
Encoding enc = packet.Encoding;
string data = enc.GetString(packet.Data);
datenPakete.Add(data);
// Alle Pakete bis EOF lesen
if (data.EndsWith(Vars.EOF) == true)
{
sbMusiktitelListe = new StringBuilder();
foreach(string s in datenPakete)
sbMusiktitelListe.Append(s);
datenPakete.Clear();
MusiktitelListe = sbMusiktitelListe.ToString();
if (GetMusiktitelListe != null)
GetMusiktitelListe();
SendStatus(">>> Update MusiktitelListe <<<");
}
} <----------- Breakpoint
catch (ArgumentNullException ex)
{
SendStatus(ex.Message);
}
}
Die Verbindung zum Server wird unterbrochen und das Paket kommt unvollständig an.
Wenn ich den Client Debugge ist alles OK.
Wer kann hier weiterhelfen?
Schon mal ein Danke im voraus.
Outdoorboy