네트워크/vmware 실습

6월 14일 vm 기본 telnet과 채팅하기

송시혁 2013. 6. 14. 09:30



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