Busan IT/공장내 Network2015. 7. 24. 17:35

================================ Outline ====================================

Three-way Handshake

fork 함수

execl 함수

----------------------------------------------------------------------------

 

Three-way Handshake

 

 

서로 SYNC번호를 주고 받음으로써 serverclient의 통신 여부를 확인하는 절차다. client에서 SYNC번호를 보내면 server에서는 SYNC 번호를 확인하고 자신의 SYNC번호도 client에게 보내게 된다. SYNC번호를 확인했다는 뜻으로 전송 받은 SYNC번호에 1을 더하여 ACK번호로 client에게 보내게 된다. Clientserver에게 보낸 SYNC번호를 확인했다는 뜻으로 SYNC번호에 1을 더한 것을 ACK로 보내면 통신이 연결되게 된다.

 

 

connectaccept에서 일어난다.

 

 

연결 종료 시에는 serverFIN flagset을 입력하여 전송하고 client가 이를 받고난 후 FIN flagset를 시켜 다시 서버에게 전송하게 된다.

close에서 일어난다.

 

 

 

채팅 프로그램을 계속해서 만들어보자.

 

채팅 시 clientserver가 작성 중이라도 상대방이 전송한 내용을 읽어 들여야 하기 때문에 이를 해결 위해 스레드 혹은 멀티 프로세스를 사용해야 한다.

 

교재 p/227 ch.10 멀티 프로세스 소켓 프로그래밍

 

//프로젝트를 실행할 때 단위테스트(새롭게 사용하는 함수, 실행단위)를 거치고 난 후 테스트가 성공해야 코딩을 지속한다.

 

fork 함수

 

fork함수를 테스트해보자.

 

 

 

 

/*** 소스 ***/

#include <unistd.h>
#include <stdio.h>
#include <errno.h>

int main(void)
{
  int iNum;
   iNum = fork();  //multy process init

  if(0 >  iNum)
  {
    perror("fork::");
    return -1;
  }
  else if(0 == iNum)
  {
    printf("Child Process\n");
    getchar();
    printf("Child About to abort\n");
  }
  else
  {
    printf("Parent Process ID[%d]\n", iNum);
    getchar();
    printf("Parent About to abort\n");

  }

  return 0;
}  

 

fork함수의 속성

 

- 지역 변수 값 및 전역 변수 값은 복사된다.

- 소켓을 포함한 모든 열린 파일의 파일 지정번호가 복사된다.

- 부모프로세스나 자식프로세스가 중 하나가 종료 되었을 때 남은 프로세스에게 신호(signal)을 보낸다.

 

 

execl 함수

 

execl 함수는 외부 프로그램을 멀티 프로세스를 통해 실행시켜주는 함수이다.

 

/*** 소스 ***/

#include <stdio.h>
#include <unistd.h>
#include <string.h>

int main(void)
{
  printf("--------start--------\n");
  execl("/bin/ls""ls", NULL);
  printf("---------end---------\n");



  return;

}

 


반응형

'Busan IT > 공장내 Network' 카테고리의 다른 글

IPC(3)  (0) 2015.08.10
채팅 멀티프로세스  (0) 2015.07.28
TCP analyzer  (0) 2015.07.22
TCP analyzer(진행 중)  (0) 2015.07.17
TCP 추출(진행중)  (0) 2015.07.16
Posted by newind2000