polaczenie tekstu (komendy) i buforu

0

Pisze program do przesylania plikow, ale transfer jest odrobine powolny. Moze od poczatku: program sie komunikuje z innymi klientami / serwerami za pomoca komend tekstowych i wydaje np. komendy takie jak "wyslij_mi plik.txt <offset>", a prog. po drugiej stronie kabla wysyla mu najpierw komende zeby sie przelaczyl w tryb odbierania buforu (zamiast tekstu-komend) a dopiero potem rzadany (chyba tak to sie pisze;)) kawalek pliku... wyglada to tak:

1. prosba o plik
2. odpowiedz i rzadanie ustawienia trybu
3. potwierdzenie ustawienia
4. wyslanie bufora

ja chcialbym scalic text i bufor, ale nie bardzo sie znam na buforach i boje sie, ze jak przekonwertuje bufor z zawartoscia binarna na tekst (zacznijmy od tego ze nie wiem jak;)) to sie ta zawartosc zmieni :(. Najbardziej obawiam sie znakow ASCII 0, 10, 13 i podobnych. Wtedy schemat by byl 2x szybszy:

1. prosba
2. odpowiedz wraz z zawartoscia

DRUGA SPRAWA:
W aktualnej wersji na WinXP czesto prog sie po prostu wylacza bez zadnego ostrzezenia, a na WinME/Win98 dodatkowo wywala Ekran Śmierci... Da sie jakos wylaczyc ten E.Ś ;)? Na WinXP na problem znalazlem tymczasowe wyjscie - drugi program bedzie pilnowal, czy ten pierwszy sie nie wylaczyl... Ale moze sa jakies przelaczniki typu {X+} powodujace np. ignorowanie bledow? Program jest wielowatkowy, wiec jesli jeden z watkow sie skasztani to trza zabic tylko ten jeden, a nie caly program!

I OSTATNIA:
Jak zarzadzac uprawnieniami dostepu do plikow, cos jak w PHP flock()? Mam problem, ze jak jeden watek zapisuje cos do pliku, a drugi w tym czasie pragnie cos z niego odczytac to wywala Ekran Śmierci :(

thx in adv za jakakolwiek pomoc ;)

BTW: jak ktos chcialby obejrzec / ocenic to, co do tej pory zrobilem to zapraszam: http://www.9210.prv.pl/n9210share

0

Mysle, ze to laczenie komunikatow znacznie by nie przyspieszylo. A co do bledow, etc, to moze to byc spowodowane przez rozne rzeczy:
a)przepelnienie bufora gniazda:
Jak normalnie wysylasz dane, to wywolujesz po prostu Send(...). I jesli bufor jest przepelniony, to ta funkcja zwraca 0 i dane nie sa wysylane. Najprosciej jest zmienic to na np: while Send(...)=0 do Sleep(33);
b)gniazdka windowsowskie dziela wszystkie dane na pakiety bodajze 10kb. Wiec jesli wysylasz 'na raz' wiecej, to mozliwe, ze one nie dochadza w takim formacie jak ty chcesz.

1 użytkowników online, w tym zalogowanych: 0, gości: 1