Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 쿼리문
- 데이터 이해
- kotlin checkbox error
- retrofit
- watchman error
- h2 error
- MySQL
- 선택정렬
- kotlin recyclerview checkbox error
- ADsP
- 자료구조
- sockettimeout
- Kotlin
- GitHub
- expo-cli error
- watchmanresponse
Archives
- Today
- Total
Stand up lee
[kotlin] error : 서버통신시 fail to connect to / java.net.SocketTimeoutException 본문
개발일기
[kotlin] error : 서버통신시 fail to connect to / java.net.SocketTimeoutException
tubeeee 2022. 2. 3. 20:14kotlin으로 앱 내 회원가입을 위한 sms 인증을 개발하고자 했다.
이를 위한 http 통신 테스트가 필요하여 GET, POST 요청을 진행하려고 했다.
필요한 코드는 다 작성했지만,
계속 이런 에러 메시지가 떴다.
두가지 에러 종류가 있었다.
1. 요청한 url이 https 가 아닌 http 이기 때문에 보안 문제로 제대로 작동하지 않음.
2. 요청을 시작한 후, retrofit의 제한 시간 내에 서버에 연결되지 않으면 해당 요청을 실패한 것으로 계산함.
해결방안
1. manifest 수정
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="***">
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!-- Location -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:usesCleartextTraffic="true">
***
위과 같이 manifest 안에 application 안에 android:usesCleartextTraffic="true" 를 추가한다.
(http를 허가해주는 설정이라고 한다)
여기에 더해서 에뮬레이터나 핸드폰 연결해서 디버깅 하는 경우에 앱을 삭제한 후, 다시 설치한다 (이거때문에 삽질했음..;;)
2. 서버와의 연결 제한 시간의 default 값이 10초로 설정되어 있다. okHttpClient 객체 시간을 늘린다.
val okHttpClient = OkHttpClient.Builder()
.connectTimeout(150, TimeUnit.SECONDS)
.readTimeout(100, TimeUnit.SECONDS)
.writeTimeout(100, TimeUnit.SECONDS)
.build()
다음과 같이 connectTimeout 시간을 늘려준다.
• connectTimeout : 요청을 시작한 후 서버와의 연결이 완료되기까지의 시간
• readTimeout : 연결이 설정되면 서버로부터 모든 바이트가 전송되는 속도
• writeTimeout : 서버에 바이트를 전송하는 속도
Retrofit.Builder()
.baseUrl(BASE_URL)
.client(okHttpClient)
.addConverterFactory(GsonConverterFactory.create(gson))
.build()
.create(API::class.java)
이것을 retrofit builder에 적용할 수 있음.
sms 받기에 성공함!!
'개발일기' 카테고리의 다른 글
[Spring] error : H2 설치 오류 (0) | 2022.04.18 |
---|---|
[Kotlin] error : Recyclerview 스크롤시 Checkbox checked 에러 (0) | 2022.03.30 |
[Kotlin] 회원가입 유효성 검사 _ 정규표현식 사용 (0) | 2022.01.28 |
[Server] 세션, 쿠키, 토큰 정리 (0) | 2022.01.26 |
[Kotlin] Recyclerview의 Adapter에서 Fragment로 데이터 전달 (0) | 2021.09.22 |