PIPE & SOCKET 이란?
본 자료는 6페이지 의 미리보기를 제공합니다. 이미지를 클릭하여 주세요.
닫기
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
해당 자료는 6페이지 까지만 미리보기를 제공합니다.
6페이지 이후부터 다운로드 후 확인할 수 있습니다.

소개글

PIPE & SOCKET 이란?에 대한 보고서 자료입니다.

목차

* UNIX system에서 pipe, socket 이란 무엇인가?
* 그 application이란 무엇인가?

1. UNIX system 에서의 pipe
1) 파이프의 정의
2) 명령어 수준에서의 파이프
3) 예제
2. UNIX system 에서의 socket
1) socket의 정의
2) 연결의 유형
3) 주소지정
4) socket 인터페이스
5) 트랜스 포트 엔드 포인트의 생성

본문내용

cket call failed");
exit (1);
}
/* 소켓을 서버의 주소에 연결한다 */
if ( connect(sockfd, (struct sockaddr *) &server, SIZE) == -1)
{
perror ("connect call failed");
exit (1);
}
/* 서버와 정보를 보내고 받는다. */
for (rc ='\n';;)
{
if (rc =='\n')
printf ("Input a lower case character\n");
c = getchar();
send (sockfd, &c, 1, 0);
if (recv(sockfd, &rc, 1, 0)>0)
printf ("%c", rc);
else
{
printf ("server has died\n");
close (sockfd);
exit (1);
}
}
}
1) 무연결 지향 모델의 프로그래밍
- 무연결 모드에서는 클라이언트와 서버 사이에 전송되는 패킷들이 그 목적지에 불확실한 순서로 도착한다
* 메시지를 주고 받기
- 무연결 모델을 위해 추가되는 새로운 시스템 호출들은 sendto와 recvfrom이다.
ssize_t recvfrom (int sockfd, void *message, size_t Length,
int flags , stiuct sockaddr *send_addr,
size_t *add_len);
ssize_t sendto(int sockfd, const void *message, size_t length, int
flags, const stluct sockaddr *dest_addr, size_t
dest ten) ;
recvfrom 호출
- sockfd : 지역적으로 바인드되어 있는 소켓을 지정
- message 포인터 : 수신된 메시지를 넣어둘 버퍼이고, length는 메시지로 읽혀질 바이트 수
- flags : recv 호출에서와 동일한 값
- send_addr 구조 : 메시지를 보낸 기계의 주소 정보
- 마지막인수 : size_t 정수에 대한 포인터로, 호출이 끝나면, 주소의 길이로 채워질 것이다.
sendto 호출
- recvfrom의 반대이다.
- dest_addr 인수는 메시지가 보내어 질 기계의 주소를 보관한 구조체를 지정
- dest_len은 주소길이 지정
1) 무연결 지향 모델의 프로그래밍의 예
/* 서버 */
#include
#include
#include
#include
#define SIZE sizeof (struct sockaddr_in)
main()
{
int sockfd;
char c;
/* 서버의 로컬 포트 *?
struct sockaddr_in server = {AF_INET, 7000, INADDR_ANY};
/* 프로세스의 주소를 넣을 구조 */
struct sockaddr_in client;
int client_len = SIZE;
/* 트랜스포트 엔드 포인트를 구축 */
if ( (sockfd = socket (AF_INET, SOCK_DGRAM, 0)) == -1)
{
perror ("socket call failed");
exit (1);
}
/* 로컬 주소를 엔드 포인트에 바인드한다 */
if ( bind(sockfd, (struct sockaddr *) &server, SIZE)== -1)
{ perror ("bind call failed");
exit (1);
}
/* 메시지를 기다리며 계속 루프에서 기다린다. */
for( ; ;)
{
/* 메시지를 받고, 클라이언트의 주소를 저장한다. */
if (recvfrom(sockfd, &c, 1, 0,
&client, &client_len)== -1)
{
perror ("server: receiving");
continue;
}
c = toupper(c);
/* 메시지를 원래 출발지로 되돌려 보낸다. */
if ( sendto(sockfd, &c, 1, 0, &client, client_len) == -1)
{
perror ("server: sending");
continue;
}
}
}
그리고 클라이언트:
/* 클라이언트 프로세스 */
#include
#include
#include
#include
#define SIZE sizeof (struct sockaddr_in)
main()
{
int sockfd;
char c;
/* 클라이언트상의 로컬 포트 */
struct sockaddr_in client = {AF_INET, INADDR_ANY, INADDR_ANY};
/* 서버의 원격 주소 */
struct sockaddr_in server = {AF_INET, 7000};
/* 서버의 IP 주소를 변환하여 저장한다. */
server.sin_addr.s_addr = inet_addr("197.45.10.2");
/* 트랜스포트 엔드 포인트를 구축한다. */
if ( (sockfd = socket(AF_INET, SOCK_DGRAM, 0)) == -1)
{
perror ("socket call failed");
exit (1);
}
/* 엔드 포인트에 로컬 주소를 바인드한다. */
if ( bind(sockfd, (struct sockaddr *) &client, SIZE) == -1)
{
perror ("bind call failed");
exit (1);
}
/* 키보드로부터 한 문자를 읽는다. */
while ( read(0, &c, 1) != 0)
{
/* 그 문자를 서버에게 보낸다 */
if ( sendto (sockfd, &c, 1, 0, &server, SIZE) == -1)
{
perror ("client: sending");
continue;
}
/* 메시지를 되돌려 받는다 */
if (recv(sockfd, &c, 1, 0)== -1)
{
perror ("client: receiving");
continue;
}
write (1, &c, 1);
}
}
  • 가격1,500
  • 페이지수18페이지
  • 등록일2003.12.23
  • 저작시기2003.12
  • 파일형식한글(hwp)
  • 자료번호#240209
본 자료는 최근 2주간 다운받은 회원이 없습니다.
청소해
다운로드 장바구니