소켓 프로그램에서 송수신으로 가장 많이 사용되는 것은 recv,send 와 recvfrom, sendto 일 것이다. 전자를 TCP 용 후자를 UDP 용으로 흔히 알고 사용하는데, 그 이유는 연결지향형이 아닌 경우 매 패킷마다 주소지가 다른 데이터가 올라 올 수 있기 때문에 주소를 받거나 보낼 수 있는 시스템 콜을 사용하게 된다. UDP의 경우 기대되는 데이터의 흐름은 다음과 같다. 서버 1. UDP 서버가 대기 2. 패킷 및 클라이언트 주소 수신 3. 클라이언트 주소로 응답 송신 클라이언트 1. 서버주소 및 요구사항 송신 2. 패킷 및 서버 주소 수신 여기서 주의할 점이 클라이언트가 데이터를 송신하고서 recvfrom 으로 대기하고 있다면, 서버가 아닌 다른 누군가가 패킷을 쏜다면 (이것은 네트웍 중간..
TCP/IP 서버를 만들때는 다음과 같은 방법으로 만들게 된다. 1. 소켓 생성 2. bind 3. listen 4. accept 로 클라이언트 소켓 생성 소켓 프로그램을 처음하는 사람들이 겪게 되는 의문 중의 하나는 무엇에다가 묶고(bind), 듣기전까지는 어떤 일이 일어나길래 들어야(listen)하는가인데, 여기에는 발상의 전환이 필요하다. 일반적으로 파일을 열고 파일에서 읽는 과정을 생각해보면, 이미 경로라는 구별되어 있는 개체가 존재하고 그것을 다루기 위한 기술자(descriptor)를 만들어 기술자를 모든 파일 관련 입출력 함수에 인자로 넘기게 되는데, 소켓 프로그램은 그 반대라는 것이 중요하다. 기술자(socket)를 먼저 만들고, 그 기술자를 구별될 수 있는 경로 혹은 주소에 가져다가 붙이는..
http://bbs.kldp.org/viewtopic.php?t=768 여기에 썼던글이다. (drupal로 이관하면서 이관된 문서를 찾으려 했으나 역부족.) 본 글은 IP 주소를 얻는 방법에 대해 쓴 것이 아니라, 그 이면에 있는 드라이버와의 통신에 대해 다룬다.#include #include #include #include #include #include #include #include #include #include #if defined(sun) #include #endif #include #if defined(linux) #include #endif #define BUFFERSIZE 1024 const char * localip = "0.0.0.0"; const char * myip() { cons..
소켓프로그래밍 깊이 보기 1 : 접속이 닫힌 후 읽을 수 있는 버퍼Quiz 하나를 생각해보자.클라이언트가 서버에 접속하여 뭔가를 전송하고 있다. 클라이언트는 1000 바이트를 전송하고나서 바로 소켓을 종료하였는데, 서버는 1 byte 씩 읽으면서 행의 끝을 판단하는 구조로 되어 있다. 서버가 10 바이트를 읽었는데, 실상 접속은 종료되었다. 서버쪽 프로그램은 11 바이트를 읽을 때, 접속 종료를 바로 알 수 있을까? 싱겁지만, 답은 서버쪽에서 1001번째를 읽기 시도할 때 비로소 안다는 것이다. 그 이유는 TCP는 데이터의 정확한(?) 전송을 보장하도록 되어 있기 때문인데, 끊어진 클라이언트에게 일단 1000 바이트에 대해 받았다는 신호를 보냈기 때문에, 서버 프로그램에 안정적으로 데이터를 올려 보낸후 ..
- Total
- Today
- Yesterday
- url
- 커피
- 퀴즈
- 수선화
- OpenID
- VIM
- ssh
- Tattertools plugin
- MySQL
- 클레로덴드럼
- BlogAPI
- 식물
- SVN
- 오픈소스
- SSO
- 덴드롱
- perl
- 대화
- 디버깅
- 벤자민
- nodejs
- TCP/IP
- macosx
- writely
- Subversion
- 킹벤자민
- Linux
- tattertools
- JavaScript
- 구근
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |