'웹관련'에 해당되는 글 13건

  1. 2013.12.31 윈도우 소켓
  2. 2013.12.31 소켓
  3. 2013.10.09 자바스크립트 string format

윈도우 소켓

|

윈도우 소켓


윈속 초기화

#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);
}





'웹관련' 카테고리의 다른 글

br 태그.  (0) 2014.12.23
주소체계와 데이터 정렬  (0) 2013.12.31
프로토콜  (0) 2013.12.31
윈도우 소켓  (0) 2013.12.31
소켓  (0) 2013.12.31
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


'웹관련' 카테고리의 다른 글

br 태그.  (0) 2014.12.23
주소체계와 데이터 정렬  (0) 2013.12.31
프로토콜  (0) 2013.12.31
윈도우 소켓  (0) 2013.12.31
소켓  (0) 2013.12.31
Trackback 0 And Comment 0

자바스크립트 string format

|

유니티 사용중 String.format 사용

기본적으로 제공되는 함수는 아님

유니티 내에서는 c#의 String 을 구현한듯

http://docs.unity3d.com/Documentation/ScriptReference/String.html

 

이런식으로 사용

var s : String = "hello";

s = String.Format("{0} {1}", s, "world");

 

 

 

'웹관련 > 자바스크립트' 카테고리의 다른 글

connect errorHandler  (0) 2015.02.18
connect query  (0) 2015.02.18
자바스크립트 string format  (0) 2013.10.09
Trackback 0 And Comment 0
prev | 1 | 2 | next