Nie opłaca Ci się otwierać i zamykać co chwilę pliku, już i tak ich obsługa jest wolna w GM.
Schemat bardzo ideowy:
GML
//serwer//
case chce_pobrac_plik:
{
//otworzenie pliku
//wyslanie id wiadomosci(np info),
//jego nazwy,
//rozmiaru,
//i rozmiaru bufora
}
///bleble ble dalszy kod
if( jestem w trakcie wysylania pliku )
{
if( aktualna pozycja w pliku >= wielkosci pliku )
{
//zamykamy plik
}else{
//wyczysc bufer
//zapisz bajt z id wiadomosci np chunk( jakas liczba do rozpoznania wiadomosci, nazwa jest tu symbolicznie( choc moze to byc stala z przypisana liczba ) )
repeat( min(rozmiar bufora, rozmiar pliku - aktualna pozycja w pliku) )
{
//zapisz jeden bajtd o bufora(39dll)
}
//wysli
}
}
///klient///
///blablabla kod na odbieranie wiadomosci z serwera
case info:
{
//otworzenie pliku do zapisu
//pobranie jego nazwy,
//rozmiaru,
//i rozmiaru bufora
}
case chunk:
{
repeat( rozmiar bufora )
{
if( ilosc pobranych bajtow >= wielkosc pliku )
{
//zamykamy plik
}else{
//zapisz_do_pliku( id_pliku, pobrany_bajt )
//zwiekszasz ilosc pobranych bajtow( najlepiej trzymac to w jakies zmiennej )
}
}
}
Jak będziesz miał jeszcze problem to szybko skręce jakiś przykładzik.
PS: Twój problem polegał na tym że w file_bin_open powinien drugi argument wynosić 2( Przy odbieraniu ).