Ronny, was Du implementiert hast, ist ein so genanntes "Stop and Go
Protocol".
D.h. der Sender überträgt ein Datenpaket (kann auch nur ein Byte sein)
und wartet bis der Empfänger eine Antwort schickt und überträgt dann
das nächste Paket etc.
Dieses Verfahren ist immer langsam, weil Du nur maximal die Bandbreite
in einer Richtung nutzen kannst. In Deinem speziellen Fall, der
Byteweisen-Übertragung, nutzt Du nur maximal die halbe Bandbreite der
seriellen Verbindung.
Denn der Sender sendet in einer Zeiteinheit ein Byte. Nun muss er aber
eine Zeiteinheit warten in der der Empfänger ein Byte sendet. D.h. die
hälfte der Zeiteinheiten in der der Sender senden könnte, wartet er und
sendet eben nicht.
Und noch deutlich langsamer wird es, wenn Sender und Empfänger noch
Latenzzeiten haben in der Größenordnung der Übetragungszeiteinheiten.
D.h. wenn sie nicht sofort antworten, sondern erst etwas ausrechnen
müssen und deshalb noch mehr Zeit vergeht und dann antworten.
Die einfachste Lösung des Problems ist schon mal, die Senderpakete
größer machen, und die Paket die vom Empfänger zurück geschickt werden
möglichst klein zu halten.
Aber selbst dann erreichst Du nie 100% Bandbreite.
Die einzige Möglichkeit besteht darin, eine Art "Fenster" zu
verwenden. D.h. der Sender sendet unentwegt die Daten, und sendet z.B.
bis zu 5 unbestätigte Datenpakete an den Empfänger.
Der Empfänger wiederum bestägt jedes Datenpaket sofort, wenn er es
komplett erhalten hat.
Im Idealfall sieht das dann so aus.
1.) Sender sendet erstes Paket komplett, erhält keine Bestätigung.
2.) Sender sendet sofort danach das zweite Paket an den Empfänger.
3.) Während der Sender das zweite Paket sendet, empfängt er die
Bestätigung für das erste Paket.
4.) Sender sendet unverzüglich nach dem zweiten Paket das Dritte.
5.) Währed der Sender das dritte Paket sender, erhält er die
Bestätigung für das zweite Paket.
6.) ...
7.) Der Sender sendet das letzte Paket und erhält währed dessen die
Bestätigung für das vorletzte Paket.
8.) Der Sender hat aufgehört zu senden und muss nun auf die Bestätigung
des letzten Pakets warten.
So in etwa funktionieren Netzwerkprotokolle im Internet. Nur so ist
eine schnelle Datenübertragung möglich.
Was die Sache eben etwas komplizierter macht, ist wenn Pakete frisch
gesendet werden sollen, oder der Empfänger zu langsam ist etc.
Gute Literatur, ein Klassiker, zu diesem Thema ist:
"Computer Networks" von Andrew S. Tanenbaum
http://www.amazon.de/exec/obidos/ASIN/0130384887/