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 | 31 |
Tags
- 빅데이터
- sending 404
- ubuntu18.04
- 소켓통신
- 자바
- 딥러닝
- DataBinding Error
- 백준
- IT연합동아리
- resample2d_cuda
- clean architecture
- utuntu
- nvcc
- 이것만보면돼
- Android
- 코틀린
- 안드로이드
- NEXTERS
- 빅데이터청년캠퍼스
- flownet
- 알고리즘
- 인공지능
- cuda-10.2
- 빅데이터청년인재
- kotiln
- 머신러닝
- 청년인재
- ubuntu
- 넥스터즈
- 데이터청년캠퍼스
Archives
- Today
- Total
보초의 코딩일기장
코틀린을 이용한 사진 관리 어플 만들기 (2) 본문
private var mPartialAp=arrayOfNulls<String>(3)
....
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_logo)
mIpAddress?:setIp()
ProcessTask(1,50).start()
ProcessTask(50,100).start()
ProcessTask(100,150).start()
ProcessTask(150,200).start()
ProcessTask(200,256).start()
.....
}
크기가 3인 mPartialAP 배열을 생성한다. 이제 setIp()라는 메소드를 통해 아이피 주소를 가져올 것이다.
ProcessTask는 곧 나올 쓰레드로 주소를 탐색하는 과정이다.
private fun setIp(){
val wm = applicationContext.getSystemService(Context.WIFI_SERVICE) as WifiManager
val wifiInfo = wm?.connectionInfo
val ip = wifiInfo.ipAddress
mIpAddress = android.text.format.Formatter.formatIpAddress(ip)
val st=StringTokenizer(mIpAddress,".")
for(i in mPartialAp.indices){
mPartialAp[i] = st.nextToken()
}
Log.d(Constants.TAG, mIpAddress) //phone ip
Log.d(Constants.TAG,mPartialAp[0]+"."+mPartialAp[1]+"."+mPartialAp[2]) //ap ip
}
setIP()내부를 보면 우선 Wifi를 통해 IP Address를 가져온다.
mIpAddress에는 IP Address를 String 형식으로 들어가게 된다.
st를 선언하고 for 문까지는 String Tokenizer를 통해 구분자(.)로 슬라이싱하여 배열에 하나씩 담는 과정이다.
그렇게 담은 배열은 로그로 보여지게 된다. (mIPAddress)
그리고 우리는 C class 아이피 주소를 생성할 것이므로 0,1,2 번째 배열에 무엇이 들어갔는지 알 필요가 있다.
private inner class ProcessTask(var start:Int, var end:Int ) : Thread(){
override fun run() {
var serverSocket:ServerSocket?=null
try{
var hostname: String? = null
var connectSock: Socket?=null
var serverDos: DataOutputStream?=null
var receiveSocket:Socket?=null
var socketAddress:SocketAddress
for(i in start until end){ //검색할 아이피의 범위를 파악하기 위함.
if(mSharedData.isConnected){
break
}
try{
hostname=mPartialAp[0]+"."+mPartialAp[1]+"."+mPartialAp[2]+"."+i //C클래스 대역 아이피 주소 생성
socketAddress = InetSocketAddress(hostname,Constants.CONNECT_PORT)
ProcessTask()는 쓰레드를 만들어 주어 한번에 주소범위를 나눠서 탐색하는 역할을 수행한다.
hostname 에서는 mPartialAp[0],mPartialAp[1],mPartialAp[2] + start~end 범위의 C 클래스대역 아이피 주소를 생성한다.
ProcessTask(1,50).start() //메인 스레드가 아닌 별도의 스레드서 실행해야되므로 스레드를 상속받은 ProcessTask를 생성한다.
ProcessTask(50,100).start() //1~255의 주소 범위를 한번이 아닌 다섯개의 스레드로 나눠서 탐색한다.
ProcessTask(100,150).start()
ProcessTask(150,200).start()
ProcessTask(200,256).start()
이렇게 1~255까지의 연결을 시도해 응답이 있는지 확인하는 것이다.
응답이 있다면 해당 IP가 서버의 IP임을 알 수 있으므로 그 후에 사진 전송 준비를 시작하는 것이다.
'Android > Kotlin' 카테고리의 다른 글
코틀린을 이용한 사진 관리 어플 만들기 (3) (4) | 2020.01.07 |
---|---|
코틀린을 이용한 사진 관리 어플 만들기 (1) (2) | 2020.01.07 |
코틀린 이것만 보면 돼 : 3일차 (0) | 2020.01.07 |
코틀린 이것만 보면 돼 : 2일차 (0) | 2020.01.07 |
코틀린 이것만 보면 돼 : 1일차 (0) | 2020.01.07 |
Comments