Astonix Napisano Październik 27, 2006 Zgłoś Share Napisano Październik 27, 2006 Sorki że tak syfie wam forum ale jak już nie mam wyjścia , a uważam że świetne te forum to pytam . Mam oto kłopot chcę aby najpierw wysłać tekst, który by określał jaką paczke zachwile serwer bedzie wysyłał, a następnie serwer wysyła te paczkę : [code=Delphi] ss.Socket.Connections[i].SendText('MSGCZAT'); ss.Socket.ConX[WK[Y[K^[[JJN'n'jiŻ^ssj7Ś3&ŚĄh'z(uiyŚIQ4)5M iPŃĄ4)Ocket.ReceiveBuf(dane,sizeof(dane));^|)zcŚźĄź,śćjuŹ2ąsj:Zs9\"z:Zs9\"<ŁzfĄG#si w)Śź]jkZKŻiŚM ŃmtMQ5M iP4)ą6ss.Socket.Connections[i].SendBuf(dane,sizeof(dane)); [/code]To jest po sprawie , ale no wiesz ,serwer nie bedzie za każdym razem czekać sekunde . Z góry Thx Link do komentarza Udostępnij na innych stronach More sharing options...
KKKas Napisano Październik 27, 2006 Zgłoś Share Napisano Październik 27, 2006 Próbuj wysyłać lepiej np: [quote] RODZAJPACZKI|dane [/quote]przy odbiorze rozdzielaj odebrane dane i odpowiednio wg typu działaj dalej... ҉ Link do komentarza Udostępnij na innych stronach More sharing options...
Astonix Napisano Październik 27, 2006 Autor Zgłoś Share Napisano Październik 27, 2006 CYTAT(KKKas)Próbuj wysyłać lepiej np: [quote] RODZAJPACZKI|dane [/quote]przy odbiorze rozdzielaj odebrane dane i odpowiednio wg typu działaj dalej...Tak robiłem ciągłem wszcystko na sendtekst(rodzjapaczki|dane) ale taka metoda jest zbyt denerwujaca np wysli tekst o 3000 znakach to przyjdzie najpierw dane (rP|cos cos cos cos); a potem (cos2 cos2 cos2); Link do komentarza Udostępnij na innych stronach More sharing options...
KKKas Napisano Październik 27, 2006 Zgłoś Share Napisano Październik 27, 2006 CYTAT(Astonix)CYTAT(KKKas)Próbuj wysyłać lepiej np: [quote] RODZAJPACZKI|dane [/quote]przy odbiorze rozdzielaj odebrane dane i odpowiednio wg typu działaj dalej...Tak robiłem ciągłem wszcystko na sendtekst(rodzjapaczki|dane) ale taka metoda jest zbyt denerwujaca np wysli tekst o 3000 znakach to przyjdzie najpierw dane (rP|cos cos cos cos); a potem (cos2 cos2 cos2);To oznaczaj jeszcze koniec kaczki, np. znakiem #!# i jeśli go nie będzie, to czekaj na kolejny pakiet. Dopiero, gdy przyjdzie pakiet z końcem paczki odpowiednio przetwarzaj wszystko. ҉ Link do komentarza Udostępnij na innych stronach More sharing options...
DarkAndrew Napisano Październik 27, 2006 Zgłoś Share Napisano Październik 27, 2006 chodzi o to że wysyłasz swoją wiadomość w takiej postaci 'MSGCZAT#blabla' gdzie blabla to to co chciałeś wysłać przezss.Socket.Connections[i].SendBuf(dane,sizeof(dane))kod do rozdzielania tego sobie napisz zajmie ci to góra 2minutypotem bierzesz już rozdzielone dane do stringów i po kłopocie robiszwyszystko tak samoOFF TOP [quote] koniec kaczki [/quote] jakaś aluzja polityczna czy zwykłe przjęzyczenie? [/url] "Może wam pomoge, może nie, może pierdolcie w dupę się"-prof. Jarząbek Link do komentarza Udostępnij na innych stronach More sharing options...
Smok Napisano Październik 30, 2006 Zgłoś Share Napisano Październik 30, 2006 Odpowiedzi wszystkie są częściowo poprawne.Problem kolegi polega na tym, że TCP/IP próbuje przechytrzyć warstwę aplikacji i i tak robi po swojemu - dzieli dane na takie pakiety, jakie jemu pasują. A nie programiście. Specyfikacja TCP/IP gwarantuje ci, że dane dotrą poprawne, w całości i na pewno do ciebie. Nie gwarantuje natomiast ilości danych w konkretnym pakiecie.Właściwym rozwiązaniem tego problemu jest użycie Socket.SendBuf(buffer,ilość bajtów);I napisanie protokołu, który bedzie czekał, aż wszystkie dane pojawią się w sockecie, żeby można było je odczytać.Moim patentem (i nie tylko moim, bo wszędzie tego sie używa) jest wysłanie w 4 pierwszych bajtach (LongInt) wielkości konkretnej paczki danych. Potem czekasz aż w buferze pojawi się odpowiednia ilość danych, odczytujesz je i obrabiasz.W ten sposób będzie to np. tak:[LONGINT - Rozmiar: 0040][WORD - TypDanych: 1][Int - Dł Stringu: 34][String - Wiadomość: Cześć, blablabla...]Pakiet ma długość 40 bajtów.Przykład:[delphi][/delphi]W ten sposób masz pewność, że dane zawsze odczytasz poprawnie. Możesz przesyłać dowolną ilość danych i dowolny format. Pozdrawiam[/syntax] Link do komentarza Udostępnij na innych stronach More sharing options...
ktoś Napisano Październik 30, 2006 Zgłoś Share Napisano Październik 30, 2006 jeżeli przesyłąsz pliki a nie tekst, to dobrze byłoby jeszcze zaznaczyć, w którym miejscu należy tą paczkę dopisać do pliku. Niby nic, ale TCP/IP nie gwarantuje, że dane dotrą we właściwej kolejności.edit: to który protokół NIE gwarantuje? UDP/IP? Link do komentarza Udostępnij na innych stronach More sharing options...
Smok Napisano Październik 30, 2006 Zgłoś Share Napisano Październik 30, 2006 Mylisz się. TCP gwarantuje właściwą kolejność docierania pakietów:Transmission Control Protocol (TCP) provides a reliable byte-stream transfer service between two endpoints on an internet. TCP depends on IP to move packets around the network on its behalf. IP is inherently unreliable, so TCP protects against data loss, data corruption, packet reordering and data duplication by adding checksums and sequence numbers to transmitted data and, on the receiving side, sending back packets that acknowledge the receipt of data.Źródło: http://www.itprc.com/tcpipfaq/faq-1.htm#what-tcpip Link do komentarza Udostępnij na innych stronach More sharing options...
Polecane posty
Zarchiwizowany
Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.