6월 14일 vm 기본 telnet과 채팅하기
int servSock, clntSock
servSock= 파일번호
int= read/write반환형
struct sockaddr_in echoServAddr = 신구조체 서버 ip주소
struct sockaddr_in echoClntAddr= 신구조체 클라이언트 ip주소
unsigned int clntLen= 클라이언트
unsigned short echoServPort= 포트 번호 변수(나중에 포트번호는 9999로 설정함, 0~1023은 원래 관리자만 지정가능함)
DOS
= donial of service
Protocol Family = PF_INET, Protocol=어떤계열을 쓸건지 인자, Family=계열
AF= 0으로 정의 되어있다.
-r 은 현재에서 아래까지 모두 검색
PF_INET=AF_INET
INTE= 인터넷 사용
아래함수는 소켓을 생성하는 부분이다.
1.소켓생성
servSock = socket(AF_INET, SOCK_STREAM, IPPORT_TCP);
아래함수는 소켓을 생성하는 부분이다.
servSock = socket(PF_INET, SOCK_STREAM, IPPORT_TCP)//소켓포트
첫 번째 인자에 PF_INET= 프로토콜 방식 결정.
두 번째 인자에 데이터전송방식을 결정.
DGRAM(data gram )= 무조건 데이터 받거나 전송한다. 상관없이 실행한다.
STREAM= 데이터를 확인하면서 전송(일반파일).
IPPORT_TCP= STREAM일 때 사용.
IPPORT_UDP= DGRAM,일 때 사용.
MEMSET = 메모리 셋팅
1바이트씩 특정한 메모리를 다 채워넣는다.
MEMSET(&echoServAddr, 0, sizeof(echoServAddr));
주소(첫번째인자)에 echoServAddr주소(세번째 인자) 크기만큼 0을 채워넣는다. 0을 넣어서 초기화 하는 부분.
2.구조체 설정.
MEMSET = 메모리 셋팅
1바이트씩 특정한 메모리를 다 채워 넣는다.
MEMSET(&echoServAddr, 0, sizeof(echoServAddr));
주소(첫 번째인자)에 echoServAddr주소(세 번째 인자) 크기만큼 0을 채워 넣는다. 0을 넣어서 초기화 하는 부분.
echoServAddr.sin_family= AF_INET;
echoServAddr.sin_addr.s_addr= htonl(INADDR_ANY)//little endian을 big endian으로 바꾼다.
네트워크에서는 big endian을 채택하여 사용하기 때문에 htonl함수에서 INADDR_ANY를 하면, 데이터가 BIG ENDIAN 형태로 된다.
echoServAddr.sin_port= htons(echoServport);// 포트번호 설정
3. bind함수
1.첫 번째 인자는 소켓
2.두 번째 인자는 소켓주소, 여기서 중요한 것은 캐스팅이다. 구형 구조체로 인식해야 하므로, (struct sockaddr *) 캐스팅 해야 한다.
3. 크기
이 bind 함수는 위의 구조체를 설정한 것을 소켓의 넣는 역할을 한다.
그리고 if문에서 종료직전에 반드시 소켓을 닫아준다.
4.listen()함수
Listen()함수는 소켓이 동시에 접속 시 대기한다. 여기서는 5라고 설정했기 때문에 5개까지 기다릴 수 있다. 첫 번째 인자에 소켓을 넣고, 뒤에 두 번째 인자에는 숫자를 넣어주면 끝.
5.accept()
첫 번째 인자에 servSock = 소켓.
두 번째 인자에는 클라이언트 주소를 넣는다. 마찬가지로 구형구조체형으로 캐스팅한다.
클라이언트 주소는 소켓에 들어오는 클라이언트 정보이다.
세 번째 인자에는 클라이언트 크기
이 accept()함수는 소켓에 클라이언트가 올 때까지 기다리는 함수.
클라이언트가 올 때까지 잠시 동안 대기하고 있다.= bloking 함수
Read()함수가 clntsock정보에 들어있는 버퍼를 읽어 들인다.
Write() 클라이언트로부터 전송 받은 데이터를 모니터에 iRet크기(전송 받은 데이터 크기)
만큼 나타낸다. 그리고 다시 입력 받은 데이터를 보내기 위해 두 번째write()함수에서 클라이언트 함수에 보낸다.
그리고 반드시 아래와 같이 close()해야 한다. 이것은 나중에 클라이언트도 동일
bind함수
bind(cj