'웹관련'에 해당되는 글 13건
- 2013.12.31 윈도우 소켓
- 2013.12.31 소켓
- 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);
}
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
유니티 사용중 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


