- favicon.ico Generator
- Ferry Halim
- interfaceLIFT
- 클리앙
- 쿨엔조이
- 플레이웨어즈
- 윈도우포럼
- 보드나라
- i-funbox
- firefox
- chris jordan
- 매니캠
- 웹캠
- 아이팟mp3뽑기
- star cd key
- kbs포토뱅크
- Vimeo
- 4shared
- snoopybox
- 인터넷라디오
- RaySoda
- 더어플 :: 내 손안에 작은세상
- love:paradox
- 룩포박스
- 월간잉여
- 디지의 수상한 공작소
- 일본
- SLRCLUB
- 차도녀의 싱글라이프
- Serepim의 코믹 스페이스
- Freemake
- NBA Mania
- 게티이미지뱅크
- 알바정리
- 팝코넷
- 기글하드웨어
- cj더키친
- Fantastic Typoon
- 한국관광공사
- 3uTools
- 브릭캠퍼스
- 다인의 편의점 이것저것
- foobar2000
- Wallpaper
- simplehuman
- 퀘이사존
- SoundCloud
- 예판넷
- 올파츠
- 퀘이사존
- 비플릭스
- 엔공구
- 마베르만
- 오토브라이트 다이렉트
- 토에이 온라인 스토어
- Road Trail Run
- Apple System Status
- 쿼라
- 슈프라이즈 - 스니커즈 발매정보
- 풋셀 커뮤니티
- 럭키드로우
- 통관알리미
- Tears of the Kingdom MAP
- Tears of the Kingdom MAP 2
- SWITCH WORLD
- dprime
- 데일리슬슬
- 핫썰
- 핫딜
- 번코 - 세상의 모든 자막
- 에펨코리아
- MY FREE MP3
- 영s의 브런치스토리
- 메타크리틱
- 오픈크리틱
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- u2
- UK B-Boy Championships
- 섬머소닉 2차
- 펜타포트
- 존프루시안테
- 티스토리 초대장/ 티스토리초대
- V60 CC
- 섬머소닉
- U2내한공연
- 윤종신
- 밸리록
- 개봉기
- 키스 플린트
- 지산락페
- 청주
- 행보
- 정보처리산업기사
- 마재윤
- 스타크래프트2
- 티스토리초대
- 티스토리 초대장
- 비보이
- V60 크로스커트리
- 키스플린트
- 윈도우7
- 살라
- 진중권 블로그 100분토론 디워
- 율량
- DDT4ALL
- 김사랑
- Today
- Total
알고리즘
tcp/ip 본문
다중 접속 서버 구현방법
1. 프로세스 생성을 통한 멀티태스킹서버
2. SELECT함수에 의한 멀티플렉싱 서버
3. 쓰레드를 기반으로 하는 멀티쓰레딩 서버
1번방법은 10장 11장에서 보았다.
12장은 2번방법.
1번과 2번 방법의 차이는 다음과 같다.
//fd_set설정
FD_ZERO(&reads);
FD_SET(hServSock,&reads);
while(1)
{
temps = reads; //select호출후 0으로 초기화 되므로 이렇게 해주어야 한다.
timeout.tv_sec = 5; //select호출후 남은시간으로 변경되므로 이렇게 해주어야 한다.
timeout.tv_usec = 0;
if( select(0,&temps,0,0,&timeout)==SOCKET_ERROR ) //temps에 수신데이타가 있는지 관찰하겠다.
ErrorHandling("select() error");
for(arrIndex=0;arrIndex<reads.fd_count;arrIndex++) //reads.fd_count는 계속 바뀔것이다.
{
if(FD_ISSET(reads.fd_array[arrIndex],&temps)) //변화가 생긴 소켓이 있는가.
{
if(reads.fd_array[arrIndex]==hServSock) //변화가 생긴 소켓이 연결요청인경우
{
clntLen = sizeof(clntAddr);
hClntSock = accept(hServSock,(SOCKADDR*)&clntAddr,&clntLen);
FD_SET(hClntSock,&reads); //연결요청을 받아들이고 fd_set에 추가
printf("클라이언트 연결 : 소켓핸들 : %d \n",hClntSock);
}
else
{
strLen = recv(reads.fd_array[arrIndex],message,1024,0);
if(strLen==0)
{
closesocket(temps.fd_array[arrIndex]);
printf("클라이언트 종료 : 소켓핸들 : %d\n",reads.fd_array[arrIndex]);
FD_CLR(reads.fd_array[arrIndex],&reads); //연결종료이면 fd_set에서 삭제
}
else
{
send(reads.fd_array[arrIndex],message,strLen,0);
}
}
}
}
}
'study > programming' 카테고리의 다른 글
c (0) | 2007.11.12 |
---|---|
07.11.04 정보처리산업기사 합격수기 (0) | 2007.11.11 |
c (0) | 2007.11.10 |
반복문 9월 17일 (0) | 2007.09.17 |
dd (0) | 2007.09.13 |