ورود

View Full Version : چطور بفهمیم اینپوت بافر پر است و داده ارسالی در چند قسمت فرستاده شده .



MEhdi Sobhani
شنبه 11 دی 1389, 23:15 عصر
با عرض سلام و خسته نباشید .
با استفاده از ایندی idtcpclient ، یه مقداری رو دریافت میکن و یه سری بررسی روش انجام میدم با این دستور :



TheString:=IdTCPClient1.Socket.InputBufferAsString (tencoding.UTF8);


مشکلی که وجود داره اینه که وقتی حجم داده ها بیشتر از 32768 میشه ، بافر به طور خودکار در چند قسمت فرستاده میشه .
کد رمز من هم اول داده ها هست ،
حالا سوالم اینه که چطور میشه فهمید بافری که اطلاعاتش رو گرفتیم ، اولین بافر هست یا بافری هست که چند قسمت شده ؟
پ ن : ممکنه در قسمتهای بعدی به طور اتفاقی کدی مابه کد رمز من اول داده ها باشه .
با تشکر فراوان .

Felony
یک شنبه 12 دی 1389, 06:43 صبح
ممکنه در قسمتهای بعدی به طور اتفاقی کدی مابه کد رمز من اول داده ها باشه .
وقتی رمزتون رو ارسال میکنید با کارکتر خاصی علامتگذاریش کنید ، و اون طرف بررسیش کنید یا اینکه اگر فکر میکنید تو این حالت هم مشکل پیش میاد قبل از ارسال بررسی کنید اگر حجم داده ارسالی بیشتر از 32768 بود خودتون داده رو قسمت بندی کنید و برای هر کدوم یک شماره یا ... در نظر بگیرید و بعد بفرستیدشون ، اون طرف میتونید از روی این شماره تشخیص بدیدش .

راه دیگه این هست که اطلاعات پکت های دریافتی در سمت کلاینت رو بررسی کنید که نیاز به نوشتن یک Packet Sniffer دارید که تو همین بخش نمونه هایی میتونید پیدا کنید .

@ شاید هم راه بهتری باشه ولی من اطلاع ندارم .

MEhdi Sobhani
دوشنبه 13 دی 1389, 21:47 عصر
سلام
ممنون از این روش استفاده کرد و مشکل حل شد :
و اطلاعات رو به صورت استریم فرستادم .



TheTidtcpclient.Socket.Write(TheStream.Size);
TheTidtcpclient.Socket.WriteBufferOpen;
TheTidtcpclient.Socket.Write(TheStream);
TheTidtcpclient.Socket.WriteBufferClose;