انجمن سایت کلیدستان


رتبه موضوع:
  • 1 رای - 5 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
مشکل در اتصال به سرور با اینترنت همراه اول gprs (برنامه نویسی اندروید)

مشکل در اتصال به سرور با اینترنت همراه اول gprs (برنامه نویسی اندروید)

#1
با سلام

من از  HttpURLConnection برای ارتباط با سرور و ارسال دخواست استفاده میکنم .

در صورتی که از اینترنت wifi یا gprs(ایرانسل) استفاده کنم کاملا همه چیز درسته و ارتباط میگیره.
اما در صورت استفاده از gprs(همراه اول)، دچار مشکل میشه و پیغام میده :


کد:
ex: "java.net.ScketException: recvfrom faild: ECONNRESET (Connection reset by peer)

این رو هم بگم که در همون لحظه اینترنت همراه اول به راحتی صفحات اینترنی رو باز میکنه و مشکلی در اتصال به اینترنت نداره.


سرچ کردم و تنظیمات دیگه رو هم تست کردم جواب نداد

کد پی‌اچ‌پی:
               conn.setRequestProperty("http.keepAlive""false"); 


لطفا راهنمایی کنید مشکل کجاست؟؟
پاسخ

مشکل در اتصال به سرور با اینترنت همراه اول gprs (برنامه نویسی اندروید)

#2
سلام


ظاهرا پیغام خطای نوشته شده به چند دلیل میتونه داشته باشه
مهمترین دلیلش عدم Close  شدن HttpURLConnection شما هستش که گفته شده باید حتما قبل از تلاش مجدد برای برقراری ارتباط با سرور حتما کانکشن قبلی close بشه و از کانکشن جدید ساخته شده برای برقراری ارتباط استفاده بشه

کد:
Try to set this property for your HttpURLConnection before connecting:

conn.setRequestProperty("connection", "close");
This will disable "keep-alive" property which is on by default.


کد استفاده شده در قسمت دوم  
کد:
 conn.setRequestProperty("http.keepAlive", "false");

خودش به صورت پبشفزض فعال هستش


یکی دیگه از دلایلی هم که گفته شده بود این هستش که  شما دارید همزمان با دریافت یا ارسال داده به سرور عملیات خوانده و نوشتن در فایل رو هم انجام میدید که میتونه باعث از بین رفتن تنظیمات  HTTP و بروز این خطا بشه که برای برطرف کردنش این تنظیمات رو باید بر روی HttpURLConnection خودتون انجام بدید

کد:
GET Request:

String url = "https://name_of_the_url";
URL request_url = new URL(url);
http_conn = (HttpURLConnection)request_url.openConnection();
http_conn.setFollowRedirects(true);
http_conn.setConnectTimeout(100000);
http_conn.setReadTimeout(100000);
http_conn.setInstanceFollowRedirects(true);

کد:
POST request:

String url = "https://name_of_the_url"
URL request_url = new URL(url);
HttpURLConnection http_conn = (HttpURLConnection) request_url.openConnection();
HttpURLConnection.setFollowRedirects(true);
http_conn.setConnectTimeout(100000);
http_conn.setReadTimeout(100000);
http_conn.setDoOutput(true);
PrintWriter out = new PrintWriter(http_conn.getOutputStream());
if (urlparameter != null) {
  out.println(urlparameter);
}
out.close();
out = null;

امیدوارم مفید واقع بشه
پاسخ
 سپاس شده توسط admin ، msh

مشکل در اتصال به سرور با اینترنت همراه اول gprs (برنامه نویسی اندروید)

#3
ممنون از شما بخاطر راهنمایی.


وقتی برنامه رو نصب میکنم این اولین ارتباط با connection هست و قبلش ارتباطی نبوده که close بشه. منظورم از این جمله :
نقل قول: این رو هم بگم که در همون لحظه اینترنت همراه اول به راحتی صفحات اینترنی رو باز میکنه و مشکلی در اتصال به اینترنت نداره.

این بود که اینترنت از سرعت مناسب برخوردار هست و مشکلی از سمت اپراتور نداره.



