336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

firebase 연동시 Firebase에 구글 계정 권한을 추가하여야 한다.


개헤맸네.

Posted by 당양부부34
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

안드로이드 Multidex


안드로이드는 하나의 앱이 가지거나 참조할 수 있는 총 메쏘드의 갯수가 65536개로 제한되어 있다.


이는 하나의 Dalvik Executable (dex) 파일이 참조하여 호출할 수 있는 최대 갯수이다.


혼자 뚝딱뚝딱 만들어보는 프로젝트라면 사실 별 상관이 없겠지만, android support library 나, 여러 오픈소스 library 를 추가하여 빌드할 경우, 이 갯수는 안전한 갯수가 아니고, 빌드 시 아래와 같은 에러가 발생할 수 있다.


UNEXPECTED TOP-LEVEL EXCEPTION:


com.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536




구글에서는 이 문제를 해결하기 위해 세가지 방안을 제시하고 있다.


1. 경량의 라이브러리를 사용하거나 리팩토링을 잘 해서 메쏘드의 수를 줄일 것


2. Proguard 기능을 사용하여 사용하지 않는 코드를 없앨 것


3. Multidex 기능을 사용할 것




여기서는 Multidex 기능을 사용해서 문제를 회피하는 방법을 사용할 것이다.


Multidex 는 여러개의 dex 파일을 사용하도록 해서, 65536 개 이상의 메쏘드를 참조할 수 있도록 해준다.


gradle 파일에 아래와 같이 추가해주면 된다.


android {

    defaultConfig {

        ...

 

        // Enabling multidex support.

        multiDexEnabled true

    }

    ...

}


ART가 반영된 5.0 버전 (SDK Version 21) 이상에서는 위와 같이 사용하면 된다. 하지만 그 이전 버전이라면? 예를 들어 minSdkVersion 이 21 보다 작다면 구글에서 제공하는 multidex support library 를 사용해야 한다.


android {

    compileSdkVersion 21

    buildToolsVersion "21.1.0"

 

    defaultConfig {

        ...

        minSdkVersion 14

        targetSdkVersion 21

        ...

 

        // Enabling multidex support.

        multiDexEnabled true

    }

    ...

}

 

dependencies {

  compile 'com.android.support:multidex:1.0.0'

}


또, application 을 android.support.multidex.MultiDexApplication 을 상속받도록 구현한다.


Manifest 파일을 아래와 같이 고치거나,


<!--?xml version="1.0" encoding="utf-8"?-->


<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.android.multidex.myapplication">


    <application ...="" android:name="android.support.multidex.MultiDexApplication">


        ...


    </application>


</manifest>


Application 파일을 아래와 같이 수정한다.


public class MyApplication extends android.support.multidex.MultiDexApplicatoin {

// ...

}


Multidex Support Library 를 사용할 경우, 부작용이 하나 있는데, 빌드 속도가 상당히 느려진다. 짧게는 몇십초부터 길게는 수 분에 이르기까지 시간이 지연된다.


안드로이드 5.0 이상아리면 큰 문제가 없지만, 그 이전 버전을 지원하는 앱이라면 이는 속터지는 문제일 수 있다.


하지만 이는 별다른 수는 없는 것 같고, 그저 테스트시는 minSdk 를 21 이상, 릴리즈 시는 그 이전 버전으로 설정하는 수 밖에 없다. 


이는 Gradle 스크립트로 처리할 수 있지만, 확인해야 하는 단말의 OS 가 5.0 이전 버전이라면 확인하기 위해 오래 기다리는 수 밖에 없다.



출처: http://bbulog.tistory.com/41 [뿔로그]


Posted by 당양부부34
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

Eclipse Ant 실행시 Specified VM install not found: type Standard VM, name jre 에러 발생시


"[Workspace]/.metadata/.plugins/org.eclipse.debug.core/.launches/[Project이름].build.xml.launch file” 파일 삭제 후 재배포.



'IT' 카테고리의 다른 글

robots.txt 저장 방법  (0) 2018.01.22
개발자 Class 를 만들어봤네요..  (0) 2017.12.15
IT업계 수익모델 총정리  (0) 2017.01.24
301 redirect, 302 redirect.  (0) 2017.01.24
소켓(Socket) 설명. 이해.  (0) 2017.01.18
Posted by 당양부부34
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

안드로이드 생명 주기, 라이프 사이클 입니다.




1. 최초 실행시

  - onApplyThemeResource

  - onCreate

  - onStart

  - onPostCreate

  - onTitleChanged

  - onResume

  - onPostResume

  - finalize


# 액티비티 이동시(Intent 등)

  - onUserLeaveHint

  - onSaveInstanceState

  - onPause

  - onStop


3. 백키 클릭시

  - onActivityResult

  - onRestart

  - onStart

  - onResume

  - onPostResume


4. 종료시

  - onPause

  - onStop

  - onDestroy



Tip> Override 함수 별 추천 기능.

  - onResume : 데이터 호출 및 Binding.

  - onSaveInstanceState : 상태 변화 일시 저장(Preference).

  - onRestoreInstanceState : 상태 변화 저장값 호출(Preference).

  - onPause : 데이타 저장.

  - onStop : 스레드 종료 및 DB 연결 종료 및 메모리 해제.


감사합니다.

Posted by 당양부부34

2017. 1. 31. 10:30 IT/MySQL

Mysql db_helper

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

<?php

    // DATABASE 접속객체

    $_DB = false;


    /**

     * 데이터베이스에 접속한다.

     */

    function db_open()

    {

        // 함수 밖에서 정의된 변수에 접근할 수 있도록 설정.

        global $_DB;


        /* 데이터베이스에 접속하기 위한 정보 정의하기 */

        $db_hostname = 'localhost';

        $db_database = 'testdb';

        $db_username = 'root';

        $db_password = 'root';

        $db_portnumber = 3306;

        $db_charset = 'utf8';


        /* 데이터베이스 접속 처리 */

        if ($_DB === false) {

            $_DB = @mysqli_connect($db_hostname, $db_username, $db_password,

                $db_database, $db_portnumber);


            // 에러가 존재한다면?

            if (mysqli_connect_errno()) {

                // 에러메시지 출력하기

                printf("<div style='padding: 15px; margin: 10px;

                            border: 1px solid #dca7a7; border-radius: 4px;

                            color: #a94442; background-color: #f2dede;'>

                        <strong>[Error: %d]</strong> %s</div>",

                        mysqli_connect_errno(), mysqli_connect_error());

                // 웹 페이지 실행중단

                exit();

            } else {

                // 케릭터셋 설정하기

                @mysqli_set_charset($_DB, $db_charset);

            }

        }

    }


    /**

     * 데이터베이스 접속을 해제한다.

     */

    function db_close()

    {

        global $_DB;


        if ($_DB !== false) {

            /* 접속 해제 */

            @mysqli_close($_DB);

        }

    }


    /**

     * SQL구문을 실행한 후 결과를 리턴한다.

     *

     * @param   $sql    - SQL구문의 템플릿. 변수로 치환할 곳은 %s, %d등의 이스케이프 문자를 사용한다.

     * @param   $params - $sql변수 내의 이스케이프 문자를 치환하기 위한 배열.

     *

     * @return 1) SQL구문에 에러가 있는 경우 FALSE가 리턴된다.

     *            2) SELECT문을 실행한 경우 -> 조회결과가 배열로 변환되어 리턴된다.

     *            3) INSERT문을 실행한 경우 -> 자동증가 일련번호값이 리턴된다.

     *            4) UPDATE,DELETE 문을 실행한 경우 -> 영향을 받은 행의 수가 리턴된다.

     */

    function db_query($sql, $params)

    {

        global $_DB;


        // 파라미터가 배열로 전달된 경우 배열의 각 요소에 SQL 특수문자 처리

        if (is_array($params)) {

            for ($i = 0; $i < count($params); ++$i) {

                $params[$i] = mysqli_real_escape_string($_DB, $params[$i]);

            }

            $sql = vsprintf($sql, $params);

        }


        // 쿼리 실행

        $result = @mysqli_query($_DB, $sql);


        // 에러 체크

        if (mysqli_errno($_DB)) {

            printf("<div style='padding: 15px; margin: 10px;

                        border: 1px solid #dca7a7; border-radius: 4px;

                        color: #a94442; background-color: #f2dede;'>

                    <strong>[SQL Error: %d]</strong> %s

                    <blockquote style='padding: 0 0 0 5px; margin: 10px 0 0 5px;

                        border-left: 3px solid #dca7a7'>

                        <i><small>%s</small></i></blockquote></div>",

                    mysqli_errno($_DB), mysqli_error($_DB), $sql);


            return false;

        }


        // SQL 구문 종류 분석

        $query_type = substr(strtolower(trim($sql)), 0, 6);


        // 구분 종류에 따라서 처리결과를 생성한다.

        $value = false;


        switch ($query_type) {

            case 'insert':

                // 자동증가 일련번호 값 리턴하기

                $value = mysqli_insert_id($_DB);

                break;

            case 'delete':

            case 'update':

                // 영향을 받은 행의 수 리턴하기

                $value = mysqli_affected_rows($_DB);

                break;

            case 'select':

                // 조회결과를 배열로 변환하여 리턴

                // MYSQLI_ASSOC, MYSQLI_NUM, MYSQLI_BOTH

                $value = mysqli_fetch_all($result, MYSQLI_ASSOC);

                break;

        }


        // 처리결과 리턴

        return $value;

    }

?>

Posted by 당양부부34

2017. 1. 24. 09:55 IT

IT업계 수익모델 총정리

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

그 동안의 경험을 바탕으로 IT업계의 수익모델을 간단하게 정리해봤습니다.

신규사업을 기획하거나 현재 운영중인 서비스의 새로운 수익모델(BM)을 찾을 때 참고하시기 바랍니다. 




B2C


광고 

트래픽을 기반으로 광고주와 사용자를 연결하는 형태

 디스플레이 광고

 노출 당 과금 

 네이버

 키워드 광고

 클릭 당 과금 

 네이버 

 동영상 광고

 노출 당 과금

 판도라TV 

 채용 광고

 위치 당 과금

 잡코리아 


상품 판매 

상품 제작자 or 도소매 업자들이 자사 서비스를 통해 상품을 직접 판매하는 형태

 종합 몰

 상품 판매수익

 GS SHOP

 소셜커머스

 상품 판매수익

 쿠팡, 티몬, 위메프

 도서

 도서 판매수익

 YES24

 의류

 의류 판매수익

 멋남

 여행

 여행상품 판매수익

 하나투어

 교육

 교육콘텐츠 판매수익

 메가스터디 

 차량

 렌터카 판매수익

 금호렌터카 

 이미지

 이미지 판매수익

 아사달 


중개 수수료 (플랫폼) 
구매자와 판매자를 한 곳에서 거래할 수 있도록 지원하는 형태

 상품 중개 (오픈마켓)

 판매액의 6~12% 

 11번가

 상품 중개 (소셜커머스)

 판매액의 8~25%

 티켓몬스터

 지불 중개 (PG사)

 거래액의 2~4%

 이니시스

 여행상품 중개

 판매수수료

 인터파크투어

 호텔 중개

 판매액의 7~20%

 호텔엔조이 

 펜션 중개 

 판매액의 10~18%

 민박넷

 레포트 중개

 판매수수료

 해피캠퍼스 

 유료 앱 중개

 판매액의 30% 

 앱스토어 


라이선스 
사용자들이 서비스를 이용한 양, 빈도, 시간 등에 따라 요금을 지불하는 형태

 음악 라이선스

 월정액, MP3 다운로드 

 멜론

 게임 라이선스

 월정액

 월드오브워크래프트 

 서버임대 라이선스

 월정액, 서버구매 

 카페24 

 웹호스팅 라이선스

 월정액

 카페24

 그룹웨어 라이선스

 월정액

 팀오피스

 회원 라이선스

 유료회원 

 랭키닷컴

 프로그램 라이선스

 구매

 포토샵


사이버머니 
실제화폐는 아니지만 사이버 공간에서 사용할 수 있는 돈을 구매하는 형태

 별풍선

 별풍선10개 1,000원

 아프리카TV 

 도토리

 도토리1개 100원

 싸이월드 

 파일 다운로드

 캐시10,000개 10,000원

 파일노리 



B2B


광고 플랫폼 
광고주를 직접 모집하고 제휴사를 통해 광고를 배포하는 형태

 디스플레이/키워드 광고

 제휴사 광고매출의 10~20%

 구글 애드센스

 모바일 광고

 제휴사 광고매출의 10~20%

 애드몹 

 모바일 광고 (자체 서비스)

 회원과 수익쉐어

 애드라떼


콘텐츠 제공 
저작권이 해결 된 콘텐츠를 기업에게 제공하는 형태

 뉴스

 콘텐츠 제공비

 아시아경제

 방송 콘텐츠

 콘텐츠 제공비

 iMBC

 여행 콘텐츠

 콘텐츠 제공비

 하나투어

 지도 API

 정해진 트래픽을 초과하면 과금 

 구글


정보 중개 (데이터 판매) 
서비스 이용패턴, 구매습관 등의 정보를 수집하여 이를 가공하여 판매하는 형태

 인터넷 순위

 유료회원 가입비

 랭키닷컴

 트렌드분석

 리서치, 컨설팅 의뢰비

 코리안클릭

 설문조사

 설문조사비 

 서베이몽키


마케팅 지원 
고객의 목표 달성을 위해 마케팅을 대행하는 형태

 광고대행

 광고대행비

 NBP (NHN Business Platform)

 블로그 운영

 블로그 운영대행비

 클렉스

 이메일 광고

 타겟맞춤 메일발송비

 썬더메일



솔루션 판매 
시장에서 요구하는 솔루션을 기본형태로 구축하고, 고객의 니즈에 맞게 커스터마이징 하는 형태

 쇼핑몰

 설치비, 호스팅비, 커스터마이징비

 카페24

 소셜커머스 솔루션

 설치비, 호스팅비, 커스터마이징비

 원데이넷 

 로그분석

 설치비, 월 사용료

 에이스카운터

 대량메일 솔루션

 설치비, 월 사용료

 레몬메일

 문자발송 솔루션

 설치비, 사용량에 따라 과금

 엠포 

 실명인증 솔루션

 기본료, 사용량에 따라 과금

 아이디체크

 

납품 
고객의 요구에 맞춰 웹서비스를 제작하는 형태

 B2C 성격의 웹&모바일 서비스 제작

 상호 계약에 의해 결정

 웹에이전시 

 B2B 성격의 웹&모바일 서비스 제작 

 상호 계약에 의해 결정

 SI 

 


아웃스탠딩 자료 (바로가기)

비즈니스 모델

대표유형

예시

유료화/부분유료화

 일회성 결제

 소프트웨어 라이선스, 상품 판매, SI 용역

 정기구독

 온라인 게임, 온라인뉴스, 스트리밍 서비스, 호스팅 임대, 큐레이션 커머스, Saas

 핵심자원 부분유료화

 온라인 게임

 콘텐츠 활용범위 부분유료화

 온라인게임, 웹툰

 플레이시간 부분유료화

 온라인게임, 음원

 기부모델

 개인방송, 크라우드 펀딩

광고

 검색광고

 파워링크, 프리미엄 링크

 디스플레이 광고

 네이버 메인광고, 구글 애드센스

 이메일광고

 프로모션 광고

 리워드광고

 캐시슬라이드, 애드라떼

 피드형 광고

 페이스북, 트위터, 카카오스토리

 콘텐츠형 광고

 버즈피드, 피키캐스트

 동영상광고

 유튜브, 판도라TV

중개

 이커머스&O2O 중개

 옥션, 지마켓, 티켓몬스터, 쿠팡, 11번가, 배달의민족, 요기요

 콘텐츠 및 서비스 중개

 앱스토어, 구글플레이, 우버, 그랩택시


출처 : http://yslab.kr/35

Posted by 당양부부34

2017. 1. 24. 09:36 IT

301 redirect, 302 redirect.

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

금일은 리다이렉트 방법에 대해 알아봅니다.


301 redirect는 영구적으로 옮겼을때,

302 redirect는 일시적으로 옮겼을때 사용합니다.


검색엔진 최적화에는 301 redirect 추천합니다.


사이트를 새로운 도메인으로 옮겼다던가 페이지의 주소가 바뀌었을때 사용자들을 자동으로 바뀐 주소로 옮겨가게 만드는데는 두가지 방법이 있습니다.

301 permanent redirect와 302 temporary redirect 입니다.


301과 302는 사용자가 브라우저를 통해 웹서버에 요청했을때 돌려받는 웹서버의 상태코드입니다.

301은 요청한 정보가 새로운 주소로 영구적으로 옮겨갔다는것을 말해주며 302는 일시적으로 옮겨갔다는것을 말해줍니다.

표면상으로는 둘다 자동으로 사용자를 옮겨가게 만드니 사람의 육안으로는 구별할수 없으나 검색엔진 크롤러는 그 차이를 알수 있고, 이 두가지가 검색엔진 최적화에 미치는 영향은 꽤 큽니다.


301 permanent redirect

이것은 말그대로 요청한 정보(사이트나 페이지)가 영구적으로 옮겼다는것을 말해줍니다.

예를 들어 aaa.com을 소유했던 사람이 bbb.com으로 사이트 주소를 옮겼을때 301 redirect를 해준다면 크롤러가 aaa.com에 접속했을때 aaa.com에서 인덱스한 내용의 주소가 bbb.com으로 바뀌었다는것을 감지하고 인덱스된 aaa.com의 주소를 자동으로 bbb.com으로 변경시켜 줍니다.

이럴경우 ‘aaa’라는 키워드로 aaa.com이 검색결과에 나오던것이 bbb.com으로 나오게 되는 것입니다.

이렇게 되면 사이트 관리자는 손쉽게 검색엔진에 변경된 사항을 적용할수 있게되고 검색엔진을 통해 유입되는 트래픽을 잃지 않게 됩니다.

그외에 www.aaa.com을 ‘www’가 빠진 aaa.com으로 지정하고 싶다던지 www.aaa.com/product.html?a=samsung&b=galaxy&c=tab 같은 url을 www.aaa.com/samsung/galaxy/tab 같이 읽기 쉬운 형식으로 바꾸고 싶을때 유용하게 쓰입니다.


302 temporary redirect

302 redirect는 현재 페이지나 사이트를 일시적으로만 옮겼다는것을 말해줍니다.

대부분 javascript를 이용한 redirect, 메타태그(< meta http-equiv="refresh" content="0;url=http://새로운주소.com" />)를 이용한 redirect 또는 각각의 프로그래밍 언어를 사용한 단순 redirect가 이에 포함됩니다.

aaa.com 소유자가 bbb.com으로 사이트를 옮겼는데 잘모르고 302 redirect를 해주게 되는경우 사용자는 자동으로 옮겨가게 되지만, 크롤러는 사이트가 옮겨갔다는것을 감지하더라도 일시적으로만 옮겨간것으로 간주하기 때문에 검색결과에 아무런 변화를 주지 않게 됩니다.

그래서 특정 키워드로 검색을 했을때 aaa.com이 나오던것이 bbb.com으로 업데이트되지 않게 됩니다.

간혹 이것을 악용하여 특정 키워드로 최적화된 페이지를 방문한 사용자를 자동으로 페이지와 전혀 상관없는 광고성 페이지로 옮겨가게 만드는 경우도 있습니다.

구글은 이를 doorway page로 여겨 페널티를 부과하기때문에 302 redirect를 사용할때에는 잘 생각해보시고 사용하시기 바랍니다.

대부분의 경우 302 보다 301 redirect를 사용하시는것을 추천합니다.


301 redirect 사용방법

301 redirect 사용방법에는 여러가지가 있습니다.

사용하는 프로그래밍 언어에 따라 약간씩 틀리고 .htaccess 파일 수정을 통해 mod_rewrite을 사용할수 있습니다.

1. PHP redirect

<?php

header( "HTTP/1.1 301 Moved Permanently" );

header( "Location: http://www.new-url.com" );

?>


2. JSP(Java) redirect

< %

response.setStatus(301);

response.setHeader( "Location", "http://www.new-url.com/" );

response.setHeader( "Connection", "close" );

%>


3. ASP.NET redirect

<script runat="server">

private void Page_Load(object sender, System.EventArgs e)

{

    Response.Status = "301 Moved Permanently";

    Response.AddHeader("Location","http://www.new-url.com");

}

</script>


4. ASP redirect

< %@ Language=VBScript %>

< %

Response.Status="301 Moved Permanently"

Response.AddHeader "Location","http://www.new-url.com/"

%>


5. Ruby on Rails redirect

def old_action

headers["Status"] = "301 Moved Permanently"

redirect_to "http://www.new-url.com/"

end


6. CGI Perl redirect

$q = new CGI;

print $q->redirect("http://www.new-url.com/");


7. .htaccess mod_rewrite

RewriteEngine on

RewriteRule (.*) http://www.new-url.com/$1 [R=301,L]


'IT' 카테고리의 다른 글

Specified VM install not found: type Standard VM, name jre8  (0) 2017.03.07
IT업계 수익모델 총정리  (0) 2017.01.24
소켓(Socket) 설명. 이해.  (0) 2017.01.18
소켓 통신. 네트워크 프로그래밍.  (0) 2017.01.18
UI 라이브러리  (0) 2016.08.31
Posted by 당양부부34
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

오늘은 MySQL 내장 함수, 숫자 함수, 문자 함수에 대해 포스팅 합니다.


1. 숫자 관련 함수 

  - ABS(숫자) - 절대값 출력. 

  - CEILING(숫자) - 값보다 큰 정수 중 가장 작은 수. 

  - FLOOR(숫자) - 값보다 작은 정수 중 가장 큰 수[실수를 무조건 버림(음수일 경우는 제외)]. 

  - ROUND(숫자,자릿수) - 숫자를 소수점 이하 자릿수에서 반올림.(자릿수는 양수,0,음수를 갖을 수 있다.) 

  - TRUNCATE(숫자,자릿수) - 숫자를 소수점 이하 자릿수에서 버림. 

  - POW(X,Y) or POWER(X,Y) - X의 Y승 

  - MOD (분자, 분모) - 분자를 분모로 나눈 나머지를 구한다.(연산자 %와 같음) 

  - GREATEST(숫자1,숫자2,숫자3...) - 주어진 수 중 제일 큰 수 리턴. 

  - LEAST(숫자1,숫자2,숫자3...) - 주어진 수 중 제일 작은 수 리턴. 

  - INTERVAL(a,b,c,d.....) - a(숫자)의 위치 반환 


2. 문자 관련 함수 

  - ASCII(문자) - 문자의 아스키 코드값 리턴. 

  - CONCAT('문자열1','문자열2','문자열3'...) - 문자열들을 이어준다. 

  - INSERT('문자열','시작위치','길이','새로운문자열') - 문자열의 시작위치부터 길이만큼 새로운 문자열로 대치 

  - REPLACE('문자열','기존문자열','바뀔문자열') - 문자열 중 기존문자열을 바뀔 문자열로 바꾼다. 

  - INSTR('문자열','찾는문자열') - 문자열 중 찾는 문자열의 위치값을 출력 

  - LEFT('문자열',개수) - 문자열 중 왼쪽에서 개수만큼을 추출.

  - RIGHT('문자열',개수) - 문자열 중 오른쪽에서 개수만큼을 추출. 

  - MID('문자열',시작위치,개수) - 문자열 중 시작위치부터 개수만큼 출력 

  - SUBSTRING('문자열',시작위치,개수) - 문자열 중 시작위치부터 개수만큼 출력 

  - LTRIM('문자열') - 문자열 중 왼쪽의 공백을 없앤다. 

  - RTRIM('문자열') - 문자열 중 오른쪽의 공백을 없앤다. 

  - TRIM('문자열') - 양쪽 모두의 공백을 없앤다. 

  - LCASE('문자열') or LOWER('문자열') - 소문자로 바꾼다. 

  - UCASE('문자열') or UPPER('문자열') - 대문자로 바꾼다. 

  - REVERSE('문자열') - 문자열을 반대로 나열한다. 


3. 논리 관련 함수 

  - IF(논리식,참일 때 값,거짓일 때 값) - 논리식이 참이면 참일 때 값을 출력하고 논리식이 거짓이면 거짓일 때 출력한다. 

  - IFNULL(값1,값2) - 값1이 NULL 이면 값2로 대치하고 그렇지 않으면 값1을 출력 


4. 집계 함수 

  - COUNT(필드명) - NULL 값이 아닌 레코드 수를 구한다. 

  - SUM(필드명) - 필드명의 합계를 구한다. 

  - AVG(필드명) - 각각의 그룹 안에서 필드명의 평균값을 구한다. 

  - MAX(필드명) - 최대값을 구한다. 

  - MIN(필드명) - 최소값을 구한다. 


5. 날짜 관련 함수 

  - NOW() or SYSDATE() or CURRENT_TIMESTAMP() - 현재 날짜와 시간 출력 

  - CURDATE() or CURRENT_DATE() -현재 날짜 출력 

  - CURTIME() or CURRENT_TIME() -현재 시간 출력 

  - DATE_ADD(날짜,INTERVAL 기준값) -날짜에서 기준값 만큼 더한다. 

※ 기준값 : YEAR, MONTH, DAY, HOUR, MINUTE, SECOND 

  - DATE_SUB(날짜,INTERVAL 기준값) -날짜에서 기준값 만큼 뺸다. 

※ 기준값 : YEAR, MONTH, DAY, HOUR, MINUTE, SECOND 

  - YEAR(날짜) -날짜의 연도 출력. 

  - MONTH(날짜) -날짜의 월 출력. 

  - MONTHNAME(날짜) -날짜의 월을 영어로 출력. 

  - DAYNAME(날짜) -날짜의 요일일 영어로 출력. 

  - DAYOFMONTH(날짜) -날짜의 월별 일자 출력. 

  - DAYOFWEEK(날짜) -날짜의 주별 일자 출력(월요일(0),화요일(1)...일요일(6)) 

  - WEEKDAY(날짜) -날짜의 주별 일자 출력(월요일(0),화요일(1)...일요일(6)) 

  - DAYOFYEAR(날짜) -일년을 기준으로 한 날짜까지의 날 수. 

  - WEEK(날짜) -일년 중 몇 번쨰 주. 

  - FROM_DAYS(날 수) --00년 00월 00일부터 날 수 만큼 경과한 날의 날짜 출력. 

  - TO_DAYS(날짜) --00 년 00 월 00일 부터 날짜까지의 일자 수 출력. 

  - DATE_FORMAT(날짜,'형식') : 날짜를 형식에 맞게 출력 


감사합니다.


'IT > MySQL' 카테고리의 다른 글

MySQL 테이블 정보 및 테이블 컬럼 가져오기. 컬럼 합치기.  (0) 2018.01.16
Mysql db_helper  (0) 2017.01.31
Mysql 세자리 콤마 찍기.  (0) 2016.11.16
Mysql 수학 함수  (0) 2016.11.03
mysqlbinlog query 보기  (0) 2016.07.15
Posted by 당양부부34

2017. 1. 18. 16:26 IT

소켓(Socket) 설명. 이해.

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

소켓(Socket)의 이해


2.1.1 소켓의 정의


▶ 소켓(socket)은 1982년 BSD(Berkeley Software Distribution) UNIX 4.1에서 처음 소개되으며 현재 널리 사용되는 것은 1986년의 BSD UNIX 4.3에서 개정된 것이다.


▶ 소켓은 소프트웨어로 작성된 통신 접속점이라고 할 수 있는데 네트웍 응용 프로그램은 소켓을 통하여 통신망으로 데이터를 송수신하게 된다.


▶ 그림 2-1에 세 개의 응용 프로그램이 각각 소켓을 통하여 TCP/IP를 공유하고 있는 것을 나타냈다.


▶ 소켓은 응용 프로그램에서 TCP/IP를 이용하는 창구 역할을 하며 응용 프로그램과 소켓 사이의 인터페이스를 소켓 인터페이스라고 한다.


▶ 한 컴퓨터내에는 보통 한 세트의 TCP/IP가 수행되고 있으며, 네트웍 드라이버는 LAN 카드와 같은 네트웍 접속 장치(NIU: Network Interface Unit)를 구동하는 소프트웨어를 말한다.




2.1.2 소켓번호


▶UNIX에서 파일을 새로 열면(open) int 타입의 정수를 리턴하는데 이와같이 open문이 리턴한 정수를 파일기술자(file descriptor)라고 하며 프로그램에서 open된 파일을 액세스할 때 이 파일기술자를 사용하게 된다.


▶ 파일기술자는 기술자 테이블(descriptor table)의 index 번호인데(그림 2-2 참조), 기술자 테이블이란 현재 open되어 있는 파일의 각종 정보를 포함하고 있는 구조체를 가리키는 포인터들로 구성된 테이블이다.


▶ 예를들어 한 응용 프로그램내에서 2개의 파일을 open하면 파일기술자는 3과 4가 배정된다


 




▶ 프로그램에서 소켓을 개설하면 파일기술자와 똑같은 기능을 하는 소켓기술자(socket descriptor)가 리턴된다.


▶ 응용 프로그램에서 이 소켓을 통하여 목적지 호스트와 연결을 요구하거나 패킷을 송수신할 때 해당 소켓기술자를 사용하게 된다(이 책에서는 편의상 소켓기술자를 소켓번호라고 부르겠다).


▶ UNIX에서는 파일기술자와 소켓기술자가 같은 기술자 테이블의 index가 된다. 즉, 파일과 소켓이 기술자 테이블을 공유한다.


▶ 한 프로세스에서 파일 open시 리턴되는 파일기술자와 소켓 개설시 리턴되는 소켓기술자의 값은 서로 중복된 것이 없게 된다.


▶ 그림 2-2에는 두 개의 파일과 한 개의 소켓을 개설하였을 때의 기술자 테이블과 기술자 테이블이 가리키는 파일 또는 소켓 데이터 구조체를 나타내고 있다.


▶ 그림 2-3에 응용 프로그램과 소켓 그리고 TCP/IP의 관계를 구체적으로 나타냈다.


▶ 네 개의 응용 프로그램이 소켓번호로 각각 4, 3, 3, 3을 사용하고 있는 것을 나타냈다(응용 프로그램 1은 파일을 하나 먼저 열고 있으므로 소켓번호가 4가 된 것이다).


▶ 한편 소켓번호는 응용 프로그램내에서 순서대로 배정되며 그 프로그램내에서만 유일하게 구분되면 되는 것이므로 서로 다른 응용 프로그램에서 같은 소켓번호를 사용하는 것은 문제가 되지 않는다.


▶ 포트번호는 TCP/IP가 지원하는 상위 계층의 프로세스를 구분하기 위한 번호이므로 하나의 컴퓨터내에 있는 응용 프로세스들은 반드시 서로 다른 포트번호를 사용하여야 한다.


▶ 그림 2-3에서는 네 개의 응용 프로그램이 3000번부터 3003번의 포트번호를 사용하는 것을 가정하였다.


▶ 그림 2-3에서 연결형 서비스는 TCP가 그리고 비연결형 서비스는 UDP가 각각 처리하는 것을 보였다.



2.1.3 소켓의 이용


▶ 소켓을 이용한 네트웍 응용 프로그램에서 상대방과 IP 패킷을 주고받기 위하여는 다음의 다섯 가지 정보가 정해져야 한다.

① 통신에 사용할 프로토콜(TCP 또는 UDP)

② 자신의 IP 주소

③ 자신의 포트번호

④ 상대방의 IP 주소

⑤ 상대방의 포트번호


▶ 통신에 사용할 프로토콜은 연결형 또는 비연결형을 말하는데 인터넷 프로그램에서는 연결형 서비스를 TCP 또는 스트림(stream) 서비스라고도 부르고, 비연결형 서비스를 UDP 또는 데이터그램 서비스라고도 부른다.


▶ 자신의 IP 주소는 응용 프로그램이 수행되는 컴퓨터의 IP 주소를 말하며, 자신의 포트번호는 이 컴퓨터에서 수행되고 있는 응용 프로그램들 중 본 응용 프로그램을 구분하는 고유번호이다.


▶ 상대방의 IP 주소는 통신하고자 하는 상대방(목적지) 컴퓨터의 IP 주소를 말하며, 상대방의 포트번호는 목적지 컴퓨터내에서 수행중인 여러 응용 프로그램 중 나와 통신할 프로그램을 지정하는 번호이다.


▶ 잘 알려진(well-known) 표준 인터넷 서비스(ftp, mail, http 등)를 처리하는 서버 프로그램은 미리 지정된 포트번호를 사용하고 있다.


▶ 소켓 프로그래밍에서 첫번째로 해야 할 일은 통신 창구 역할을 하는 소켓을 만드는 것으로 이것은 서버와 클라이언트에서 모두 필요한데 이를 위하여 socket() 시스템 콜을 호출한다.


▶socket()이 성공적으로 수행되면 새로 만들어진 소켓번호(int 타입)를 리턴하고 에러가 발생하면 -1이 리턴된다.


▶ socket()의 사용 문법은 다음과 같다.


int socket (

domain, /* 프로토콜 체계 */

type, /* 서비스 타입 */

protocol; /* 소켓에 사용될 프로토콜 */


▶ 소켓은 본래 TCP/IP, 즉 인터넷만을 위하여 정의된 것이 아니며 UNIX 네트웍, XEROX 네트웍 등에서도 사용할 수 있도록 일반적으로 정의된 것이다.


▶ TCP/IP 프로토콜을 사용하려면 소켓을 개설할 때 프로토콜 체계를 인터넷으로 지정하여야 한다.


▶ 이를 위하여 domain을 PF_INET으로 선택하여야 한다.


▶ 한편 domain으로 가질 수 있는 값은 다음과 같다(PF는 Protocol Family를 나타냄).


domain : PF_INET (인터넷 프로토콜 체계 사용)

PF_UNIX (UNIX 방식의 푸로토콜 체계 사용)


PF_NS (XEROX 네트웍 시스템의 프로토콜 체계 사용)


▶ type은 서비스 타입(type of service)을 말하는데, 연결형(스트림) 서비스를 제공하는 소켓을 만들려면 SOCK_STREAM을, 비연결형(데이터그램) 서비스를 선택하려면 SOCK_ DGRAM을 선택하여야 한다.


type : SOCK_STREAM (스트림 방식의 소켓 생성)

  SOCK_DGRAM (데이터그램 방식의 소켓 생성)


▶ protocol은 소켓을 지원하는 프로토콜을 지정하는데 일반적으로 0을 쓰면 시스템이 자동으로 설정해 준다.


▶ 다음은 socket() 시스템 콜을 호출하고 생성된 소켓번호를 출력하는 예제 open_socket.c이다.


▶ 이 프로그램에서는 먼저 /etc/passwd 파일을 열고 리턴된 파일기술자(file descriptor)를 출력한 후, 소켓을 두 개 열어서 소켓번호가 어떤 값인지 확인한다.


/* 스트림형 소켓 열기 */


sd1 = socket(PF_INET, SOCK_STREAM, 0) ;


printf("stream socket descriptor = %d\n", sd1) ;


/* 데이터그램형 소켓 열기 */


sd2 = socket(PF_INET, SOCK_DGRAM, 0) ;


printf("datagram socket descriptor = %d\n", sd2) ; 

/* 또다른 파일 열기 */


close(sd2) ;


close(sd1) ;



▶ 위의 예제 open_socket.c의 실행 결과는 다음과 같다.


stream socket descriptor = 3

datagram socket descriptor = 4


▶ socket() 시스템 콜은 트랜스포트 프로토콜(TCP 또는 UDP)을 선택하여 하나의 소켓을 만드는 함수이다.


▶ 리턴된 소켓번호는 응용 프로그램내에서 생성된 파일과 소켓을 구분하는 유일한 번호인 것을 알 수 있다.


 


2.1.4 소켓주소 구조체


▶ 소켓을 이용할 통신 객체(클라이언트 또는 서버)의 구체적인 주소를 표현하기 위해서는 주소 체계(address family), IP 주소, 포트번호 세 가지가 지정되어야 하며 이 세 가지 주소 정보를 소켓주소(socket address)라고 부른다.


▶ 소켓 프로그래밍에서는 소켓주소를 담을 구조체 sockaddr를 아래와 같이 정의하였으며 이것은 2바이트의 address family와 14바이트의 주소(IP 주소 + 포트번호)로 구성되어 있다.


struct sockaddr {

u_short sa_family; /* address family */


char sa_data[14]; /* 주소 */


};


▶ 그런데 위에 정의된 sockaddr 소켓주소 구조체에 IP 주소, 포트번호 등을 직접 쓰거나 읽기가 불편하므로 인터넷 프로그래밍에서는 sockaddr 구조체를 사용하는 대신 4바이트의 IP 주소와 2바이트의 포트번호를 구분하여 지정할 수 있는 인터넷 전용 소켓주소 구조체인 sockaddr_in을 주로 사용한다.


▶ sockaddr_in에서는 다시 32비트의 IP 주소를 저장하는 구조체 in_addr를 사용하고 있으며 sockaddr_in과 sockaddr의 호환성을 위하여 두 구조체의 전체 크기는 16바이트로 같도록 하였다.


struct in_addr {

u_long s_addr; /* 32비트의 IP 주소를 저장할 구조체 */


}; 

struct sockaddr_in {


short sin_family; /* 주소 체계 */


u_short sin_port; /* 16비트 포트번호 */


struct in_addr sin_addr; /* 32비트 IP 주소 */


char sin_zero[8]; /* 16바이트 크기를 맞추기 위한 dummy */


};


 


▶ 위에서 주소 체계 sin_family로 선택할 수 있는 것은 다음과 같으며 인터넷에서는 항상 인터넷 주소 체계(AF_INET)를 선택하여야 한다.


sin_familly : AF_INET (인터넷 주소 체계)

AF_UNIX (유닉스 파일 주소 체계)


AF_NS (XEROX 주소 체계)


▶ 소켓주소의 주요 내용은 IP 주소와 포트번호인데, 소켓주소는 응용 프로그램이 자신의 소켓주소(local address)를 표현하는 데에도 사용되며 상대방 프로세스의 소켓주소(remote address)를 표현할 때도 사용된다(즉, 2.1.3절의 ②+③ 또는 ④+⑤를 각각 나타내기 위해 소켓주소 구조체가 사용된다).


2.1.5 소켓 프로그래밍 절차


▶ 소켓 프로그래밍도 대표적인 네트웍 프로그래밍으로서 1.3절에서 설명한 클라이언트-서버 통신 모델로 구현된다.


▶ 소켓을 이용한 클라이언트와 서버의 프로그래밍 절차를 간략히 설명하고, 2.3절과 2.4절에서 클라이언트와 서버 프로그램의 작성 과정을 상세히 설명하겠다.


▶ 그림 2-4에 클라이언트와 서버가 TCP(스트림형 또는 연결형) 소켓을 만들고 서로 연결한 다음 데이터를 송수신하고 소켓을 종료하는 절차를 나타냈다.


▶ 클라이언트-서버 통신 모델에서는 항상 서버 프로그램이 먼저 수행되고 있어야 한다.


▶ 서버는 socket()을 호출하여 통신에 사용할 소켓을 하나 개설하고 이때 리턴된 소켓번호와 자신의 소켓주소 (2.1.3절의 ②+③)를 bind()를 호출하여 서로 연관시켜 둔다.


▶ 서버에서 bind()가 필요한 이유는 소켓번호는 응용 프로그램이 알고 있는 통신 창구 번호이고, 소켓주소(②+③)는 네트웍 시스템(즉, TCP/IP)이 알고 있는 주소이므로 이들의 관계를 묶어 두어야(bind) 응용 프로세스와 네트웍 시스템간의 패킷 전달이 가능하기 때문이다(bind()의 자세한 사용법은 2.4.1절에서 설명함).


▶ 다음에 서버는 listen()을 호출하여 클라이언트로부터의 연결요청을 기다리는 수동 대기모드로 들어간다.


▶ 클라이언트로부터의 연결요청이 왔을 때 이를 처리하기 위하여 accept()를 호출한다.


▶ 서버는 accept() 시스템 콜에서 기다리고 있다가 클라이언트가 connect()를 호출하여 접속요구를 해오면 이를 처리한다.


▶ 연결이 성공적으로 이루어지면 서버는 클라이언트와 데이터를 송수신할 수 있게 된다.


▶ 한편 클라이언트는 socket()을 호출하여 소켓을 만든 후 bind()를 부를 필요 없이, 서버에게 연결요청을 보내기 위하여 connect()를 호출한다.


▶이때 클라이언트는 접속할 상대방 서버의 소켓주소(④+⑤) 구조체를 만들어 connect()의 함수 인자로 주어야 한다.


▶ 서버와 연결이 이루어지면 (즉, connect()문이 성공적으로 리턴되면) 서버와 데이터를 송수신할 수 있다.

 



▶ 클라이언트에서 bind()를 호출할 필요가 없는 이유는, 클라이언트 프로그램은 서버 프로그램과 달리 자신이 사용하는 IP 주소나 포트번호를 다른 클라이언트 또는 서버가 미리 알고 있을 필요가 없기 때문이다.


▶ 서버의 응용 프로그램은 자신이 사용하고 있는 포트번호를 통하여 클라이언트들의 서비스를 처리해야 하므로, 응용 프로그램이 소켓번호와 소켓주소를 bind()하는 것이 필수적이다.


▶ 클라이언트는 포트번호를 임의로 사용해도 되기 때문에 포트번호를 특정한 값으로 bind()시켜 두는 것이 필요 없다.


▶ 클라이언트는 오히려 bind()를 사용하는 것이 클라이언트 프로그램의 범용성을 떨어뜨리게 된다. 왜냐하면 같은 포트번호를 사용하는 클라이언트 프로그램들이 하나의 컴퓨터에서 두 개 이상 실행되면 에러가 발생하기 때문이다.

'IT' 카테고리의 다른 글

IT업계 수익모델 총정리  (0) 2017.01.24
301 redirect, 302 redirect.  (0) 2017.01.24
소켓 통신. 네트워크 프로그래밍.  (0) 2017.01.18
UI 라이브러리  (0) 2016.08.31
저장 버튼(save button) 더블클릭 방지.  (1) 2015.04.28
Posted by 당양부부34
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

네트워크 및 소켓 통신.


1. Network Programming 정의

네트워크 프로그래밍이란 서로 떨어져 있는 호스트(컴퓨터)들 간에 데이터를 주고 받을 수 있도록 프로그램을 구현하는 것입니다. 다만 통신할 대상이 멀리 떨어져 있기 때문에 소프트웨어 차원에서 호스트들간에 연결해주는 장치가 필요하고 이러한 기능을 해주는 장치를 소켓(socket)이라고 합니다. 일반적으로 소켓 프로그래밍과 네트워크 프로그래밍이라는 용어는 같은 의미로 사용됩니다.

 

 *소켓의 정의

소켓(socket)은 1982년 BSD(Berkeley Software Distribution) UNIX 4.1에서 처음 소개되으며 현재 널리 사용되는 것은 1986년의 BSD UNIX 4.3에서 개정된 것입니다.소켓은 소프트웨어로 작성된 추상적인 개념의 통신 접속점이라고 할 수 있는데 네트웍 응용 프로그램은 소켓을 통하여 통신망으로 데이터를 송수신하게 된다. 소켓은 응용 프로그램에서 TCP/IP를 이용하는 창구 역할을 하며 응용 프로그램과 소켓 사이의 인터페이스 역할을 하고 있습니다.

*소켓의 구조

클라이언트 어플리케이션은 서버와 통신을 하기위해 어떠한 메시지 또는 데이터를 서버에게 보내려 할 것 입니다. 그러하기 위해서는 네트워크에 연결하여 서버에 접속하여야 합니다. 그러기 위해서는 소켓을 통하여 네트워크에 접속하여야 합니다.

소켓은 이렇게 어플리케이션에게 네트워크 접속을 위한 연결장치, 인터페이스 역할을 하는것입니다. 네트워크 어플리케이션이 보낸 데이터를 소켓을 거쳐 운영체제상에 존재하는 TCP/IP 소프웨어에게 전달하게 됩니다. 다시 하드웨어 상인 랜카드를 거쳐 네트워크에 전달하게 됩니다. 서버의 경우는 클라이언트와 정 반대되는 개념입니다. 네트워크는 서버에게 보낸데이터를 서버의 랜카드에게 보내지게 됩니다. 다시 운영체제의 TCP/IP소프트웨어를 거쳐 어플리케이션과 연결개념인 소켓을 통해 최종적으로 서버 어플리케이션에게 전달되는것입니다.소켓은 이렇게 어플리케이션과 TCP/IP 사이에 존재 하고 있습니다.

 

2. 소켓의 정의 및 종류

Socket이란?

두 프로그램이 네트워크를 통해 서로 통신을 수행 할 수 있도록 양쪽에 생성되는 링크의 단자입니다.

두 소켓이 연결되면 서로 다른 프로세스끼리 데이터를 전달 할 수 있습니다. 결국 소켓이 구현됨으로써

네트워크 및 전송 계층의 캡슐화가 가능해 집니다. 소켓은 원래 캘리포니아 버클리 대학 분교에서

UNIX용으로 개발 되었으며 UNIX에서의 입출력 메소드의 표준인 개방/읽기/쓰기/닫기 메커니즘을 따릅니다.

소켓의 종류는 다음과 같습니다.

 

- 스트림

스트림 소켓은 양방향으로 바이트 스트림을 전송 할 수 있는 연결 지향형 소켓으로 양쪽 어플리케이션이 모두 데이터를 주고 받을 수 있다는것을 의미한다. 스트림소켓은 오류수정, 전송처리, 흐름제어등을 보장해 주며 송신된 순서에 따른 중복되지 않은 데이터를 수신하게 된다. 이 소켓은 각 메세지를 보내기 위해 별도의 연결을 맺는 행위를 하므로 약간의 오버헤드가 존재한다. 그러므로 소량의 데이터보다는 대량의 데이터를 보내는 경우에 적당하다. 스트림소켓은 이러한 품질의 통신을 수행하기 위해서 TCP를 사용한다.


- 데이터그램

명시적으로 연결을 맺지 않으므로써 비 연경형 소켓이라고 한다. 메세지는 대상 소켓으로 전송되며 대상 소켓은 메세지를 적절히 수신한다. 스트림소켓을 사용하는것이 데이터그램 소켓을 사용하는것보다 더 신뢰성이 높은 방법이지만 연결을 수립하는데 드는 오버헤드는 무시할 수 없다. 데이터그램 소켓을 사용하려면 클라이언트에서 서버로 데어터를 전송 할때 UDP를 사용한다. 이 프로토콜에서는 메세지의 크기에 약간의 제한이 있으며 메세지의 확실한 전달 역시 보장하지 않으며 통신 중 데이터를 읽어 버리더라도 오류를 되돌리지 않는다.


- RAW

RAW소켓은 패킷을 가져오면 TCP/IP스택상의 TCP,UDP계층을 우회하여 바로 어플리케이션으로 송신하는 소켓이다. 이런 소켓에서 패킷은 TCP/IP필터를 통해 전달 되지 않으으로 원형 그대로의 패킷을 볼 수 있다. 이는 모든 데이터를 적절히 처리하거나 헤더를 제거하고 이를 파싱하는 과정은 모두 수신 어플리케이션에서 담당해야 하는 것이다. 실제 RAW소켓을 이용하여 프로그래밍을 하는 일은 거의 드물며 만약 시스템 소프트웨어나 패킷을 분석하는 프로그램을 개발할 경우 필요 할수도 있다.

 

3. IP 주소와 포트

IP 주소는 1바이트 4자리의 주소로 이루어집니다. (예 : 202.131.293.70)

이를 기억하기 힘들기 때문에 naver.com 과 같은 문자로 변환해서 사용하는데 이를 DNS(Domain Name Server)라 합니다. 하나의 IP 주소에서는 여러가지 작업을 동시에 할 수 있어야 하는데, 이 때 포트를 사용하여 여러 서비스를 사용하게 됩니다. 0부터 1023 사이의 포트는 시스템에 예약되어 있으며, 1024부터 65535가지의 포트는 사용자가 임의를 사용할 수 있습니다.

 

 

 

4. TCP 와 UDP

포트를 사용하여 통신을 하는 방법에는 TCP 와 UDP 프로토콜 두가지가 있습니다

TCP 는 두 프로그램 간의 토인이 처음 시작될 때부터 끝날 때까지 계속 연결을 유지하는 연결지향(Connection oriented) 방식으로 전화와 비유할 수 있습니다.

 

UDP 는 연결을 설정하지 않고 데이터를 보내는 방식으로 우편물에 비유할 수 있습니다. 보낸 데이터가 제대로 갔는지, 순서대로 갔는지 동의 여부에 대해 전혀 신경쓰지 않는 신뢰성이 결여된 프로토콜 입니다. 그렇다고 필요 없는 프로토콜은 아니며 TCP처럼 연결을 하고 끊는 번거로운 작업이 필요 없고, TCP보다 빠르며 데이터의 순서가 별로 중요하지 않고 패킷의 일부가 손상되어도 큰 영양을 미치지 않는 음성이나 영상 데이터를 전송할때 많이 이용되어 집니다.

 

5. 소켓 프로그래밍의 절차

- TCP Client

 1) 소켓을 생성한다.

 2) 서버로 connect한다.

 3) 접속이 성공됐다면 read 및 write 함수를 통해 서버와 패킷을 주고 받는다.

 4) 사용을 마치면 close로 소켓을 닫는다.

 

- TCP server

 1) 듣기 소켓을 생선한다.

 2) bind한다. (내선 부여)

 3) listen한다. (내선 연결)

 4) accept() 클라이언트가 connect할 경우 소켓을 생성 하고 연결한다.

 5) read와 write 함수를 이용해 메시지를 주고 받는다.

 6) 사용된 연결 소켓을 닫는다.

 7) 사용을 마쳤을 경우 듣기 소켓을 닫는다.


'IT' 카테고리의 다른 글

301 redirect, 302 redirect.  (0) 2017.01.24
소켓(Socket) 설명. 이해.  (0) 2017.01.18
UI 라이브러리  (0) 2016.08.31
저장 버튼(save button) 더블클릭 방지.  (1) 2015.04.28
이클립스 주요 기능  (0) 2015.03.12
Posted by 당양부부34
이전버튼 1 2 3 4 5 6 7 ··· 21 이전버튼

블로그 이미지
주요 토렌트를 블로깅하고 있습니다. 토렌트 순위 등은 다른 사이트를 찾아보세요. 주요 웹툰 순위도 게재했어요 경제를 좋아하는 일산의 행복한 프로그래머입니다.
당양부부34
Yesterday
Today
Total

달력

 « |  » 2024.3
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

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

글 보관함