.net에서 소켓 프로그래밍을 하려면 몇 가지 선택사항이 있는데 그중 하나가 'SocketAsyncEventArgs'입니다. 전에 '[.Net] SocketAsyncEventArgs - 큰 데이터(Large Data) 전송할 때 생기는 문제'라는 글에서 버퍼크기보다 큰 데이터가 오는 경우 어떤 일이 발생하는지 다루었습니다. (참고 - [.Net] SocketAsyncEventArgs - 큰 데이터(Large Data) 전송할때 생기는 문제 ) 그렇다면 'SocketAsyncEventArgs'를 이용하여 큰 데이터(Large Data)나 연속 메시지(Continuous Receive)에 의한 리시브데이터 뭉침 현상을 어떻게 처리해야 하는지를 알아보겠습니다. 이 포스팅의 완성된 코드는 공개프로그램에서 확인할..
요즘 'Html5'를 활용하여 드래그 앤 드롭(Drag and Drop)을 이용하여 파일 업로드를 하고 있습니다. 우리도 구현해 봅시다~ 그냥 'Html5'만 사용하는 건 아니고 제이쿼리(jquery)도 사용합니다. 참고 : codeguru - Uploading Files Using HTML5 Drag-and-Drop and ASP.NET 1. HTML 페이지 작성하기 프로젝트를 생성하고 'FlieUpload.aspx'를 추가합니다. 1-1. html 작성 바디에 'div'로 드래그 앤 드롭 영역을 만들고 아래 버튼을 하나 만듭니다. Drag & Drop files from your machine on this box. Upload Selected Files 1-2. CSS 작성 스타일시트는 만든 드래그..
제목이 좀 이상하긴 한데.... 'GridView'를 그냥 사용하면 다음과 같이 컬럼까지 'tbody'에 출력 되게 됩니다. 예전에야 그냥 해더스타일(HeaderStyle)에 스타일클래스(CssClass)속성을 지정해서 사용하는 방법이나 그리드뷰(GridView)에 스타일클래스(CssClass) 속성을 지정하여 해결했습니다. 문제는 다양한 프론트엔드툴같은 것들이 유행되면서 UI작업이 생산성이 향상 되고 이로 인해 표준을 얼마나 잘 지켜서 코드를 만드느냐가 중요해졌습니다. Asp.net의 경우 웹콘트롤(WebControls)에서 생성되는 코드도 많다 보니 표준에 맞지 않는 코드가 생성되는 경우가 생기기 시작했다는 것이죠. 그리드뷰의 'thead'문제도 이런 문제입니다. 테이블 태그를 사용하면 'thead'..
사실 대부분의 'OAuth'인증은 웹을 통해서만 하므로 애플리케이션이던 웹이던 처리에는 크게 차이가 없다는 게.... (제가 모르는 건인지 자료를 못 찾은 건지 ㅡ.-;;) 어찌 됐건 C#애플리케이션을 통해 네이버에서 'OAuth'로그인을 하도록 하겠습니다. 로그인이 잘되었는지 확인하기 위해 접근 토큰(Access Token, 액세스 토큰)을 발급받아 블로그의 카테고리를 조회해 보도록 하겠습니다. 0. 네이버 'OAuth'로그인 절차 애플리케이션에서 네이버 'OAuth'인증을 하기 위해서는 웹 브라우저를 사용할 수 있는 컨트롤이 필요합니다. 로그인 인터페이스가 웹으로만 되어 있으므로 웹 브라우저 컨트롤(C#에서는 'WebBrowser' 컨트롤)을 이용하여 사용자에게 네이버 로그인을 유도하고 로그인 결과를..
원래 'adb shell'명령은 보통 컴퓨터에 디바이스를 연결해서 사용합니다. 그런데 가끔 앱 안에서도 'adb shell'명령으로 처리해야 편한 경우가 있습니다. 1. 간단하게 사용하기 그런 경우 'Runtime.getRuntime().exec([명령])'같이 사용할 수 있습니다. 예> Runtime.getRuntime().exec("adb shell"); 이런 식으로 명령을 실행하면 됩니다. 1-1. 여러 명령 한 번에 실행하기 여러 명령을 한 번에 실행하려면 'Runtime.getRuntime().exec([명령])'을 여러 번 호출하시면 됩니다. 예> //adb shell을 마운트 했다가 풀어 준다. Runtime.getRuntime().exec( "adb shell" ); Runtime.getR..
간만에 테스트할게 있어서 adb를 열었더니..... more than one device and emulator 1. 에러 원인 이 에러 메시지는 디바이스가 여러 개 연결되어 있을 때 볼 수 있는 에러입니다. 2. 해결 방법 이 문제를 해결하려면 사용할 디바이스(device)를 지정해 주어야 합니다. 아래 명령어로 디바이스 리스트를 확인하고, adb device 아래 명령어로 디바이스를 지정합니다. adb -s [디바이스 이름] shell 마무리 이런 문제는 원인만 알면 해결은 금방이죠!
안드로이드에서 동적 컨트롤을 추가할 때는 'addView'를 이용합니다. View.addView([추가할 뷰]); View.addView([추가할 뷰], [위치 인덱스]); 버튼을 추가하려면 이런 식으로 하면 됩니다. Button btnTemp; ViewGroup.LayoutParams params; Button btnTemp = new Button(this); btnTemp.setText("Button 2"); ViewGroup.LayoutParams params = new ViewGroup.LayoutParams(600, 300); btnTemp.setLayoutParams(params); this.m_flContainer.addView(btnTemp, 1); 여기서 조심해야 할 것은 추가하려는 뷰에..
안드로이드의 웹뷰에서 Url이벤트를 사용하려면 웹뷰클라이언트(WebViewClient)를 상속받아 오버라이(Override)하여 사용해야 합니다. 웹뷰클라이언트(WebViewClient) 상속받기 일반적인 방법으로 상속받으면 됩니다. 'claWebClient'클래스를 생성하여 웹뷰클라이언트를 상속받아 봅시다. public class claWebClient extends WebViewClient { private Context m_context; //여기서는 토스트 메시지를 사용하기 위하여 컨텍스트를 매개변수로 받습니다. public claWebClient(Context context) { super(); this.m_context = context; } } 메서드 오버라이드(Override)하기 사용 가..
유니티에서 만든 프로젝트를 Html5로 빌드하면 'WebGL'로 빌드 결과물이 나옵니다. 이렇게 나온 파일을 웹서버에 올리고 접속해보면.... Uncaught could not load memory initializer Release/[파일명].html.mem 아 잰장할 ㅎㅎㅎ 1. 원인 얼핏 보면 메모리 에러 같지만 이건 메모리 에러는 아니고 메모리로 사용되는 파일을 받을 수 없어서 발생하는 에러입니다. (흠....엄밀이 따지면 메모리 에러 맞네요 ㅎㅎㅎ) 빌드 결과물을 보면 'Release'폴더에 '*.data'와 '*.mem'파일이 있습니다. 그런데 웹서버는 보안상 이유로 허용된 파일확장자가 아니면 다운로드가 되지 않습니다. 저 두개는 웹서버에서 허용된 확장자가 아니므로 이런 에러가 발생하는 것입니..
가끔 안드로이드 프로젝트를 하다 보면 타켓 API를 바꿔야 할 때가 있습니다. 사실 이럴 때는 프로젝트를 다시 생성하는 편이 좋습니다 ㅡ,.ㅡ;;; 하지만! 코드를 수정해서 타켓을 바꿀 수도 있긴 합니다. Grable Scripts > build.gradle (Module: app) 를 엽니다. 아래와 같은 코드가 나오는데 여기서 minSdkVersion : 최소 SDK 버전 targetSdkVersion : 타겟 SDK 버전 을 설정 할 수 있습니다.