'2013/12'에 해당되는 글 65건
- 2013.12.31 주소체계와 데이터 정렬
- 2013.12.31 프로토콜
- 2013.12.31 윈도우 소켓
- 2013.12.31 소켓
- 2013.12.31 유니티 공식 사이트 데모 프로젝트
- 2013.12.30 c# delegate
- 2013.12.30 c# 책
- 2013.12.30 뒤로가기 버튼 클릭시 종료 팝업후 종료 하기
- 2013.12.30 c# 제네릭
- 2013.12.30 INSTALL_FAILED_INSUFFICIENT_STORAGE 오류시
ip (Internet Protocol)
-인터넷 상에서 데이터를 송수신할 목적으로 컴퓨터에 부여하는 값
Port번호
프로그램상에서 생성되는 소켓을 구분하기 위해서 소켓에 부여되는 번호
port -> 16비트 0~ 65535
0~1023은 이미 용도가 결정되 있음
80번은 인터넷포트번호임
Trackback 0 And
Comment 0
프로토콜
대화에 필요한 통신규약
프로토콜은 약속이다.
소켓 생성함수
#include <sys/socket.h>
int socket(int domain, int type, int protocol);
->성공시 파일 디스크립터, 실패시 -1 반환
domain 소켓이 사용할 프로토콜 체계 정보전달
type 소켓의 데이터 전송방식에 대한 정보 전달
protocol 두 컴퓨터간 통신에 사용되는 프로토콜 전달
첫번째 인자
프로토콜의 체계 종류
- PF_INET IPV4 인터넷 프로토콜 체계
- PF_INET6 IPV6 인터넷 프로토콜 체계
- PF_LOCAL 로컬 통신을 위한 UNIX 프로토콜 체계
- PF_PACKET Low Level 소켓을 위한 프로토콜 체계
- PF_IPX IPX 노벨 프로토콜 체계
1번만 알면 됨
나머지는 잘 사용 안됨
두번째 인자
소켓의 데이터 전송방식
PF_INET에는 둘이상 전송방식이 있음
대표적 두가지 전송 타입
-연결 지향형 소켓타입(SOCK_STREAM) TCP
-비연결 지향형 소켓 타입(SOCK_DGRAM) UDP
tcp 특성 예제
#include <stdio.h>
#include <stdlib.h>
#include <WinSock2.h>
void ErrorHandling(char * message);
int main(int argc, char * argv[])
{
WSADATA wsaData;
SOCKET hSocket;
SOCKADDR_IN servAddr;
char message[30];
int strLen = 0;
int idx=0, readLen=0;
if(argc != 3)
{
printf("Usage : %s <IP> <port>\n",argv[0]);
exit(0);
}
if(WSAStartup(MAKEWORD(2,2), &wsaData) != 0)
{
ErrorHandling("WSAStartup() error!");
}
hSocket = socket(PF_INET, SOCK_STREAM, 0);
if(hSocket == INVALID_SOCKET)
{
ErrorHandling("socket() error!");
}
memset(&servAddr, 0, sizeof(servAddr));
servAddr.sin_family = AF_INET;
servAddr.sin_addr.s_addr = inet_addr(argv[1]); //ip
servAddr.sin_port = htons(atoi(argv[2])); //port
if(connect(hSocket, (SOCKADDR *)&servAddr,sizeof(servAddr)) == SOCKET_ERROR)
{
ErrorHandling("connect() error!");
}
while(readLen=recv(hSocket, &message[idx++], 1, 0))
{
if(readLen==-1)
{
ErrorHandling("read() error!");
}
strLen += readLen;
}
printf("Message from server : %s \n", message);
printf("Function read call count :%d \n", strLen);
closesocket(hSocket);
WSACleanup();
return 0;
}
void ErrorHandling(char * message)
{
fputs(message,stderr);
fputc('\n', stderr);
exit(1);
}
Trackback 0 And
Comment 0
윈도우 소켓
윈속 초기화
#include <winsock2.h>
int WSAStartup(WORD wVersionRequested, LPWSADATA lpWSAData);
->성공시 0, 실패 시 0이 아닌 에러코드 값 반환
-> wVersionRequested 프로그래머가 사용할 윈속의 버전정보 전달
-> lpWSAData WSADATA라는 구조체 변수의 주소 값 전달.
->윈속 기반 프로그래밍에서는 공식과 같이 등장
int main(int argc, char * argv[])
{
WSDATA wsaData;
…
if(WSAStartup(MAKEWORD(2, 2), &wsaData) != 0)
ErrorHandling(“WSAStartup() error!”);
...
return 0;
}
상위 8비트는 부버전, 하위 8비트는 주버전
MAKEWORD(1, 2) -> 주버전 1, 부버전 2 , 0x0201반환 ->2진수 16진수 513
MAKEWORD(2, 2) -> 주버전 2, 부버전 2, 0x0202 반환
윈속 라이브러리 해제
#include <winsock2.h>
int WSACleanup(void);
->성공시 0, 실패 시 SOCKET_ERROR 반환
프로그램이 종료되기 직전에 호출하는 것이 보통임
윈도우 소켓 관련 함수
#include <winsock2.h>
SOCKET socket(int af, int type, int protocol);
->성공시 소켓 핸들, 실패 시 INVALID_SOCKET 반환
#include <winsock2.h>
int bind(SOCKET s, const sturct sockaddr * name, int namelen);
->성공시 소켓 핸들, 실패 시 SOCKET_ERROR 반환
#include <winsock2.h>
int listen(SOCKET s, int backlog);
->성공 시 0, 실패 시 SOCKET_ERROR 반환
#include <winsock2.h>
SOCKET accept(SOCKET s, struct sockaddr * addr, int * addrlen);
->성공 시 소켓 핸들, 실패 시 INVALID_SOCKET 반환
#include <winsock2.h>
int connect(SOCKET s, const struct sockaddr * name, int namelen);
->성공 시 0, 실패 시 SOCKET_ERROR 반환
소켓을 닫을때
#include <winsock2.h>
int close socket(SOCKET s);
->성공 시 0, 실패 시 SOCKET_ERROR 반환
//입출력함수
#include <winsock2.h>
int send(SOCKET s, const char * buf, int len, int flags);
->성공 시 전송된 바이트 수, 실패 시 SOCKET_ERROR 반환
s-> 데이터 전송 대상과의 연결을 의미하는 소켓의 핸들 값 전달
buf-> 전송할 데이터를 저장하고 있는 버퍼의 주소 값 전달.
len -> 전송할 바이트 수 전달
flags -> 데이터 전송 시 적용할 다양한 옵션 정보 전달.
//입출력함수
#include <winsock2.h>
int recv(SOCKET s, const char * buf, int len, int flags);
->성공 시 수신한 바이트 수(단 EOF 전송 시 0), 실패 시 SOCKET_ERROR 반환
s-> 데이터 수신 대상과의 연결을 의미하는 소켓의 핸들 값 전달
buf-> 수신된 데이터를 저장할 버퍼의 주소 값 전달.
len -> 수신할 수 있는 바이트 수 전달
flags -> 데이터 수신 시 적용할 다양한 옵션 정보 전달.
예제소스
서버
#include <stdio.h>
#include <stdlib.h>
#include <WinSock2.h>
void ErrorHandling(char * message);
int main(int argc, char * argv[])
{
WSADATA wsaData;
SOCKET hServSock, hClntSock;
SOCKADDR_IN servAddr, clntAddr;
int szClntAddr;
char message[] = "Hello World!";
if(argc!=2)
{
printf("Usage : %s <port> \n", argv[0]);
exit(1);
}
if(WSAStartup(MAKEWORD(2,2), &wsaData) != 0)
{
ErrorHandling("WSAStartup() error!");
}
hServSock = socket(PF_INET, SOCK_STREAM, 0);
if(hServSock == INVALID_SOCKET)
{
ErrorHandling("socket() error!");
}
memset(&servAddr, 0, sizeof(servAddr));
servAddr.sin_family = AF_INET;
servAddr.sin_addr.s_addr = htonl(INADDR_ANY);
servAddr.sin_port = htons(atoi(argv[1]));
if(bind(hServSock,(SOCKADDR *)&servAddr,sizeof(servAddr)) == SOCKET_ERROR)
{
ErrorHandling("bind() Error!");
}
if(listen(hServSock, 5) == SOCKET_ERROR)
{
ErrorHandling("listen() Error!");
}
szClntAddr = sizeof(clntAddr);
hClntSock = accept(hServSock, (SOCKADDR *) &clntAddr, &szClntAddr);
if(hClntSock == INVALID_SOCKET)
{
ErrorHandling("accept() error!");
}
send(hClntSock, message, sizeof(message), 0);
closesocket(hClntSock);
closesocket(hServSock);
WSACleanup();
return 0;
}
void ErrorHandling(char * message)
{
fputs(message,stderr);
fputc('\n', stderr);
exit(1);
}
클라이언트
#include <stdio.h>
#include <stdlib.h>
#include <WinSock2.h>
void ErrorHandling(char * message);
int main(int argc, char * argv[])
{
WSADATA wsaData;
SOCKET hSocket;
SOCKADDR_IN servAddr;
char message[30];
int strLen;
if(argc != 3)
{
printf("Usage : %s <IP> <port>\n",argv[0]);
exit(0);
}
if(WSAStartup(MAKEWORD(2,2), &wsaData) != 0)
{
ErrorHandling("WSAStartup() error!");
}
hSocket = socket(PF_INET, SOCK_STREAM, 0);
if(hSocket == INVALID_SOCKET)
{
ErrorHandling("socket() error!");
}
memset(&servAddr, 0, sizeof(servAddr));
servAddr.sin_family = AF_INET;
servAddr.sin_addr.s_addr = inet_addr(argv[1]); //ip
servAddr.sin_port = htons(atoi(argv[2])); //port
if(connect(hSocket, (SOCKADDR *)&servAddr,sizeof(servAddr)) == SOCKET_ERROR)
{
ErrorHandling("connect() error!");
}
strLen=recv(hSocket,message,sizeof(message)-1, 0);
if(strLen == 1)
ErrorHandling("read() error!");
printf("Message from server : %s \n", message);
closesocket(hSocket);
WSACleanup();
return 0;
}
void ErrorHandling(char * message)
{
fputs(message,stderr);
fputc('\n', stderr);
exit(1);
}
Trackback 0 And
Comment 0
소켓
네트워크 망의 연결에 사용되는 도구
네트워크를 통한 두 컴퓨터의 연결
소켓 구분
1.tcp
전화기에 비유(전화망을 통해서 음성 데이터를 주고받음) 사실상 소켓이나 마찬가지
소켓은 거는 용도의 소켓을 완성하는 방식과
받는 용도의 소켓을 완성하는 방식에 차이가 있음
소켓 생성함수
#include <sys/socket.h>
int socket(int domain, int type, int protocol);
->성공시 파일 디스크립터, 실패시 -1 반환
소켓 주소정보 할당(ip 와 port번호)
#include <sys/socket.h>
int bind(int sockfd, struct sockaddr *myaddr, socklen_t addrlen);
-> 성공시 0, 실패 시 -1 반환
소켓이 연결이 가능한 상태가 되게 하는 함수
#include <sys/socket.h>
int listen<int sockfd, int backlog);
->성공시 0, 실패시 -1 반환
누군가 데이터의 송수신을 위해 연결 요청을 해오면
다음 함수호출을 통해서 그 요청을 수락함
#include <sys/socket.h>
int accept(int socked, struct sockaddr *addr, socklen_t *addrlen);
->성공시 파일 디스크립터, 실패시 -1 반환
요약
연결요청을 허용하는 소켓생성과정
1단계 소켓생성 socket 함수 호출
2단계 ip주소와 port번호 할당 bind 함수호출
3단계 연결요청 가능상태로 변경 listen 함수호출
4단계 연결요청에 대한 수락 accept 함수호출
(서버 소켓)
연결요청을 수락하는 기능의 프로그램을 지칭함
(전화를 받는)
클라이언트 소켓(전화를 거는)
전화를 거는 기능의 함수
#include <sys/socket.h>
int connect(int sockfd, struct sockaddr *serv_addr, socklen_t addrlen);
->성공시 0, 실패 시 -1 반환
클라이언트 프로그램은
소켓의 생성(socket 함수호출)과 서버로 연결요청(connect 함수호출) 과정만 존재한다.
파일디스크립터
- 운영체제가 만든 파일또는 소켓의 지칭을 편히 하기 위해서
숫자를 부여한것
2.xxx
Trackback 0 And
Comment 0
http://unity3d.com/gallery/demos/demo-projects
'잡다한것들전부 > 팁' 카테고리의 다른 글
| 유니티 모노디벨롭 배경색깔 변경하기. (0) | 2014.01.01 |
|---|---|
| 유니티 최적화팁 transform 사용시 (0) | 2014.01.01 |
| 유니티 공식 사이트 데모 프로젝트 (0) | 2013.12.31 |
| RacaseHit 사용시 디버그 (0) | 2013.12.29 |
| 유니티 오브젝트 풀 기법 (0) | 2013.12.29 |
| 유니티 2d - 동영상 (0) | 2013.12.21 |
Trackback 0 And
Comment 0
// Declare delegate -- defines required signature: delegate double MathAction(double num); class DelegateTest { // Regular method that matches signature: static double Double(double input) { return input * 2; } static void Main() { // Instantiate delegate with named method: MathAction ma = Double; // Invoke delegate ma: double multByTwo = ma(4.5); Console.WriteLine("multByTwo: {0}", multByTwo); // Instantiate delegate with anonymous method: MathAction ma2 = delegate(double input) { return input * input; }; double square = ma2(5); Console.WriteLine("square: {0}", square); // Instantiate delegate with lambda expression MathAction ma3 = s => s * s * s; double cube = ma3(4.375); Console.WriteLine("cube: {0}", cube); } // Output: // multByTwo: 9 // square: 25 // cube: 83.740234375 }
'잡다한것들전부 > C#' 카테고리의 다른 글
| 유니티 c# RayCast 디버그 방법(눈으로 디버그라인을 그리는방법) (0) | 2014.01.19 |
|---|---|
| [펌]C# 델리게이트 및 이벤트 함수 (1) | 2014.01.13 |
| [queue] Queue 관련 함수 (Dequeue, Enqueue, Peek) (0) | 2014.01.12 |
| C# 동영상 강의 모은 곳 사이트 주소 (0) | 2014.01.04 |
| c# delegate (0) | 2013.12.30 |
| c# 제네릭 (0) | 2013.12.30 |
Trackback 0 And
Comment 0
뇌를 자극하는 c#
inside C# - 무료로 공개
C# in Depth
뇌를 자극하는 C# 4.0 프로그래밍,
이펙티브 C#,
Head First C#,
C# and the .NET 4 Platform
'보고싶은책' 카테고리의 다른 글
| c# 책 (0) | 2014.01.06 |
|---|---|
| Unity 3.x Game Development Essentials 한국어판 C#과 자바스크립트로 하는 유니티 3.x 게임 개발 (0) | 2014.01.04 |
| c# 책 (0) | 2013.12.30 |
| 유니티 책 (0) | 2013.12.11 |
| 유니티 서적 (0) | 2013.12.11 |
| 유니티 중급 이상 책 (0) | 2013.12.11 |
Trackback 0 And
Comment 0
//add 131227 - 게임 종료시 팝업
private void exitGameDialog()
{
new AlertDialog.Builder(this.mActivity.get())
.setIcon(android.R.drawable.ic_dialog_alert)
.setTitle("게임종료 팝업") // 제목부분 텍스트
.setMessage("게임을 종료 하시겠습니까?") // 내용부분 텍스트
.setPositiveButton("예",
new DialogInterface.OnClickListener()
{
@Override
public void onClick( DialogInterface dialog, int which )
{
//프로그램 종료
android.os.Process.killProcess(android.os.Process.myPid());
}
}
).setNegativeButton("아니오", null ).show(); //취소버튼을 눌렀을때..
}
'잡다한것들전부 > 안드로이드' 카테고리의 다른 글
| adb 패스 설정 (0) | 2014.01.07 |
|---|---|
| 안드로이드 동적 생성 view button progressbar 등 (0) | 2014.01.06 |
| 뒤로가기 버튼 클릭시 종료 팝업후 종료 하기 (0) | 2013.12.30 |
| INSTALL_FAILED_INSUFFICIENT_STORAGE 오류시 (0) | 2013.12.30 |
| Installation error: INSTALL_FAILED_INSUFFICIENT_STORAGE (0) | 2013.12.16 |
| 프로젝트 오른쪽클릭 ->안드로이드툴->Fix 클릭 하시면되용 (0) | 2013.12.16 |
Trackback 0 And
Comment 0
c++의 템플릿과 유사한 것
// Declare the generic class. public class GenericList<T> { void Add(T input) { } } class TestGenericList { private class ExampleClass { } static void Main() { // Declare a list of type int. GenericList<int> list1 = new GenericList<int>(); // Declare a list of type string. GenericList<string> list2 = new GenericList<string>(); // Declare a list of type ExampleClass. GenericList<ExampleClass> list3 = new GenericList<ExampleClass>(); } }
'잡다한것들전부 > C#' 카테고리의 다른 글
| 유니티 c# RayCast 디버그 방법(눈으로 디버그라인을 그리는방법) (0) | 2014.01.19 |
|---|---|
| [펌]C# 델리게이트 및 이벤트 함수 (1) | 2014.01.13 |
| [queue] Queue 관련 함수 (Dequeue, Enqueue, Peek) (0) | 2014.01.12 |
| C# 동영상 강의 모은 곳 사이트 주소 (0) | 2014.01.04 |
| c# delegate (0) | 2013.12.30 |
| c# 제네릭 (0) | 2013.12.30 |
Trackback 0 And
Comment 0
android:installLocation="preferExternal"
메모리 공간이 부족해서 나는 오류이므로
manifest 에 추가
'잡다한것들전부 > 안드로이드' 카테고리의 다른 글
| 안드로이드 동적 생성 view button progressbar 등 (0) | 2014.01.06 |
|---|---|
| 뒤로가기 버튼 클릭시 종료 팝업후 종료 하기 (0) | 2013.12.30 |
| INSTALL_FAILED_INSUFFICIENT_STORAGE 오류시 (0) | 2013.12.30 |
| Installation error: INSTALL_FAILED_INSUFFICIENT_STORAGE (0) | 2013.12.16 |
| 프로젝트 오른쪽클릭 ->안드로이드툴->Fix 클릭 하시면되용 (0) | 2013.12.16 |
| gcm 예제 (0) | 2013.12.06 |
Trackback 0 And
Comment 0