در هرصورت کدها رو به فرمی که گفتید، تغییر دادم (از نوع GET( اما پیام خطا همچنان باقیست. ( ببینید درسته؟)

کد پی‌اچ‌پی:
URL url = new URL(link);
 
               HttpURLConnection conn = (HttpURLConnectionurl.openConnection();
 
               conn.setRequestProperty("accept-charset""UTF-8");
 
               conn.setRequestProperty("connection""close");
 
               conn.setFollowRedirects(true);
 
               conn.setConnectTimeout(100000);
 
               conn.setReadTimeout(100000);
 
               conn.setInstanceFollowRedirects(true);
 
               //conn.setRequestProperty("http.keepAlive", "false");
 
               conn.connect(); 


اگر واقعا مشکل این هست، چطور میشه که با اینترنت وای فای و ایرانسل براحتی ارتباط حاصل میشه؟؟
پاسخ

مشکل در اتصال به سرور با اینترنت همراه اول gprs (برنامه نویسی اندروید)

#4
خوب اگه اینها رو نوشتید و هنوزم مشکل دارید
یک عامل بیشتر باقی نمیمونه ( تا اونجایی که من میدونم و اطلاع دارم )

نکته :  این خطا مربوط میشه به عدم پاسخگویی از سمت سرور و بستن کانکشن از سمت سرور
کد:
ECONNRESET (Connection reset by peer)
 
وجود یه برنامه یا چیزی که باعث جلوگیری از دریافت صحیح اطلاعات به سرور میشه
حالا ممکنه فایروالی چیزی باشه یا ممکنه سرور با IP  شما مشکل داشته باشه (IP ای که از سمت همراه اول دریافت می کنید) و اجازه برقراری ارتباط رو نده
این سه کد رو هم تست کنید به صورت جداگانه
کد:
conn.setChunkedStreamingMode(0)

کد:
conn.setChunkedStreamingMode(1024*1024)

کد:
urlConnection.setRequestProperty("Transfer-Encoding","chunked");

انشالله که جواب بده چون برای خیلی ها جواب داده و مشکل حل شده
اگه همچنان مشکل داشتید باید برنامه رو به صورت ریزتر و Debug کنید
یکی از راه ها استفاده زا برنامه Postman هستش که میتونید HTTP رو در سمت سرور چک کنید که آیا چیزی براش ارسال شده یا نه و اگه ارسال شده چی هستشو ..... کلی اطلاعات دیگه
پاسخ
 سپاس شده توسط msh ، admin

مشکل در اتصال به سرور با اینترنت همراه اول gprs (برنامه نویسی اندروید)

#5
نقل قول:
کد:
urlConnection.setRequestHeader("Transfer-Encoding","chunked");


منظورتون از urlConnection  همون conn ساخته شده است؟
اگر هست که یک چنین صفتی رو شناسایی نمیکنه
اگر نیست هم بفرمایید
پاسخ

مشکل در اتصال به سرور با اینترنت همراه اول gprs (برنامه نویسی اندروید)

#6
(۱۳۹۴/۱۰/۲۶, ۰۹:۱۲ ب.ظ)msh نوشته:
نقل قول:
کد:
urlConnection.setRequestHeader("Transfer-Encoding","chunked");


منظورتون از urlConnection  همون conn ساخته شده است؟
اگر هست که یک چنین صفتی رو شناسایی نمیکنه
اگر نیست هم بفرمایید

بله . ببخشید این متد برای HttpClient هستش و برای HttpUrlConnection  به صورت متد setRequestProperty و addRequestProperty  هستش

کد:
urlConnection.setRequestProperty("Transfer-Encoding","chunked");
یا
urlConnection.addRequestProperty("Transfer-Encoding","chunked");
پاسخ
 سپاس شده توسط msh ، admin

مشکل در اتصال به سرور با اینترنت همراه اول gprs (برنامه نویسی اندروید)

#7
ممنون از پاسخگویی سریع شما.
متاسفانه باز هم جواب نداد

اما

با debug های متعدد متوجه موضوعی شدم:

اینکه در حالت استفاده از اینترنت همراه اول conn یک پروکسی میگیره. در حالیکه wifii و irancell اینطور نیستن.

این هم تصاویر:

   

     


   



حالا چطور میتونم پروکسی را  به فرم Direct@ مانند حالت wifi و irancell  تغییر بدم؟؟؟
پاسخ

مشکل در اتصال به سرور با اینترنت همراه اول gprs (برنامه نویسی اندروید)

#8
خوب خدا را شکر که مشکل پیدا شد
همون عدم دریافت داده توسط سرور و بستن کانکشن توسط بودش

بیاید اول یه چیزی رو چک کنید
احتمال میدم این پروکسی از سمت خودتون باشه ( گوشی شما و تنظیمات مربوط به اینترنت همراه اول)

ابتدا برید توی تنظیمات گوشی -> بخش داده موبایل ( همون تنظیمات داده) تنظیمات مربوط به همراه اول رو باز کنید
دو گزینه Proxy  و Port  رو پیدا و اگه چیزی داخلشون هست خالیش کنید
اگه چیcی نبود یعنی اینکه این پروکسی از سمت خود همراه اول اعمال میشه و احتمالا با دستورات زیر میتونید هنگام ارسال داده اون رو غیر فعال کنید


کد:
فعال کردن Proxy

System.setProperty("http.proxySet", "true");
System.setProperty("http.proxyHost", myHost);
System.setProperty("http.proxyPort", "8080");
System.setProperty("http.proxyUser", myUser);
System.setProperty("http.proxyPassword", myPassword);
System.setProperty("http.nonProxyHosts", "localhost|127.0.0.1");



با این دستور غیر فعال میشه 
حالا درست نمیدونم کدومش هستش اول یا دومی 
احتمال میدم اولی درست تر باشه

کد:
System.setProperty("http.proxySet", "false");
System.setProperty("proxySet", "false");
پاسخ
 سپاس شده توسط admin ، msh

مشکل در اتصال به سرور با اینترنت همراه اول gprs (برنامه نویسی اندروید)

#9
(۱۳۹۴/۱۰/۲۶, ۱۰:۴۱ ب.ظ)mahdi10539 نوشته: خوب خدا را شکر که مشکل پیدا شد
همون عدم دریافت داده توسط سرور و بستن کانکشن توسط بودش

بیاید اول یه چیزی رو چک کنید
احتمال میدم این پروکسی از سمت خودتون باشه ( گوشی شما و تنظیمات مربوط به اینترنت همراه اول)

ابتدا برید توی تنظیمات گوشی -> بخش داده موبایل ( همون تنظیمات داده) تنظیمات مربوط به همراه اول رو باز کنید
دو گزینه Proxy  و Port  رو پیدا و اگه چیزی داخلشون هست خالیش کنید
اگه چیcی نبود یعنی اینکه این پروکسی از سمت خود همراه اول اعمال میشه و احتمالا با دستورات زیر میتونید هنگام ارسال داده اون رو غیر فعال کنید


کد:
فعال کردن Proxy

System.setProperty("http.proxySet", "true");
System.setProperty("http.proxyHost", myHost);
System.setProperty("http.proxyPort", "8080");
System.setProperty("http.proxyUser", myUser);
System.setProperty("http.proxyPassword", myPassword);
System.setProperty("http.nonProxyHosts", "localhost|127.0.0.1");



با این دستور غیر فعال میشه 
حالا درست نمیدونم کدومش هستش اول یا دومی 
احتمال میدم اولی درست تر باشه

کد:
System.setProperty("http.proxySet", "false");
System.setProperty("proxySet", "false");

 از شما بخاطر راهنمایی هاتون بسیار متشکرم.

اپراتور همراه اول پروکسی خاصی نداره چراکهوقتی سیم کارت MCI و در گوشیه دیگری تست کردم و به درستی به سرور متصل شد.

پس تنها میتونست مشکل از خود گوشی باشه(در بخش تنظیمات دیتا و یا بخش های دیگه گزینه proxy و port را نیافتم)،

پس اینبار گوشی و با سیم کارت Irancell چک کردم ، و باز به درستی کار کرد!


درسته که هیچ منطقی پشتش نیست اما (اون گوشی + سیم کارت MCI ) فقط مشکل در اتصال داره!

ولی متوجه شدم که لزوما مشکلی برای اپراتور ها در اتصال به سرور ووجود نداره.

باز هم ممنون
پاسخ
 سپاس شده توسط mahdi10539 ، admin ، شماره مجازی امارات


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان