일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- ajax
- 자동완성기능
- prototype
- ORA-00942
- ASP.NET 방명록
- ASP.NET
- JavaScript
- Repeater
- Oracle 10g
- 객체생성
- 스크립트릿
- ASP.NET Error
- Ajax한글 처리문제
- json
- JDK1.5
- 페이지 간 게시
- 테이블또는 뷰가 존재하지 않습니다.
- Ajax댓글
- ASP.NET 회원가입
- hyperlink 쿼리스트링 바인딩
- 우편번호검색
- DataList컨트롤
- 웹표준
- RowCount 폐이징
- 이벤트 처리
- prototype.js
- jsp
- 자바스윙
- SQL 명령어가 올바르게 종료되지 않았습니다.
- XML
- Today
- Total
IT 쟁이
소켓통신 본문
socket 함수 - 소켓지정자 socket
#include <sys / types.h>
#include <sys/socket.h>
int socket(int domain, int type, int protocol)
int domain - 통신도메인을 지정하는 인자
각 도메인은 프로토콜 패밀리로 정의되고 있다.
주로 PF_INET 혹은 AF_INET 사용한다. 인터넷 프로토콜
int type - 소켓의 형태 . 소켓의 연결 형식을 정의한다.
PF_INET의 경우, 가장 많이 사용하는 소켓 연결형식에는 SOCK_STREAM, SOCK_DGRAM, SOCK_RAW가 있다.
SOCK_STREAM 은 TCP/IP 인터넷 프로토콜에서 TCP를 통해서 전송되는 신뢰성 있는 연결을 의미한다.
int protoco - 프로토콜 - IPPROTO_TCP
socket 함수는 인자 값을 받아 소켓을 생성한 후에 해당 소켓의 지정자를 반환한다. 그리고 오류가 발생한 경우에 는 소켓 지정자에 0 보다 작은 값을 반환하고 성공한 경우에는 소켓에 할당된 경우인 소켓 지정자를 반환한다.
struct sockaddr_in server_addr은 INET 인터넷 프로토콜의 헤더를 구성하는 구조체이다.
......
struct sockaddr_in {
sa_family_t sin_family; //주소패밀리
unsigned short int sin_port; //포트번호
struct in_addr sin_addr; //IP주소
...
}
server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
server_addr.sin_port = htons(3317);
inet_addr함수
이진 바이너리 형식의 IP 주소 inet_addr (문자 형식의 IP 주소)
#include <sys/type.h>
#include <netinet/in.h>
unsigned long int inet_addr(const char *cp);
htons 함수 - 네트워크 바이트 오더가 적용된 이진 바이너리 16비트 값 htons (16비트 변수 값)
#include <netinet/in.h>
uint16_t htons(uint16_t hostshort)
해당 포트의 값을 넣을 때 네트워크 바이트 오더를 맞춰주는 htons함수를 사용.
// 지정한 주소로 접속
if(connect(ssock, (struct sockaddr *)&server_addr, clen) < 0)
{
perror("connect error: ");
exit(1);
}
connect 함수 - 리턴값 connect (소켓 디스크립션, 서버의 IP주소와 포트번호, 길이)
소켓연결을 시작한다. 생성된 소켓과 서버의 정보를 이용해서 해당 서버에 연결한 후 결과 값을 리턴한다. 0이면 성공, -1이면 실패를 의미한다.
#include <sys/type.h>
#include <sys/socket.h>
int connect(int sockfd, const struct sockaddr *serv_addr, socklen_t addrlen);
read함수 데이터를 수신한 후 buf에 데이터를 넣어준다. 우리는 buf의 내용을 화면에 출력해서 데이터를 확인할 수 있다.
read 함수 - 읽은 값의 길이 read (파일 디스크립터, 읽은 데이터를 저장할 버퍼, 읽을 데이터 최대길이)
지정된파일 디스크립터에서 데이터르 읽어서 지정된 버퍼에 데이터를 넣은 후 읽은 데이터의 길이를 반환한다. 오류가 발생하면 -1을 반환한다.
네트워크 프로그래밍에서는 파일디스크립터가 소켓 디스크립터이다. 소켓 디스크립터는 socket 함수가 반환하는 소켓의 번호를 의미하며 우리는 이것을 소켓 지정자라 한다.
#include <unistd.h>
ssize_t rread(int fd, void *buf, size_t count)
close 함수 - 성공 여부 반환 close(파일 디스크립터)
close 함수는 파일 디스크립터를 닫는다. 닫힌 파일 디스크립터는 더 이상 참조되거나 사용될 수 없다. 닫기에 성공하면 0을 반환하고 오류가 발생하면 -1을 반환한다.
파일디스크립터 == 소켓 디스크립터이다.
#include <unistd.h>
int close(int fd)
출처 - 한빛미디어 TCP/IP 소켓 프로그래밍