Brox Opublikowano 8 Lipca 2012 Udostępnij Opublikowano 8 Lipca 2012 Siemka! Mam pytanie jak mogę wysłać za pomocą 39dll.dll obrazek? Męczę się z tym i coś mi nie wychodzi. Jak ja to robie: :D Najpierw zamieniam obrazek.bmp na tekst, następnie otwieram go za pomocą file_text_open_read.... i całą zawartość zapisuje do jednej zmiennej (zmienna += file_text_read_string()....) no i gdy go wysłam to przy odbiorze są tylko 5 pierwszych liter tego tekstu z obrazka a reszty nie ma. Więc jak to zrobić, aby wysłać obrazek poprzez 39dll.dll po zmienieniu jego formatu na .txt? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
ediepl Opublikowano 8 Lipca 2012 Udostępnij Opublikowano 8 Lipca 2012 Lol, po co w ogóle zmeniać to na text, lepiej otworzyć to binarnie i przesyłać go kawałkami do odbiorcy, a on z kolei bedzie to "czytał" i zapisywał do pliku. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Brox Opublikowano 8 Lipca 2012 Autor Udostępnij Opublikowano 8 Lipca 2012 A mógłbyś mi napisać jak to mniej więcej się robi, bo nie za bardzo wiem :D Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
ediepl Opublikowano 9 Lipca 2012 Udostępnij Opublikowano 9 Lipca 2012 Najpierw wysyłasz informacje o pliku( np wielkość, rozmiar bufora( ilość bajtów pliku przesłanych w jednej wiadomości ) ) następnie odczytujesz z pliku po ileś tam bajtów i wysyłasz je. Odbiorca przy pierwszym pakiecie tworzy nowy plik binarny, i zapisuje do niego bajty z kolejnych wiadomości. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Brox Opublikowano 9 Lipca 2012 Autor Udostępnij Opublikowano 9 Lipca 2012 Ok, poczytałem trochę jak wysyłać te bajty, ale i tak coś mi nie wychodzi. kod na wysyłanie: GML file = file_bin_open("image.png",0); size = file_bin_size(file); for(i=0;i<size+1;i+=1) { bajt = file_bin_read_byte(file); file_bin_seek(file,i); clearbuffer(); writebyte(IMAGE); writebyte(bajt); sendmessage(global.serwer); } file_bin_close(file); kod na odbieranie: GML case IMAGE: file = file_bin_open("image.png",1) file_bin_write_byte(file,readbyte()); file_bin_close(file) break; No i gdy już się wszystko wyśle to i tak plik jest o rozmiarze jednego bajta to tak jak by doszedł tylko jeden bajt. Nie wiem o co chodzi, może chodzi o to że gdy ciągle otwieram ten plik aby wpisać tego bajta to najpierw się czyści ten plik a potem go zapisuje, a nie że dopisuje do tego co już jest, jeżeli tak jest to co zrobić aby dopisywało? Oczywiście zrobię tak aby wysyłało większe pakiety tych bajtów a nie tylko po jednym, ale jak to nie chce działać to nie ma co zaczynać :D. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
ediepl Opublikowano 9 Lipca 2012 Udostępnij Opublikowano 9 Lipca 2012 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 ). Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 9 Lipca 2012 Administratorzy Udostępnij Opublikowano 9 Lipca 2012 skoro używasz 39dll, dlaczego nie mozesz uzywac odczytu plików który on oferuje? jest 100x szybszy niz ten GMowy. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto
Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.
Zarejestruj nowe konto
Załóż nowe konto. To bardzo proste!
Zarejestruj sięZaloguj się
Posiadasz już konto? Zaloguj się poniżej.
Zaloguj się