fd_set= 자료형, 구조체
FD_ZERO= 전부 0으로 채우는 함수, 인자로 fd_set형 변수의 주소를 인자로 넣는다.
FD_SET= 한 바이트씩 1로 채우는 함수
FD_ISSET= 특정자리에 한 바이트씩 1인지 0인지 확인하는 함수
FD_CLR= 한 바이트(128)을 0으로 채우는 함수
client 부분.
FD_SET= 한 바이트씩 1로 채우는 함수로서 첫 번째 인자 0은 fd_status의 첫 번째 비트부분이다.
첫 번째 부분에 두 번째 인자인 fd_status의 주소를 넣으며, 0에 해당한는 비트의 1을 넣는다.
그리고 아래에 FD_SET()함수에 첫 번째 인자의 소켓번호를 넣는다.
select()함수
첫 번째 인자인 n은 전체 128비트중에서 검색하는 대상을 몇개로 할 것인지 지정하는 것. 여기서는 1번만 검색.
100을 입력하면, 100번을 검색하고, 128을 넣으면, 전체 검색을 한다. 당연히 음수나 0으로하면, 검색이 안된다.
에러 메시지를 출력한다.
두 번째, 세 번째 인자는 readfds/writefds이다. 당연히 readfds는 fd_set형 구조체 변수의 데이터를 읽을 수 있는지 확인하는것, 세 번째는 반대로 데이터를 전송하거나, 저장할 수 있는지 여부를 확인한다.
네 번째 예외처리부분이다.(나중에 설명, 배우지 않음)(
다섯 번째 시간설정, 보통 0으로 한다.마찬가지로 배우지 않아 나중에 설명예정.
FD_ISSET()함수에서 0번자리에 1이 들어가있는지 확인하고 1이 맞으면, if문 조건을 만족하여
read()함수와 write()함수를 호출한다.
read()함수에서 키보드를 입력받아 버퍼에 저장한다.
write()함수에서 sock으로 버퍼에 있는 것을 넣어 보낸다.
else if문에서 다시 select()함수를 넣는다.
그리고 서버에서 전송한 데이터를 read함수로 읽는다.
그리고 아래에 write()함수에서 버퍼에 있는 데이터를 화면에 출력한다. iRet-1은
'\n'을 출력치 않기 위해서???
server부분
위에 if문 조건까지는 동일하다.
read()함수에서 클라이언트에서 받은 데이터를 읽는다.
그리고 그것을 화면에 출력한다. write()함수부분, 그리고 마찬가지로 else if문에 의해
read()함수로 키보드로 입력받아 write()함수를 써서 클라이언트로 전송한다.이렇게 같은 포트에
쌍방향 채팅이 가능해진다.
다음은 실행결과
서버에서의 화면.
클라이언트에서의 화면
'네트워크 > vmware 실습' 카테고리의 다른 글
6월 20일 VM을 이용한 1:다수 채팅 프로그램 (0) | 2013.06.20 |
---|---|
6월 19일 1:2채팅 프로그램(수정중) (0) | 2013.06.19 |
6월 17일 클라이언트 (0) | 2013.06.17 |
6월 14일 vm 기본 telnet과 채팅하기 (0) | 2013.06.14 |
6월 12일 리눅스 기본1 (0) | 2013.06.12 |