Network Programming

Size: px
Start display at page:

Download "Network Programming"

Transcription

1 <1> <Network Programming> Part 3 Socket Programming for Content Delivery in Multimedia Networks (Unix 기반 )

2 <2> <Network Programming> 유닉스소켓시스템콜 BSD 소켓 API의소개 IP 주소변환설명 소켓을이용한클라이언트및서버프로그램작성방법소개 유닉스시스템콜 signal() 과 fork() 소개 토크프로그램작성

3 <3> <Network Programming> 소켓의정의 TCP/IP 를이용하는 API 1982 년 BSD(Berkeley Software Distribution) 유닉스 4.1 윈도우소켓 ( 윈속 ), 자바소켓등도 TCP/IP 를이용하기 위한 API 를제공

4 <4> <Network Programming> 소켓 소켓소개 IP 어드레스와포트, 소켓의관계

5 <5> <Network Programming> Socket o UNIX system 을위하여가장많이보급되고있는두가지통신 API - Berkeley socket -C programming language 를위하여개발 o Socket - File I/O 개념을 Network I/O 로확장한것 o Network I/O는 File I/O보다더욱상세하고많은선택사항들을필요로한다. - 망연결을초기화하기위해서프로그램은자신의역할이어떤것인지알아야함. - 망연결은연결지향형또는비연결형이될수있다. - 망연결에필요한매개변수들은 file I/O보다많다. { 규약, 지역주소, 지역프로세스, 상대주소, 상대프로세스 } - 몇몇통신규약에서레코드경계는중요하다. - 망접속은다수의통신규약을지원해야한다.

6 <6> <Network Programming> Socket APIs Function Socket API Message Queue API File IO API Server Create endpoint socket() msgget() open() Bind address Specify queue Wait for connection bind() listen() accept() Client Create endpoint socket() msgget() open() Bind address Connect to server bind() connect() Common Transfer data read(), write() recv(), send() Transfer datagrams recvfrom() sendto() msgrcv() msgsnd() read() write() terminate close(), shutdown() close()

7 <7> <Network Programming> C 언어에서 TCP 소켓프로그램작성 connection-oriented protocol

8 <8> <Network Programming> C 언어에서 UDP 소켓프로그램작성 o connectionless protocol 에대한 socket system calls UDP Server (connectionless protocol) socket() bind() UDP Client recvfrom() socket() blocks until data received from a client data (request) bind() sendto() process request write() data (reply) recvfrom()

9 <9> <Network Programming> Java 에서 TCP 소켓프로그램작성

10 <10> <Network Programming> Java 에서 UDP 소켓프로그램작성 자바 UTP 프로그램작성 (DatagramSocket 이용 )

11 <11> <Network Programming> 소켓번호 소켓개설시리턴되는값 기술자테이블 (descriptor table) 에위치

12 <12> <Network Programming> 소켓번호 (Cont d)

13 <13> <Network Programming> 소켓의구조 (1/3) 소켓시스템콜 #include <sys/socket.h> int socket ( int domain, /* 프로토콜체계 */ int type, /* 서비스타입 */ int protocol ); /* 프로토콜 */ Domain PF_INET / AF_INET PF_INET6 / AF_INET6 PF_UNIX / AF_UNIX PF : Protocol Family, AF: Address Family Sockaddr / sockaddr_in의구조체 Type SOCK_STREAM SOCK_DGRAM SOCK_RAW Protocol 0 ( 자동적으로프로토콜이선택되어진다 )

14 <14> <Network Programming> 소켓의구조 (2/3) 2. Family - 지원하는프로토콜그룹중에서사용하려는소켓이적용될프로토콜을선택

15 <15> <Network Programming> 소켓의구조 (3/3) 3. Type - 연결지향형과비연결형, 저수준프로토콜제어형 - 저수준프로토콜 IP 프로토콜과같은레벨에있는프로토콜을사용시필요 ex) ICMP (Internet Control Message Protocol) TCP/UDP 보다하위계층으로사용이까다로운반면직접적인제어가가능 4. Protocol 여러소켓형태를제공하는경우사용, 기본값은 0

16 <16> <Network Programming> 소켓의타입 1. Stream Socket - 연결지향형 (TCP 기반 ) - 소켓간의연결후데이터전송 - 일상생활의전화개념과유사 2. Datagram Socket - 비연결형 (UDP 기반 ) - 송수신시도착지주소필수 - 일상생활의편지개념과유사 3. Raw Socket - 저수준프로토콜액세스 - ICMP, OSPF 등이사용 - IP 계층이용

17 <17> <Network Programming> 예제 : 소켓생성 open_socket.c 예제 (NetPro/Soc/Util/open_socket.c) int fd1, sd1; fd1 = open( /etc/passwd, O_RDONLY, 0); sd1 = socket(pf_inet, SOCK_STREAM, 0); printf( File Descriptor %d\n, fd1); printf( Socket Descriptor %d\n, sd1); close(fd1); close(sd1); 실행결과 File Descriptor = 3 Socket Descriptor = 4

18 <18> <Network Programming> 소켓의의미 소켓을이용한데이터송수신시필요한정보전달수단 1. 프로토콜 (TCP or UDP) 2. 자신의 IP 주소 3. 자신의포트번호 4. 상대방의 IP 주소 5. 상대방의포트번호 소켓의구조 : Structure of Socket

19 <19> <Network Programming> 소켓구조체 소켓의구조체 (1/5) * 네트워크를통하여다른컴퓨터와통신을하기위해서는위와같은다양한속성의설정이필요하기때문에, 이후등장할여러가지속성간의특징파악이필요

20 <20> <Network Programming> 소켓의구조체 (2/5)

21 <21> <Network Programming> 소켓의구조체 (3/5) 1. sockaddr 구조체 - 기본적인소켓주소구조체 - 호환성을위해존재 - 변수 : 구조체의크기, Family Type, 소켓의주소데이터 2. sockaddr_in 구조체 - IPv4 소켓주소구조체 - 주소를담기위해 in_addr 구조체사용 - 변수 : 구조체의크기, Family Type, 소켓의주소및포트번호 3. sockaddr_un 구조체 - 유닉스소켓주소구조체 - 동일호스트에서의통신이일반 TCP 통신보다두배빠름 - 변수 : 소켓상수, 호스트경로

22 <22> <Network Programming> 소켓의구조체 (4/5) struct sockaddr { u_short sa_family; /* address family */ char sa_data[14]; /* 주소 */ } struct in_addr { u_long s_addr; /* 32bit IP 주소 */ } struct sockaddr_in { short sin_family; /* 주소체계 */ u_short sin_port; /* 16bit 포트번호 */ struct in_addr sin_addr; /* 32bit IP 주소 */ char sin_zero[8]; /* dummy */ }

23 <23> <Network Programming> Unix 내의 Socket Address 관련예 (1/2) o 많은 BSD network system call 은독립변수로서 socket address 구조의지시자를필요로한다. - 이구조의정의는 <sys/socket.h> 에있다. struct sockaddr { u_short sa_family; /* address family: AF_xxx value */ char sa_data[14]; /* up to 14 bytes of protocol-specific address */ }; o 14 byte 의 protocol-specific address 의내용은 address 의 type 에따라서해석 o Internet family 에대하여다음구조가 <netinet/in.h> 에정의 struct in_addr { u_short s_addr; /* 32-bit netid/hostid */ }; struct sockaddr_in { short sin_family; /* AF_INET */ u_short sin_port; /* 16-bit port number */ /* network byte ordered */ struct in_addr sin_addr; /* 32-bit netid/hostid */ /* netowrk byte ordered */ char sin_zero[8]; /* unused */ };

24 <24> <Network Programming> Unix 내의 Socket Address 관련예 (2/2) o <sys/types.h> 에정의된 unsigned data type C Data type 4.3 BSD System V unsigned char unsigned short unsigned int unsigned long u_char u_short u_int u_long unchar ushort uint ulong o Internet, XNS, Unix family 에대한 socket address 구조 struct sockaddr_in family 2-byte port 4-byte net ID, host ID (unused) struct sockaddr_ns family 4-byte net ID 6-byte host ID 2-byte port (unused) struct sockaddr_un family pathname (up to 108 bytes)

25 <25> <Network Programming> 소켓의구조체 (5/5) sockaddr_in 구조체를사용 sockaddr 과의호환성을위해 dummy 삽입 sin_family AF_INET 인터넷주소체계 AF_UNIX 유닉스파일주소체계 AF_NS XEROX 주소체계

26 <26> <Network Programming> 예제 : 소켓구조체사용예 Socket_addr.c 예제 (NetPro/Soc/Util/socket_addr.c) %socket_addr IP_addr Port_no

27 <27> <Network Programming> 유닉스소켓프로그래밍을위한유틸리티함수들 1. 바이트순서변환함수 2. 주소변환구조체 3. 인터넷주소변환함수 4. 원격지호스트정보를얻는함수

28 <28> <Network Programming> 1. 바이트순서변환함수 호스트바이트순서 CPU 에따라메모리에저장하는순서가틀림 네트워크바이트순서 CPU 에관계없이 High-order 순서로전송 Internet protocol 을위하여설계 htonl(), htons(), ntohl(), ntohs() htonl convert host-to-network, long integer htons convert host-to-network, short integer ntohl convert network-to-host, long integer ntohs convert network-to-host, short integer #include <sys/types.h> #include <netinet/in.h> u_long u_short u_long u_short htol(u_long hostlong); htons(u_short hostshort); ntohl(u_long netlong); ntohs(u_short netshort);

29 <29> <Network Programming> 바이트순서 ( 예 ) Big-Endian Little-Endian - 데이터의최상위바이트의내용을저장될메모리의시작주소에저장 - 모토로라마이크로프로세서및 IBM 메인프레임기반 - 데이터의최하위바이트의내용을저장될메모리의시작주소에저장 - DEC VAX 컴퓨터및인텔마이크로프로세서

30 <30> <Network Programming> 바이트순서 ( 예제프로그램 ) byte_order.c 예제 pmyservent = getservbyname("echo", "udp"); printf("port number of 'echo', 'udp' without ntohs() : %d \n", pmyservent->s_port); printf("port number of 'echo', 'udp' with ntohs() : %d \n", ntohs(pmyservent->s_port)); 실행결과 (x86 Linux System) Port number of 'echo', 'udp' without ntohs() : 1792 Port number of 'echo', 'udp' with ntohs() : 7 실행결과 (mc68000 계열 ) Port number of 'echo', 'udp' without ntohs() : 7 Port number of 'echo', 'udp' with ntohs() : 7

31 <31> <Network Programming> 2. 주소변환구조체 - 기본적인 IP 주소체계를도메인주소로변환시사용 A. hostent 구조체 - gethostbyaddr(), gethostbyname() 함수에사용 - 변수 : 호스트의공식명칭, 별칭, 호스트주소의종류, 주소체계의바이트수, 도메인에포함된 IP list B. servent 구조체 - getservbyname(), getservbyport() 함수에사용 - 변수 : 서버의공식명칭, 별칭, 서버가제공하는포트번호, 서버가사용하는프로토콜타입의문자열

32 <32> <Network Programming> 원격지호스트정보를위한구조체 (1) * hostent 구조체

33 <33> <Network Programming> hostent 구조체정의 struct hostent { char *h_name; /* 호스트이름 */ char **h_aliases; /* 호스트별명들 */ int h_addrtype; /* 호스트주소의종류 */ int h_length; /* 주소의크기 */ char **h_addr_list; /* IP 주소리스트 */ }; #define h_addr haddr_list[0] /* 첫번째주소 */

34 <34> <Network Programming> 원격지호스트정보를위한구조체 (2) * servent 구조체

35 <35> <Network Programming> getservbyname() 시스템이현재지원하는 TCP/IP 응용프로그램의정보를알아내는함수로, 서비스이름과프로토콜을인자로주어호출하면서비스관련각종정보를포함하고있는 servent 라는구조체의포인터를리턴한다. pmyservent = getservbyname("echo", "udp"); servent 구조체의정의 (netdb.h 파일참조 ). struct servent { char *s_name; /* 서비스이름 */ char **s_aliases; /* 별명목록 */ int s_port; /* 포트번호 */ char *s_proto; /* 사용하는프로토콜 */ }; servent 구조체는네트워크로부터얻은정보이므로그내용이네트워크바이트순서로되어있고이를화면에출력해보려면호스트바이트순서로바꾸어야한다.

36 <36> <Network Programming> 3. 인터넷주소 (IP 주소 ) 변환 인터넷주소를표현하는방식 도메인네임 32bit IP 주소 십진수표시법 (dotted decimal) IP 주소변환함수예 mm.sookmyung.ac.kr : : Domain Name : IP 주소 (binary) : dotted decimal gethostbyname() inet_ntoa() gethostbyaddr() inet_addr()

37 <37> <Network Programming> 주소변환함수 (Address Conversion Routines)-1 unsigned long int inet_addr (const char * strptr); - Dotted Decimal' 문자열형태의주소 (IP 주소 : 예 ) 를네트워크바이트순서를갖는이진바이너리 (cbfcc910) 로바꾸는함수 - 점으로분리된십진수개념의문자열을 32- 비트 Internet 주소로변환 - 입력값이적절치못할경우 INADDR_NONE('-1') 을반환 - -1 은 Dotted Decimal 로표현시 이므로유효성검사가반드시필요

38 <38> <Network Programming> Address Conversion Routines (2) int inet_aton (const char * strptr, struct in_addr * addrptr); - 'Dotted Decimal' 형태의문자열을바이너리형태로바꾸는함수 - strptr 로들어온 Dotted Decimal' 형태의문자열은변환되어 'in_addr' 타입의 addrptr 에저장됨 - 주소가올바르다면 0 이아닌값, 그렇지않다면 0 을반환 char * inet_ntoa (struct in_addr inaddr); - 'in_addr' 형의바이너리주소 inaddr 을 Dotted Decimal' 형태의문자열 (IP 주소 : 예 ) 로변경 - 반환되는문자열은정적으로할당된버퍼에저장 - 함수의연속적인호출은버퍼를중복하여덮어쓰므로주의 #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> -inet_addr > inet_ntoa : 역변환 unsigned long inet_addr(char *ptr); char *inet_ntoa(struct in_addr inaddr);

39 <39> <Network Programming> 4. 원격지호스트정보를얻는함수 (1) 1. struct hostent * gethostbyname (const char * hostname); - 전달값으로호스트의이름 ( 도메인 ) 을받아서 hostent 구조체에결과값을돌려주는함수 2. struct hostent * gethostbyaddr (const char * addr, size_t len, int family); - 호스트의 IP 주소 ( 바이너리형태의주소 ) 를이용하여해당호스트에대한정보를저장 - addr 은호스트 IP 주소이고 len 은 IP 주소의크기 (IPv4 = 4, IPv6 = 16) 3. int gethostname (char * name, size_t namelen); - 현재의호스트이름을반환 - 전달인자 name 은호스트의이름을저장할곳의주소 - namelen 은 name 의바이트길이 - 성공한경우반환값 0, 실패인경우반환값 -1

40 <40> <Network Programming> 4. 원격지호스트정보를얻는함수 (2) 4. struct servent * getservbyname (const char * servname, const char * protoname); - 해당호스트에서진행되고있는서비스에대한각정보를서비스에대한이름과해당프로토콜로얻을수있게해주는함수 - 수행중에러발생시에는결과값으로 NULL 반환 5. struct servent * getservbyport (int port, const char * protoname); - 해당호스트에서진행되고있는서비스에대한각정보를포트번호로얻을수있게해주는함수 - 수행중에러발생시에는결과값으로 NULL 반환

41 <41> <Network Programming> IP 주소변환 ( 예제 ) ascii_ip.c 예제 struct in_addr host_ip; haddr = argv[1]; /* dotted decimal 주소 */ host_ip.s_addr = inet_addr(haddr); /* IP 주소 (hexa 4byte) 출력 */ printf( IP Address (hexa) 0x%x\n, host_ip.s_addr); /* dotted decimal 로다시변환하여출력 */ printf( %s\n, inet_ntoa(host_ip));

42 <42> <Network Programming> 예제 : IP 주소변환 (nslookup 기능 ) get_hostent.c 예제 struct in_addr host_ip; haddr = argv[1]; /* dotted decimal 주소 */ host_ip.s_addr = inet_addr(haddr); /* IP 주소 (hexa 4byte) 출력 */ printf( IP Address (hexa) 0x%x\n, host_ip.s_addr); /* dotted decimal 로다시변환하여출력 */ printf( %s\n, inet_ntoa(host_ip)); get_hostent.c 실행결과 #> get_hostent mm.sookmyung.ac.kr official host name : mm.sookmyung.ac.kr host address type : 2 length of host address : 4 IP address : dotted decimal => 도메인네임 gethostbyaddr() 이용

43 <43> <Network Programming> 예제 : IP 주소변환 (nslookup 역기능 ) Get_hostname_ by_ipaddr: get_host_byaddr.c #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <netdb.h> int main(int argc, char *argv[]) { char *host; struct hostent *myhost; struct in_addr in; if(argc < 2) { printf(" 사용법 : %s IP 주소 (dotted decimal) \n", argv[0]); exit(0); } /* hostent 구하기 */ host = argv[1]; /* dotted decimal 주소 : IP address 로 String 형태 */ in.s_addr = inet_addr(host); /* 32bit 주소 : hexa decimal 로변환 */ myhost = gethostbyaddr((char *)&(in.s_addr), sizeof(in.s_addr), AF_INET); /* 원하는값 : 도메인이름 */ if (myhost == NULL) { printf("error at gethostbyaddr() \n"); exit(0); } /* 호스트이름출력 */ printf("official host name : %s\n", myhost->h_name); }

44 <44> <Network Programming> Homework Java API 의조사 java.sun.com 사이트내의 API 부분에서 Java.net InetAddress InetSocketAddress 정리

45 <45> <Network Programming> 네트워크프로그래밍을위한함수 1. 시스템호출함수의개요 2. 소켓관련함수 3. 소켓옵션관련함수 4. 동시처리를위한함수

46 <46> <Network Programming> 1. 시스템호출함수의개요 - 시스템콜이란개발의편의를위해운영체제의고유기능을호출하는것 - 동작매커니즘 1. 필요에의해시스템함수호출 2. 제어권한이동 ( 어플리케이션 > 시스템호출인터페이스 > 운영체제 ) 3. 운영체제내부모듈이호출에대한처리를진행 4. 제어권한이동 ( 운영체제 > 시스템호출인터페이스 > 어플리케이션 )

47 <47> <Network Programming> 2. 소켓관련함수 (1/8) 1. 소켓함수를이용한클라이언트 / 서버의구조

48 <48> <Network Programming> o socket system call 2. 소켓관련함수 (2/8) - 원하는통신 protocol(internet TCP, Internet UDP, XNS SPP 등 ) 의 type 을지정 o Syntax int socket (int family, int type, int protocol); #include <sys/types.h> #include <sys/socket.h> o socket system call 1. 네트워크통신을위해사용될새로운소켓생성 2. 파일기술자테이블에새로생성된소켓의인덱스를파일기술자번호로변환 return value : sock 지정번호, sockfd 3. 입력인자 family : 프로토콜의부류입력 AF_UNIX AF_INET AF_NS AF_IMPLINK UNIX internal protocols Internet protocols Xerox NS protocols IMP link layer type : 소켓과함께사용할통신형태입력 protocol : TCP/UDP/RAW 입력, 일반적으로 0 int socket (int family, int type, int protocol); o socket type -SOCK_STREAM -SOCK_DGRAM -SOCK_RAW -SOCK_SEQPACKET -SOCK_RDM stream socket datagram socket raw socket sequenced packet socket reliably delivered message socket (not implemented yet)

49 <49> <Network Programming> Elementary Socket System call o socket family 와 type 에대응하는 protocol AF_UNIX AF_INET AF_NS SOCK_STREAM Yes TCP SPP SOCK_DGRAM Yes UDP IDP SOCK_RAW IP Yes SOCK_SEQPACKET SPP o family, type 그리고 protocol 간의조합 family type protocol Actual protocol AF_INET AF_INET AF_INET AF_INET SOCK_DGRAM SOCK_STREAM SOCK_RAW SOCK_RAW IPPROTO_UDP IPPROTO_TCP IPPROTO_ICMP IPPROTO_RAW UDP TCP ICMP (raw) AF_NS AF_NS AF_NS AF_NS SOCK_STREAM SOCK_SEQPACKET SOCK_RAW SOCK_RAW NSPROTO_SPP NSPROTO_SPP NSPROTO_ERROR NSPROTO_RAW SPP SPP Error protocol (raw) IPPROTO_xxx - <netinet/in.h> NSPROTO_xxx - <netns/ns.h>

50 <50> <Network Programming> Elementary Socket System call( 계속 ) o socket system calls 과연계요소들 connection-oriented server connection-oriented client protocol local-addr, local-process foreign-addr, foreign-process socket() bind() listen(), accept() socket() connect() connectionless server scoket() bind() recvfrom() connectionless client socket() bind() sendto() o socketpair system call - 이름없이연결되어있는 sockvec[0] 과 sockvec[1] 이라는두가지 socket 지정번호를돌려줌 #include <sys/types.h> #include <sys/socket.h> int socketpair (int family, int type, int protocol, int sockvec[2]);

51 <51> <Network Programming> 2. 소켓관련함수 (3/) o bind system call - 이름없는 socket 에이름을부여 - 로컬인터페이스어드레스와포트번호를소켓과서로연관되게묶는함수입니다 o Syntax int bind (int sockfd, struct sockaddr * myaddr, int addrlen); #include <sys/types.h> #include <sys/socket.h> o int bind (int sockfd, struct sockaddr *myaddr, int addrlen); bind 의용도 1. 서버측에서처음생성된소켓이어떤주소값도갖고있지않음 2. server 는주지된주소를시스템에기록한다. 소켓에지역주소및포트 (Well-Known Port) 를할당하여활성화 3. 입력인자 sockfd : socket() 함수호출로얻은소켓의기술자입력 myaddr : 로컬 IP 및포트에대한정보가담긴 sockaddr_in 주소입력 addrlen : sockaddr_in 의크기입력 4. client는자신을위한특정주소를기록할수있다. 5. connectionless client는시스템이자신에게유일한주소를부여하였음을확인할필요가있으며, 이로써상대측 server가응답을보낼유효한반송주소를갖게되는것이다.

52 <52> <Network Programming> Bind 처음만들어질때소켓은그와관련된로컬어드레스를가지지않음. 소켓이 socket 함수를호출해서생성될때, 소켓은이름공간 (name space) 에존재합니다. 하지만, 할당된이름을가지지는않습니다. 그러므로, 이름지여지지않은소켓과로컬어드레스를연결지우기위해서이함수는사용 bind 함수는 connect 나 listen 함수를뒤이어호출하기전에, 접속되지않은소켓에사용 TCP 와 UDP 소켓모두사용 이함수에의해서할당되어지는이름은세가지부분으로구성 주소체계 (address family), 호스트주소 (host address), 어플리케이션에사용되는포트번호 (port number))

53 <53> <Network Programming> 2. 소켓관련함수 (4/8) o listen system call - connection을받아들이겠다는의지를나타내기위하여 connection-oriented server가사용 - socket과 bind system call 후와 accept system call전에수행 o Syntax - int listen (int sockfd, int backlog); #include <sys/types.h> #include <sys/socket.h> int listen (int sockfd, int backlog); 1. 서버측의접속대기큐의최대연결가능수설정 2. 입력인자 1. sockfd : socket() 함수호출로획득한소켓의소켓기술자입력 2. backlog : 접속대기큐의최대연결가능수를지정 (TCP 서버에서만사용 )

54 <54> <Network Programming> 2. 소켓관련함수 (5/8) o accept system call - connection-oriented server 가 listen system call 을수행한후, server 가 accept system call 을수행함으로써어떤 client process 로부터실제적 connection 을기다린다. o Syntax int accept (int sockfd, struct sockaddr * cliaddr, socklen_t * addrlen); #include <sys/types.h> #include <sys/socket.h> int accept (int sockfd, struct sockaddr *peer, int *addrlen); 1. TCP 서버에서호출되고연결이완료된큐의최초에위치한데이터반환 2. 큐가비어있는상태에는클라이언트의접속이이루어질때까지블록됨 3. 정상적으로함수가종료되면새로연결된파일기술자를반환 4. 입력인자 sockfd : listen() 함수호출로설정한소켓의소켓기술자입력 cliaddr : 클라이언트의 IP 주소와로컬포트정도를설정한구조체입력 addrlen : sockaddr 구조체의크기입력

55 <55> <Network Programming> 2. 소켓관련함수 (6/8) o connect system call - local system 과외부 system 사이의실제적인 connection 을설정 o Syntax int connect (int sockfd, const struct sockaddr * servaddr, socklen_t addrlen); #include <sys/types.h> #include <sys/socket.h> int connect (int sockfd, struct sockaddr *servaddr, int addrlen); 1. 클라이언트에서서버로의연결을담당 2. 소켓기술자와상대서버에대한주소정보를바탕으로서버로접속시도 3. 클라이언트에서 connect() 호출전에 bind() 를호출하지않았다고해도임의의포트와로컬 IP 를자동으로설정하여함수호출 4. 3-way handshaking 으로서버와연결을설정함 5. 입력인자 sockfd : socket() 함수호출로저장된소켓의소켓기술자입력 servaddr : 접속할서버의주소와포트에관한정보를담은구조체입력 addrlen : sockaddr 구조체의크기입력

56 <56> <Network Programming> 2. 소켓관련함수 -TCP(7/8) read / write / recv / send 1. ssize_t read (int sockfd, void * buffer, size_t len); - 원하는소켓 (sockfd) 에서특정길이 (len) 만큼을사용자버퍼 (buffer) 로읽어들임 2. ssize_t write (int sockfd, void * buffer, size_t len); - 원하는소켓 (sockfd) 에서특정길이 (len) 만큼을사용자버퍼 (buffer) 로보냄 3. ssize_t recv (int sockfd, void * buffer, size_t len, int flags); - read 함수와동일하나 flags 변수의값에따라데이터수신방법이다름 - flags 옵션 MSG_PEEK : 네트워크버퍼에서데이터제거를하지않고버퍼에복사만함 MSG_OOB : 긴급메시지전달에사용하며 TCP 헤더의 URG bit을 1로변경 MSG_WAITALL : 완전한양의데이터를수신할때만 recv 호출에서복귀 4. ssize_t send (int sockfd, void * buffer, size_t len, int flags); - Write 함수와동일하나 flags 변수의값에따라데이터송신방법이다름 - flags 옵션 MSG_OOB : OOB Data 송신 MSG_DONTROUTE : 데이터를라우팅하지않는다. 즉라우팅조건을무시

57 <57> <Network Programming> 2. 소켓관련함수 -UDP(8/8) sendto / recvfrom ssize_t recvfrom (int sockfd, void * message, size_t len, int flags, struct sockaddr * send_addr, size_t * add_len); ssize_t sendto (int sockfd, void * message, size_t len, int flags, const struct sockaddr * dest_addr, size_t dest_len); - 두함수도데이터송수신을담당하지만 recvfrom( 수신 ) 과 sendto( 송신 ) 함수는 UDP 통신에서사용 - recv/send와의차이점은목적지에대한정보가추가된다는것으로이는 UDP의특징인비연결성을생각하면송수신에반드시필요한정보임을알수있음 close / shutdown int close (int sockfd); - 소켓종료후에는이전에연결된상대방에게데이터송신불가 - 대기열의데이터에대해서해당데이터수신작업완료후소켓종료 int shutdown (int sockfd, int howto); - TCP 연결에대한종료를담당하고옵션에따라종료방법조절가능 - close() 함수와다르게별다른작업없이바로종료시킨다는차이 - howto 인자에따른옵션 SHUT_RD : Read 불가, Write 가능 SHUT_WR : Read 가능, Write 불가 SHUT_RDWR : Read / Write 모두불가

58 <58> <Network Programming> 3. 소켓옵션관련함수 int getsockopt (int sockfd, int level, int optname, void * optval, socklen_t * optlen); - 소켓 (sockfd) 의지정된옵션 (optname) 의값 (optval) 과바이트수 (optlen) 을반환 int setsockopt (int sockfd, int level, int optname, void * optval, socklen_t optlen); - 소켓 (sockfd) 에옵션 (optname) 을지정하고그에따른값 (optval) 과바이트수 (optlen) 을설정 소켓및프로토콜종류와그에따른옵션, 데이터값으로구성 level : 소켓및프로토콜의종류 (IP, ICMP, IPv6, TCP 등 ) optname : 세부옵션 optval : 선택한옵션에대한데이터값 optlen : optval 의크기입력

59 <59> <Network Programming> 2. 옵션의주요내용 3. 소켓옵션관련함수

60 <60> <Network Programming> 4. 다중처리를위한함수 (1/4) fork() 함수 1. 새로운프로세스를생성하고복제된프로세스는현재프로세스와같은속성과코드를소유 2. 부모프로세스는자식프로세스에대한개수에대한제한이있으므로에러발생에대한제어필요 3. 형태 pid_t fork (void); 4. 동작 5. 특징 코드, 스택,, 파일기술자, 소켓번호등을공유 PID 와변수는공유하지않음

61 <61> <Network Programming> 4. 다중처리를위한함수 (2/4) select () 함수 1. 파일기술자의상태변화감지후해당상태에대한처리 2. 상태변화는읽기 / 쓰기 / 예외처리의 3가지 3. 형태 - int select ( int n, fd_set * readfds, fd_set * writefds, fd_set *exceptfds, const struct timeval * timeout); 4. 입력인자 n : 상태를살펴볼최대기술자크기 timeout : 상태를살펴볼주기설정 (0인경우무한반복 ) readfds / writefds / exceptfds : 읽기 / 쓰기 / 예외처리관련기술자 5. 상태기술자관리를위한매크로들

62 <62> <Network Programming> select() 시스템콜 int select ( int maxfdp1, /* 최대소켓번호크기 + 1 */ fd_set *readfds, /* 읽기변화를감지할소켓번호 */ fd_set *writefds, /* 쓰기변화를감지할소켓번호 */ fd_set *exceptfds, /* 예외변화를감지할소켓번호 */ struct timeval *tvptr); /* select 시스템콜이기다리는시간 */

63 <63> <Network Programming> select() 시스템콜 (Cont d) 매크로 FD_ZERO(fd_set *fdset) fdset 의모든비트를지운다 FD_SET(int fd, fd_set *fdset) fdset 중소켓 fd 에해당하는비트를 1 로한다 FD_CLR(int fd, fd_set *fdset) fdset 중소켓 fd 에해당하는비트를 0 으로한다 FD_ISSET(int fd, fd_set *fdset) fdset 중소켓 fd 에해당하는비트가세트되어있으면양수값을리턴

64 <64> <Network Programming> Select 를이용한예

65 <65> <Network Programming> 4. 다중처리를위한함수 (3/4) poll() 함수 1. select 함수와같은기술자관리방식 2. select 에비하여관리할기술자를선택할수있음 3. select 함수보다빠른응답속도를보이나사용이불편한단점 4. 형태 - Int poll (struct pollfd *ufds, unsigned int nfds, int timeout); 5. 입력인자

66 <66> <Network Programming> 4. 다중처리를위한함수 (4/4) Thread 1. 스레드는프로세스와는다르게메모리공유가능 2. 메모리공유로인하여동기화문제발생 ( 관련도서참고 ) 3. 사용함수 Int pthread_create (pthread_t * thread, pthread_attr_t * attr, void * (* start_routine)(void *), void * arg); void pthread_join (pthread_t th, void ** thread_return); fork 에서자식프로세스를기다리는 wait 함수와같은기능 void pthread_exit (void *retval); 스레드를종료시킬때호출

67 <67> <Network Programming> 다중처리를위한 Server 의동작예제 (1) o concurrent server 로가정할경우의전형적인시나리오 int sockfd, newsockfd; if ( (sockfd = socket(...)) < 0) err_sys("socket error"); if (bind(sockfd,...) < 0) err_sys("bind error"); if (listen(sockfd, 5) < <0) err_sys("listen error"); for ( ; ; ) { newsockfd = accept(sockfd,...); /* blocks */ if (newsockfd < 0) err_sys("accept error"); if (fork() == 0) { close(sockfd); /* child */ doit(newsockfd); /* process the request */ exit(0); } } close(newsockfd); /* parent */

68 <68> <Network Programming> 다중처리를위한 Server 의동작예제 (2) o iterative server 로가정할경우의전형적인시나리오 int sockfd, newsockfd; if ( (sockfd = soket(...)) < 0) err_sys("socket error"); if (bind(sockfd,...) < 0) err_sys("bind error"); if (listen(sockfd, 5) < <0) err_sys("listen error"); for ( ; ; ) { newsockfd = accept(sockfd,...); /* blocks */ /* No Fork of Process */ if (newsockfd < 0) err_sys("accept error"); } doit(newsockfd); /* process the request */ close(newsockfd);

69 <69> <Network Programming> 클라이언트 / 서버의작성방법 1. 서버의유형 2. 연결형클라이언트 / 서버의작성 3. 비연결형클라이언트 / 서버의작성

70 <70> <Network Programming> 서버프로그램작성절차 서버프로그램이먼저수행되고있어야한다. 서버는 socket() 을호출하여통신에사용할소켓을개설한다. 소켓번호와자신의소켓주소를 bind() 로서로연결한다. 소켓주소 ( 자신의 IP 주소자신의포트번호 ) 소켓번호는응용프로그램이알고있는통신창구번호이고, 소켓주소는네트워크시스템 ( 즉, TCP/IP) 이알고있는주소이므로이들의관계를묶어두어야한다. listen() 을호출하여클라이언트로부터의연결요청을기다리는수동대기모드로들어간다. 클라이언트로부터연결요청이왔을때이를처리하기위하여 accept() 를호출한다. 클라이언트가 connect() 를호출하여연결요청을해오면이를처리한다. 메시지를송수신한다.

71 <71> <Network Programming> 클라이언트프로그램작성절차 socket() 을호출하여소켓을만든다. 서버에게연결요청을보내기위하여 connect() 를호출한다. 이때서버의소켓주소 (4+5) 구조체를만들어인자로준다. 소켓주소 ( 상대방의 IP 주소상대방의포트번호 ) 상대방 == 서버의 IP 주소및포트번호 대부분의클라이언트는 bind() 를사용하여포트번호를특정한값으로지정할필요가없다 ( 클라이언트는보통시스템이자동으로배정하는포트번호를사용한다 ). connect() 를호출하여연결요청을한다. 메시지를송수신한다.

72 <72> <Network Programming> 소켓의동작모드 blocking 모드 함수를호출했을경우동작완료때까지멈춤 listen(), connect(), accept(), read(), write() 등 non-blocking 모드 시스템콜호출후바로값이리턴 계속루프 (loop) 를돌면서확인 ( 폴링 ) 비동기 (asynchronous) 모드 IO 변화를감지 select() 함수를사용

73 <73> <Network Programming> 1. 서버의유형 1. 서버유형의결정 1. 클라이언트접속빈도 - 얼마만큼의클라이언트가어느정도의빈도로접속하는지에따름 2. 필요한규모와처리량 - 주고받는데이터의크기가어느정도이며필요한대역폭에따름 3. 데이터의안정성 - 클라이언트간혹은서버와클라이언트간의데이터신뢰도 - 요즘의네트워크망은설비가잘되어있어안정성에대한문제는줄어듬 2. 기본적인서버의유형 서버타입선택사항클라이언트의요청에대한처리방식동시처리형단순형서버로의접근방식연결형 (TCP) 비연결형 (UDP)

74 <74> <Network Programming> 연결형클라이언트 socket() 호출시소켓번호와소켓인터페이스의관계

75 <75> <Network Programming> 연결형서버 P/G Iterative 모델의 TCP 서버프로그램작성절차

76 <76> <Network Programming> 비연결형클라이언트 SOCK_DGRAM 으로소켓생성 connect() 없이바로메시지송수신 각패킷마다 IP 주소와포트번호를입력 sendto(int s, char* buf, int length, int flag, sockaddr* to, int tolen) recvfrom(int s, char* buf, int length, int flags, sockaddr* from, int fromlen)

77 <77> <Network Programming> 포트번호배정 클라이언트포트번호배정시기 TCP 소켓의경우 connect() 호출이후에 UDP 소켓의경우 sendto() 호출이후에 getsockname() 을이용확인 getsockname(s, (struct sockaddr *)&clinet_addr, &addr_len); port = clinet_addr.sin_port; printf( client port number : %d\n, port);

78 <78> <Network Programming> 2. 연결형클라이언트 / 서버의작성 1. 단순연결형클라이언트 / 서버 1) 서버와클라이언트의소켓생성 2) 서버는 BIND 작업후대기큐설정 (LISTEN) 3) 서버는클라이언트의접속대기 (ACCEPT) 4) 클라이언트가서버로접속시도 (CONNECT) 5) 접속이완료되면서버와클라이언트간의데이터송수신작업 6) 서버종료작업 7) 서버와클라이언트소켓닫음 (CLOSE)

79 <79> <Network Programming> ( 예 ) 단순연결형서버 socket 생성및수행 /* 서버소켓생성 */ server_socket = socket(af_inet, SOCK_STREAM, 0); /* 서버주소및포트설정 */ server_addr.sin_family = AF_INET; server_addr.sin_port = htons(server_port); server_addr.sin_addr.s_addr = htonl(inaddr_any); memset(&(server_addr.sin_zero), 0, 8); /* 해당주소및포트로바인딩작업 */ bind(server_socket, (struct sockaddr*)&server_addr, sizeof(struct sockaddr)); /* 클라이언트의대기열수설정 */ listen(server_socket, 10); client_socket = accept(server_socket, (struct sockaddr*)&client_addr, &addrsize); msgsize = read(client_socket, BUFF, sizeof(buff)); if (msgsize <= 0) { printf( message receive error\n ); continue; } write(client_socket, BUFF, strlen(buff) );

80 <80> <Network Programming> ( 예 ) 단순 Client socket 생성및수행 /* 소켓생성 TCP 이므로 SOCK_STREAM*/ connect_fd = socket(af_inet, SOCK_STREAM, 0); /* 사용자의서버 IP 및포트에대한입력을받아서 sockaddr_in 구조체를구성 */ connect_addr.sin_family = AF_INET; connect_addr.sin_port = htons(atoi(argv[2])); connect_addr.sin_addr.s_addr = inet_addr(argv[1]); memset(&(connect_addr.sin_zero), 0, 8); /* 서버로의소켓접속 */ connect(connect_fd, (struct sockaddr*)&connect_addr, sizeof(connect_addr)); memset(msg, '\0', sizeof(msg)); fgets(msg, 1024, stdin); msgsize = strlen(msg); write(connect_fd, msg, msgsize); msgsize = read(connect_fd, msg, sizeof(msg)); if (msgsize <= 0) continue; printf("server Message>>%s", msg);

81 <81> <Network Programming> Homework 1. 앞의예제를이용하여단방향전달프로그램을작성하세요. ( 일종의 Echo 프로그램 ) ->../Soc/Sim_soc/sim_*.c 2. 위의예제를이용하여 Talk program 을작성하세요. ->../Soc/Talk/talk_[cs].c 3. TCP 기반 Talk Program 을 UDP 로변경하세요.

82 <82> <Network Programming> 2. 연결형클라이언트 / 서버의작성 2. 다중연결형클라이언트 / 서버 1) 서버와클라이언트의통신초기화 (SELECT 관련 ) 2) 서버와클라이언트소켓의생성 3) 서버는 BIND 작업후대기큐설정 (LISTEN) 4) 서버는클라이언트의접속대기 (ACCEPT) 5) 클라이언트가서버로접속시도 (CONNECT) 6) 서버측의기술자에이벤트가발생 7) 접속처리후클라이언트와데이터송수신 8) 서버종료작업 9) 서버와클라이언트소켓닫음 (CLOSE)

83 <83> <Network Programming> ( 예 ) 다중연결형서버 socket 생성및수행 /* 서버소켓생성 */ server_socket = Socket(AF_INET, SOCK_STREAM, 0); /* 서버주소및포트설정 */.. /* 해당주소및포트로바인딩작업 */ Bind(server_socket, (struct sockaddr*)&server_addr, sizeof(struct sockaddr)); /* 클라이언트의대기열수설정 */ Listen(server_socket, 10); /*fd_set 데이타필드초기화 */ FD_ZERO(&readfd); maxfd = server_socket; client_index = 0; /* client 참가자수 : num_chat */ while(1) { /*fd_set 를해당소켓기술자로설정 */ FD_SET(server_socket, &readfd); /* 접속된클라이언트의소켓기술자를 fd_set 에설정 */ for (start_index = 0; start_index < client_index; start_index++) { FD_SET(client_fd[start_index], &readfd); if (client_fd[start_index] > maxfd) maxfd = client_fd[start_index]; } maxfd = maxfd + 1; return 0; 다음페이지계속

84 <84> <Network Programming> select(maxfd, &readfd, NULL, NULL,NULL); /* 해당소켓기술자에변화가생겼는지검사 */ if (FD_ISSET(server_socket, &readfd)) { addrsize = sizeof(struct sockaddr_in); client_socket = Accept(server_socket, (struct sockaddr*)&server_addr, &addrsize); FD_SET(client_socket, &readfd); client_fd[client_index] = client_socket; client_index++; if (client_index == 5) break; } /* 해당소켓기술자에변화가생겼는지검사서버에접속된모든클라이언트의소켓기술자검사 */ for (start_index = 0; start_index < client_index; start_index++) { if (FD_ISSET(client_fd[start_index], &readfd)) { msgsize = read(client_fd[start_index], BUFF, sizeof(buff)); if (msgsize <= 0) continue; printf("client Message>>%s", BUFF); msgsize = strlen(buff); write(client_fd[start_index], BUFF, msgsize); } }

85 <85> <Network Programming> ( 예 ) 다중 Client socket 생성및수행 /* 서버로의소켓접속 */ Connect(connect_fd, (struct sockaddr*)&connect_addr, sizeof(connect_addr)); /*fd_set 데이타필드초기화 */ FD_ZERO(&readfd); while(1) { } /*fd_set 를해당소켓기술자로설정 */ FD_SET(0, &readfd); FD_SET(connect_fd, &readfd); select (connect_fd+1, &readfd, NULL, NULL, NULL); /* 해당소켓기술자에변화가생겼는지검사 */ if (FD_ISSET(connect_fd, &readfd)) { msgsize = read(connect_fd, msg, sizeof(msg)); if (msgsize <= 0) continue; printf("server Message>>%s", msg); } /* 해당입력기술자에변화가생겼는지검사 */ if (FD_ISSET(0, &readfd)) { memset(msg, '\0', sizeof(msg)); fgets(msg, 1024, stdin); msgsize = strlen(msg); write(connect_fd, msg, msgsize); }

86 <86> <Network Programming> 3. 비연결형클라이언트 / 서버의작성 1. 단순비연결형클라이언트 / 서버 1) 서버와클라이언트의소켓생성 2) 서버는 BIND 작업후대기 3) 서버와클라이언트간의데이터송수신 4) 서버는단순히클라이언트로데이터전송 5) 서버종료작업 6) 서버소켓닫음 6) 클라이언트소켓닫음 * 양쪽모두상대방의주소를알고있어야지속적인데이터송수신이가능함을기억

87 <87> <Network Programming> ( 예 ) 단순비연결형서버 /*1. 서버소켓생성 */ server_socket = Socket(AF_INET, SOCK_DGRAM, 0); server_addr.sin_family = AF_INET; server_addr.sin_port = htons(server_port); server_addr.sin_addr.s_addr = htonl(inaddr_any); memset(&(server_addr.sin_zero), 0, 8); bind(server_socket, (struct sockaddr*)&server_addr, sizeof(struct sockaddr)); addrsize = sizeof(struct sockaddr_in); while(1) { memset(buff, '\0', sizeof(buff)); msgsize = recvfrom(server_socket, BUFF, sizeof(buff), 0, (struct sockaddr*)&client_addr, &addrsize); if (msgsize <= 0) continue; } printf("client Message>>%s", BUFF); msgsize = strlen(buff); sendto(server_socket, BUFF, msgsize, 0, (struct sockaddr*)&client_addr, addrsize);

88 <88> <Network Programming> ( 예 ) 단순비연결형클라이언트 memset(msg, '\0', sizeof(msg)); fgets(msg, 1024, stdin); msgsize = strlen(msg); /* 사용자입력데이타에대한처리. 서버전송 * sendto 함수이용 */ msgsize = sendto(connect_fd, msg, msgsize, 0, (struct sockaddr*)&connect_addr, addrsize); printf("message Send>>%s", msg); memset(temp_buff, '\0', sizeof(temp_buff)); /* 서버에서의송신데이타에대한처리 recvfrom함수이용 */ recvfrom((int)sockfd, temp_buff, sizeof(temp_buff), 0, (struct sockaddr*)&server_addr, &temp_addrsize); printf("message Receive>>%s", temp_buff);

89 <89> <Network Programming> 3. 비연결형클라이언트 / 서버의작성 2. 동시처리비연결형클라이언트 / 서버 1) 서버와클라이언트의소켓생성 2) 서버는 BIND 작업후대기 3) 클라이언트가서버로접속데이터송신 4) 서버는클라이언트의접속시마다클라이언트처리용스레드생성 5) 이후의클라이언트와의통신은각각의스레드가담당 6) 서버종료작업 7) 종료시스레드를통한클라이언트종료 8) 서버와클라이언트소켓닫음 (CLOSE)

90 <90> <Network Programming> ( 예 ) 다중처리용비연결형서버 while(1) { memset(buff, '\0', sizeof(buff)); /* 접속클라이언트에대한수신데이타처리 */ msgsize = recvfrom(server_socket, BUFF, sizeof(buff), 0, (struct sockaddr*)&client_addr, &addrsize); if (msgsize <= 0) continue; memcpy(&curr_addr, &client_addr, sizeof(struct sockaddr_in)); memset(curr_buff, '\0', sizeof(curr_buff)); memcpy(curr_buff, BUFF, strlen(buff)); /* 수신에대한데이타처리는 Thread로처리. 현재의예제에서는실용성이많지않으나실제에서는수신데이타에대한처리는많은작업이있을수있음 */ pthread_create(&thread, NULL, thread_process, (void *)server_socket); } void* thread_process(void * server_socket) { memset(temp_buff, '\0', sizeof(temp_buff)); memcpy(temp_buff, CURR_BUFF, strlen(curr_buff)); printf("client Message>>%s", temp_buff); /*Thread로처리되는클라이언트데이터송신 */ sendto((int)server_socket, temp_buff, strlen(temp_buff), 0, (struct sockaddr*)&temp_addr, sizeof(struct sockaddr)); }

91 <91> <Network Programming> ( 예 ) 다중처리용비연결형클라이언트 /* 데이타수신에대한 Thread 생성 */ pthread_create(&thread, NULL, thread_process, (void*)connect_fd); while(1) { memset(msg, '\0', sizeof(msg)); fgets(msg, 1024, stdin); msgsize = strlen(msg); /* 사용자입력데이타에대한처리. 서버전송 * sendto 함수이용 */ msgsize = sendto(connect_fd, msg, msgsize, 0, (struct sockaddr*)&connect_addr, addrsize); printf("message Send>>%s", msg); } void* thread_process(void * sockfd) { while(1) { memset(temp_buff, '\0', sizeof(temp_buff)); /* 서버에서의송신데이타에대한처리 recvfrom 함수이용 */ recvfrom((int)sockfd, temp_buff, sizeof(temp_buff), 0, (struct sockaddr*)&server_addr, &temp_addrsize); printf("message Receive>>%s", temp_buff); } }

92 <92> <Network Programming> 채팅을위한클라이언트 / 서버프로그램작성 1. 프로그램개요및구조 2. 채팅프로그램

93 <93> <Network Programming> 1. 프로그램개요및구조 (1) 서버프로그램구조 1) 서버에서사용하는구조체초기화 2) 서버소켓생성및클라이언트대기 3) select 를이용한접속상황관리 - 클라이언트가접속하면소켓기술자의상태가변화하여접속여부확인 4) 접속처리 - 접속한클라이언트가넘겨주는정보로서버의각구조체를업데이트함 5) 데이터송수신 - 클라이언트로받은데이터는검색하여같은채팅방안에접속한각각의다른 클라이언트에게전송 - 데이터수정작업필요 ( 이름첨가등 ) 6) 서버소켓닫기 - 종료하지않는다면 3) 으로복귀 7) 프로그램종료

94 <94> <Network Programming> 채팅서버구조

95 <95> <Network Programming> 채팅서버구조 (Cont d) 채팅서버와클라이언트와의연결관계

96 <96> <Network Programming> /* 채팅에서의방을 3 개로설정 */ struct room_node roomlist[3]; 서버 : 채팅방설정 /* 각방에대한방이름초기화 */ strcpy(roomlist[0].room_name,"room1"); strcpy(roomlist[2].room_name,"room3"); strcpy(roomlist[1].room_name,"room2"); /* 각방의접속사용사수를초기화 */ roomlist[0].user_count = 0; roomlist[1].user_count = 0; roomlist[2].user_count = 0; /* 서버소켓생성 */ server_socket = socket(af_inet, SOCK_STREAM, 0); /* 서버 IP 및포트설정 */ server_addr.sin_family = AF_INET; server_addr.sin_port = htons(server_port); server_addr.sin_addr.s_addr = htonl(inaddr_any); memset(&(server_addr.sin_zero), 0, 8); bind(server_socket, (struct sockaddr*)&server_addr, sizeof(struct sockaddr)); listen(server_socket, 0); FD_ZERO(&readfd);

97 <97> <Network Programming> 서버 : 서버에접속한클라이언트소켓기술자확인 /* 서버에접속한클라이언트소켓기술자 [ 각방의유저구조체포함 ] 를 fd_set 에설정 */ FD_SET(server_socket, &readfd); for (room_index = 0; room_index < 3; room_index++) { for (user_index = 0; user_index < roomlist[room_index].user_count; user_index++) { tempsockfd = roomlist[room_index].user_list[user_index].user_sockfd; FD_SET(tempsockfd, &readfd); } } maxfd = maxfd + 1; if (tempsockfd > maxfd) maxfd = tempsockfd;

98 <98> <Network Programming> 서버 : 클라이언트접속처리 select(maxfd, &readfd, NULL, NULL,NULL); /* 서버로의접속이있는클라이언트에대한처리 */ if (FD_ISSET(server_socket, &readfd)) { addrsize = sizeof(struct sockaddr_in); client_socket = accept(server_socket, (struct sockaddr*)&server_addr, &addrsize); memset(buff, '\0', sizeof(buff)); msgsize = read(client_socket, BUFF, sizeof(buff)); } if (msgsize <=0) { printf("enter user Error\n"); continue; }

99 <99> <Network Programming> 서버 : 각방별로참가자확인및확약 printf("receive Message:%s\n", BUFF); /* 각방이 5 명으로제한되어있으므로해당유저인원체크 */ if (BUFF[0] == '1') { printf("login Room1 Count:%d\n", roomlist[0].user_count); if (roomlist[0].user_count == 5) { strcpy(buff, "User Count Overflow Error"); write(client_socket, BUFF, strlen(buff)); close(client_socket); continue; /* 인원초과 */ } roomlist[0].user_list[roomlist[0].user_count].user_sockfd = client_socket; roomlist[0].user_count++; strcpy(buff, "ConnectOK"); write(client_socket, BUFF, strlen(buff)); }

100 <100> <Network Programming> 서버 : 참가자에게수신정보전달 for (room_index = 0; room_index < 3; room_index++) { for (user_index = 0; user_index < roomlist[room_index].user_count; user_index++) { if (FD_ISSET(roomlist[room_index].user_list[user_index].user_sockfd,&readfd)){ memset(buff, '\0', sizeof(buff)); tempsockfd = roomlist[room_index].user_list[user_index].user_sockfd; msgsize = read(tempsockfd, BUFF,sizeof(BUFF)); if (msgsize <= 0) { if (user_index == roomlist[room_index].user_count) { close(roomlist[room_index].user_list[user_index].user_sockfd); roomlist[room_index].user_count--; } else if (user_index < roomlist[room_index].user_count) { close(roomlist[room_index].user_list[user_index].user_sockfd); for (temp_user_count = user_index; temp_user_count < roomlist[room_index].user_count; temp_user_count++) { roomlist[room_index].user_list[temp_user_count] = roomlist[room_index].user_list[temp_user_count+1]; roomlist[room_index].user_count--; } } else { printf("receive Message=>%s\n", BUFF, msgsize); for (temp_user_count = 0; temp_user_count < roomlist[room_index].user_count; temp_user_count++) { msgsize = strlen(buff); write(roomlist[room_index].user_list[temp_user_count].user_sockfd, BUFF,msgsize); } } } } }

101 <101> <Network Programming> 1. 프로그램개요및구조 (2) 클라이언트프로그램구조 1) 서버에전달할기본데이터입력 - 사용자의대화명및방번호 2) 서버접속을위한구조체설정 - 서버주소및포트정보입력 3) 소켓생성 4) 서버로접속시도및확인 - Connect 함수이용하여접속 - 접속처리결과를서버로부터받음 5) 데이터수신 - 수신데이터는수정하지않고바로화면에출력함 - 서버에서분류되어전송되었으므로클라이언트는따로처리할필요없음 6) 데이터송신 - 자신의대화명추가후서버로송신 7) 클라이언트프로그램소켓닫기 - 종료하지않는다면 5) 으로복귀 8) 프로그램종료

102 <102> <Network Programming> 클라이언트 : 채팅방요구준비 /* 사용자대화명입력처리 */ fgets(name,30, stdin); name[strlen(name)-1] = '\0'; while(1) { /* 접속방번호입력 */ printf("#enter Room Number(ex=>1 or 2 or 3)=>"); room_number = (char)fgetc(stdin); fgetc(stdin); if (room_number!= '1' && room_number!='2' && room_number!= '3') { printf("incorrect Room Number\n"); continue; } else break; } memset(msg, '\0', sizeof(msg)); msg[0] = room_number; for (temp_index = 0; temp_index < strlen(name); temp_index++) { msg[temp_index+1] = name[temp_index]; }

103 <103> <Network Programming> 클라이언트 : 채팅방요구 connect_fd = socket(af_inet, SOCK_STREAM, 0); connect_addr.sin_family = AF_INET; connect_addr.sin_port = htons(atoi(argv[2])); connect_addr.sin_addr.s_addr = inet_addr(argv[1]); memset(&(connect_addr.sin_zero), 0, 8); /* 서버접속 */ connect(connect_fd, (struct sockaddr*)&connect_addr, sizeof(connect_addr)); msgsize = strlen(msg); write(connect_fd, msg, msgsize); memset(msg, '\0', sizeof(msg)); /* 채팅서버에대한접속결과확인 */ read(connect_fd, msg, sizeof(msg)); if (!strcmp(msg, "ConnectOK")) { printf("*******server Connection Success********\n"); printf("*******start Chatting Program ********\n"); } if (!strcmp(msg, "User Count Overflow Error")) { printf("%s\n", msg); exit(1); }

104 <104> <Network Programming> 클라이언트 : 채팅 FD_ZERO(&readfd); while(1) { FD_SET(0, &readfd); FD_SET(connect_fd, &readfd); select (connect_fd+1, &readfd, NULL, NULL, NULL); } if (FD_ISSET(connect_fd, &readfd)) { memset(msg, '\0', sizeof(msg)); msgsize = read(connect_fd, msg, sizeof(msg)); if (msgsize <= 0) continue; printf("*from=>%s\n", msg); } if (FD_ISSET(0, &readfd)) { memset(msg, '\0', sizeof(msg)); fgets(msg, 1024, stdin); msg[strlen(msg)-1] = '['; strcat(msg, name); msg[strlen(msg)] = ']'; msgsize = strlen(msg); write(connect_fd, msg, msgsize); }

Network Programming

Network Programming Part 3 Socket Programming (Unix 기반 ) 목차 Socket 의개념 BSD 소켓 API 의소개 Socket 생성및 ID IP 주소변환설명 Socket 사용형태 소켓을이용한클라이언트및서버프로그램작성방법소개 채칭프로그램작성

More information

Microsoft PowerPoint - Supplement-02-Socket Overview.ppt [호환 모드]

Microsoft PowerPoint - Supplement-02-Socket Overview.ppt [호환 모드] 소켓개요 참고문헌 : 컴퓨터네트워크프로그래밍, 김화종, 홍릉과학출판사 Socket 정의 Socket 은 Transport 계층 (TCP 나 UDP) 을이용하는 API 1982 년 BSD 유닉스 41 에서처음소개 윈도우즈의경우 Winsock 제공 JAVA 또한 Socket 프로그래밍을위한클래스제공 Socket Interface 의위치 5-7 (Ses, Pre,

More information

Microsoft PowerPoint - Lecture_Note_5.ppt [Compatibility Mode]

Microsoft PowerPoint - Lecture_Note_5.ppt [Compatibility Mode] TCP Server/Client Department of Computer Engineering Kyung Hee University. Choong Seon Hong 1 TCP Server Program Procedure TCP Server socket() bind() 소켓생성 소켓번호와소켓주소의결합 listen() accept() read() 서비스처리, write()

More information

The Pocket Guide to TCP/IP Sockets: C Version

The Pocket Guide to  TCP/IP Sockets: C Version 얇지만얇지않은 TCP/IP 소켓프로그래밍 C 2 판 4 장 UDP 소켓 제 4 장 UDP 소켓 4.1 UDP 클라이언트 4.2 UDP 서버 4.3 UDP 소켓을이용한데이터송싞및수싞 4.4 UDP 소켓의연결 UDP 소켓의특징 UDP 소켓의특성 싞뢰할수없는데이터젂송방식 목적지에정확하게젂송된다는보장이없음. 별도의처리필요 비연결지향적, 순서바뀌는것이가능 흐름제어 (flow

More information

Microsoft PowerPoint - 12 ¼ÒÄÏÀ» ÀÌ¿ëÇÑ Åë½Å 1.ppt

Microsoft PowerPoint - 12 ¼ÒÄÏÀ» ÀÌ¿ëÇÑ Åë½Å 1.ppt 12 장 소켓을이용한통신 (1) 함수 - inet_addr - inet_ntoa - socket - bind - listen - accept - connect - recv -send 1 서론 파이프를사용하여통신을하기위한시스템호출 / 표준라이브러리함수 함수 의미 inet_addr 문자열형태의인터넷주소를바이너리형태로변환한다. inet_ntoa 바이너리형태의인터넷주소를문자열형태로변환한다.

More information

Microsoft PowerPoint - 13 ¼ÒÄÏÀ» ÀÌ¿ëÇÑ Åë½Å 2.ppt

Microsoft PowerPoint - 13 ¼ÒÄÏÀ» ÀÌ¿ëÇÑ Åë½Å 2.ppt 13 장소켓을이용한통신 (2) 소켓을이용한통신 (2) 함수 - recvfrom - sendto - uname - gethostname - gethostbyname - gethostbyaddr 1 1. 서론 소켓을사용하여비연결형모델로통신을하기위한함수와그외의함수 함수 의미 recvfrom 비연결형모델에서소켓을통해메시지를수신한다. sendto 비연결형모델에서소켓을통해메시지를송신한다.

More information

제1장 Unix란 무엇인가?

제1장  Unix란 무엇인가? 1 소켓 2 1 소켓 클라이언트 - 서버모델 네트워크응용프로그램 클리이언트 - 서버모델을기반으로동작한다. 클라이언트 - 서버모델 하나의서버프로세스와여러개의클라이언트로구성된다. 서버는어떤자원을관리하고클라이언트를위해자원관련서비스를제공한다. 3 소켓의종류 소켓 네트워크에대한사용자수준의인터페이스를제공 소켓은양방향통신방법으로클라이언트 - 서버모델을기반으로프로세스사이의통신에매우적합하다.

More information

The Pocket Guide to TCP/IP Sockets: C Version

The Pocket Guide to  TCP/IP Sockets: C Version 1 목포해양대해양컴퓨터공학과 UDP 소켓 네트워크프로그램설계 4 장 2 목포해양대해양컴퓨터공학과 목차 제 4장 UDP 소켓 4.1 UDP 클라이언트 4.2 UDP 서버 4.3 UDP 소켓을이용한데이터송신및수신 4.4 UDP 소켓의연결 3 목포해양대해양컴퓨터공학과 UDP 소켓의특징 UDP 소켓의특성 신뢰할수없는데이터전송방식 목적지에정확하게전송된다는보장이없음.

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Socket Programming 1 Jo, Heeseung 학습목표 TCP/IP 프로토콜의기본개념 IP 주소와포트번호의개념소켓관련구조체와함수소켓을이용한통신프로그램을작성 2 TCP/IP 개요 TCP/IP 인터넷의표준프로토콜 5계층 (4계층) 으로구성 TCP 와 UDP 의차이 3 IP 주소와호스트명 IP 주소와호스트명 IP 주소 : 인터넷을이용할때사용하는주소로점

More information

À©µµ³×Æ®¿÷ÇÁ·Î±×·¡¹Ö4Àå_ÃÖÁ¾

À©µµ³×Æ®¿÷ÇÁ·Î±×·¡¹Ö4Àå_ÃÖÁ¾ P a 02 r t Chapter 4 TCP Chapter 5 Chapter 6 UDP Chapter 7 Chapter 8 GUI C h a p t e r 04 TCP 1 3 1 2 3 TCP TCP TCP [ 4 2] listen connect send accept recv send recv [ 4 1] PC Internet Explorer HTTP HTTP

More information

2009년 상반기 사업계획

2009년 상반기 사업계획 소켓프로그래밍활용 IT CookBook, 유닉스시스템프로그래밍 학습목표 소켓인터페이스를활용한다양한프로그램을작성할수있다. 2/23 목차 TCP 기반프로그래밍 반복서버 동시동작서버 동시동작서버-exec함수사용하기 동시동작서버-명령행인자로소켓기술자전달하기 UDP 프로그래밍 3/23 TCP 기반프로그래밍 반복서버 데몬프로세스가직접모든클라이언트의요청을차례로처리 동시동작서버

More information

슬라이드 1

슬라이드 1 Computer Networks Practice Socket 1 DK Han Junghwan Song dkhan@mmlab.snu.ac.kr jhsong@mmlab.snu.ac.kr 2012-3-26 Multimedia and Mobile communications Laboratory Introduction Client / Server model Server

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Socket Programming 1 Jo, Heeseung 학습목표 TCP/IP 프로토콜의기본개념 IP 주소와포트번호의개념소켓관련구조체와함수소켓을이용한통신프로그램을작성 2 TCP/IP 개요 TCP/IP 인터넷의표준프로토콜 5 계층 (4 계층 ) 으로구성 TCP 와 UDP 의차이 3 IP 주소와호스트명 IP 주소와호스트명 IP 주소 : 인터넷을이용할때사용하는주소로점

More information

<4D F736F F F696E74202D E20B3D7C6AEBFF6C5A920C7C1B7CEB1D7B7A1B9D62E >

<4D F736F F F696E74202D E20B3D7C6AEBFF6C5A920C7C1B7CEB1D7B7A1B9D62E > 웹프로그래밍및실습 ( g & Practice) 문양세강원대학교 IT 대학컴퓨터과학전공 소켓 (Socket) (1/2) Socket 이란? 서버와클라이언트가서로특정한규약을사용하여데이터를전송하기위한방식 서버와클라이언트는소켓연결을기다렸다가소켓이연결되면서로데이터를전송 현재네트워크상에서의모든통신의근간은 Socket 이라할수있음 Page 2 1 소켓 (Socket) (2/2)

More information

본 강의에 들어가기 전

본 강의에 들어가기 전 네트워크프로그래밍 02 장 TCP 소켓 (1) 1 목차 제 2장 TCP 소켓 1. IPv4 TCP 클라이언트 2. IPv4 TCP 서버 3. 소켓의생성과해지 4. 주소지정 5. 소켓에연결 6. 소켓을주소에바인딩하기 7. 클라이언트의연결요청처리 8. 데이터주고받기 9. IPv6의사용 2 소켓통신과정 간략화한소켓통신과정 소켓생성 TCP or UDP 소켓에주소정보할당

More information

Microsoft PowerPoint - 06-CompSys-16-Socket.ppt

Microsoft PowerPoint - 06-CompSys-16-Socket.ppt 소켓시스템콜소개 TCP 클라이언트 / 서버프로그래밍 signal(), fork() 시스템콜 TCP 클라이언트 / 서버프로그래밍예 talk_client.c, talk_server.c UDP 클라이언트 / 서버프로그래밍 순천향대학교컴퓨터학부이상정 1 소켓시스템콜소개 순천향대학교컴퓨터학부이상정 2 소켓 (socket) 소켓은 TCP/IP 프로토콜을이용하기위한시스템콜인터페이스

More information

제1장 Unix란 무엇인가?

제1장  Unix란 무엇인가? 1 13 장소켓 2 13.1 소켓 클라이언트 - 서버모델 네트워크응용프로그램 클리이언트 - 서버모델을기반으로동작한다. 클라이언트 - 서버모델 하나의서버프로세스와여러개의클라이언트로구성된다. 서버는어떤자원을관리하고클라이언트를위해자원관련서비스를제공한다. 3 소켓의종류 소켓 네트워크에대한사용자수준의인터페이스를제공 소켓은양방향통신방법으로클라이언트 - 서버모델을기반으로프로세스사이의통신에매우적합하다.

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Network Programming Jo, Heeseung Network 실습 네트워크프로그래밍 멀리떨어져있는호스트들이서로데이터를주고받을수있도록프로그램을구현하는것 파일과는달리데이터를주고받을대상이멀리떨어져있기때문에소프트웨어차원에서호스트들간에연결을해주는장치가필요 이러한기능을해주는장치로소켓이라는인터페이스를많이사용 소켓프로그래밍이란용어와네트워크프로그래밍이랑용어가같은의미로사용

More information

슬라이드 1

슬라이드 1 Task 통신및동기화 : Socket Chapter #13 강의목차 소켓개요 소켓관련시스템콜 네트워크라이브러리 스트림소켓을이용한프로세스통신 데이터그램소켓을이용한프로세스통신 Unix System Programming 2 소켓 (Socket) 소켓 (Socket) 개요 (1) 프로세스간의통신을위한데이터출입구 파이프도구를일반화 양방향데이터통신을지원 상호연관성이없는프로세스간에통신이가능

More information

본 강의에 들어가기 전

본 강의에 들어가기 전 1 목포해양대해양컴퓨터공학과 2 장. TCP 소켓 네트워크프로그램설계 2 목포해양대해양컴퓨터공학과 목차 제 2장 TCP 소켓 1. IPv4 TCP 클라이언트 2. IPv4 TCP 서버 3. 소켓의생성과해지 4. 주소지정 5. 소켓에연결 6. 소켓을주소에바인딩하기 7. 클라이언트의연결요청처리 8. 데이터주고받기 9. IPv6의사용 3 목포해양대해양컴퓨터공학과

More information

vi 사용법

vi 사용법 네트워크프로그래밍 6 장과제샘플코드 - 1:1 채팅 (udp 버전 ) 과제 서버에서먼저 bind 하고그포트를다른사람에게알려줄것 클라이언트에서알려준포트로접속 서로간에키보드입력을받아상대방에게메시지전송 2 Makefile 1 SRC_DIR =../../common 2 COM_OBJS = $(SRC_DIR)/addressUtility.o $(SRC_DIR)/dieWithMessage.o

More information

2009년 상반기 사업계획

2009년 상반기 사업계획 소켓프로그래밍기초 IT CookBook, 유닉스시스템프로그래밍 학습목표 TCP/IP 프로토콜의기본개념을이해한다. IP 주소와포트번호의개념을이해한다. 소켓관련구조체와함수를이해한다. 소켓을이용한통신프로그램을작성할수있다. 2/42 목차 TCP/IP 개요 IP 주소와호스트명 포트번호 소켓프로그래밍기초 소켓인터페이스함수 유닉스도메인소켓예제 인터넷소켓예제 3/42 TCP/IP

More information

슬라이드 1

슬라이드 1 1 Computer Networks Practice #1-1 - Socket Programming 이지민 (jmlee@mmlab.snu.ac.kr) 장동현 (dhjang@mmlab.snu.ac.kr) 2011. 9. 14 2 Transport layer 가하는일 Reliability 패킷젂송에오류가생기면잧젂송함으로써마치 오류가나지않는것처럼 싞뢰된젂송을 Application

More information

Chapter 4 UDP 소켓 사용법

Chapter 4 UDP 소켓 사용법 Chapter 4 UDP 소켓사용법 개요 소켓이란 (Unix 소켓 ) 소켓의구조 소켓의유형 UDP 에대한이해 교재 Chapter 4.1 UDP 클라이언트 교재 Chapter 4.2 UDP 서버 교재 Chapter 4.3 UDP 소켓을이용한 송신및수신 소켓이란? Socket 은통신을위한끝점 (endpoint) 을생성하여파일에대한 open 과유사한방식으로기술자

More information

Microsoft PowerPoint - 09-CE-23-윈도우 소켓

Microsoft PowerPoint - 09-CE-23-윈도우 소켓 순천향대학교컴퓨터학부이상정 1 학습내용 인터넷과 TCP/IP 프로토콜 소켓의생성과해제 소켓주소표현 연결지향소켓프로그래밍 순천향대학교컴퓨터학부이상정 2 인터넷과 TCP/IP 프로토콜 순천향대학교컴퓨터학부이상정 3 인터넷구조의프로토콜계층 인터넷구조의프로토콜계층 응용계층 (application layer) 응용서비스제공 http, ftp, smtp, telnet,

More information

The Pocket Guide to TCP/IP Sockets: C Version

The Pocket Guide to  TCP/IP Sockets: C Version 인터넷프로토콜 03 장 도메인네임시스템과주소 패밀리 (IPv4-IPv6 서비스 ) 1 목차 제 3 장도메인네임시스템과주소패밀리 3.1 도메인네임주소를숫자주소로매핑하기 3.2 IP 버전에무관한주소-범용코드의작성 3.3 숫자주소에서도메인네임주소획득하기 2 getaddrinfo() 를활용한주소 범용 (Generic) 코드 주소범용 (Generic) 코드란? 주소버전

More information

Microsoft PowerPoint - Supplement-03-TCP Programming.ppt [호환 모드]

Microsoft PowerPoint - Supplement-03-TCP Programming.ppt [호환 모드] - Socket Programming in Java - 목차 소켓소개 자바에서의 TCP 프로그램작성방법 주요클래스와메소드 HTTP 프로토콜을이용한예제 에코프로그램 Q/A 에코프로그램 - EchoServer 에코프로그램 - EchoClient TCP Programming 1 소켓소개 IP, Port, and Socket 포트 (Port): 전송계층에서통신을수행하는응용프로그램을찾기위한주소

More information

The OSI Model

The OSI Model Advanced Socket Programming Department of Computer Engineering Kyung Hee University. Choong Seon Hong 1 다중처리기술 2 다중처리기술 Multitasking Multi-process Multi-thread Multiplexing Polling Selecting Interrupt

More information

Microsoft PowerPoint - all_CDSP_2(2009).ppt [호환 모드]

Microsoft PowerPoint - all_CDSP_2(2009).ppt [호환 모드] Contents Delivery Programming 2009 년 2 학기 숙명여자대학교정보과학부 멀티미디어과학전공 윤용익 yiyoon@sookmyung.ac.kr 강의목차 1 주 : 강의소개및 Part 1- Contents Delivery

More information

Microsoft PowerPoint - 03-TCP Programming.ppt

Microsoft PowerPoint - 03-TCP Programming.ppt Chapter 3. - Socket in Java - 목차 소켓소개 자바에서의 프로그램작성방법 주요클래스와메소드 HTTP 프로토콜을이용한예제 에코프로그램 에코프로그램 - EchoServer 에코프로그램 - EchoClient Q/A 1 1 소켓소개 IP,, and Socket 포트 (): 전송계층에서통신을수행하는응용프로그램을찾기위한주소 소켓 (Socket):

More information

슬라이드 1

슬라이드 1 23. Sockets Input/Output Operations 일반대학원컴퓨터과학과 최윤기 (filterk7@gmail.com) Connection-oriented Model Client-Server 간통싞전에, 미리핚쌍의소켓을연결해두는개념. socket() 의 type argument 에 SOCK_STREAM 으로지정. TCP(Transmission Control

More information

Microsoft PowerPoint - 15-EmbedSW-10-Socket

Microsoft PowerPoint - 15-EmbedSW-10-Socket 10. 소켓개요 TCP 클라이언트 / 서버프로그래밍절차 오드로이드 I/O 소켓프로그램예 순천향대학교컴퓨터공학과이상정 1 소켓 (Socket) 운영체제복습 소켓 (socket) 은통신의극점 (endpoint) 을정의 소켓은 IP 주소와포트번호두가지를접합 (concatenate) 해서구별 두프로세스의네트워크통신에각각하나씩두개의소켓이필요 순천향대학교컴퓨터공학과 2

More information

<43B7CE20BECBBEC6BAB8B4C220BCD2C4CFC7C1B7CEB1D7B7A1B9D62E687770>

<43B7CE20BECBBEC6BAB8B4C220BCD2C4CFC7C1B7CEB1D7B7A1B9D62E687770> C 로알아보는 소켓프로그래밍 이현환 (NOON) haonun@gmail.com http://noon.tistory.com Hacking Study Grup E.Y.E -------------------------------------------------------------------- 목차 --------------------------------------------------------------------

More information

SYN flooding

SYN flooding Hacking & Security Frontier SecurityFirst SYN flooding - SYN flooding 공격의원리와코드그리고대응 by amur, myusgun, leemeca 2008. 09. myusgun Agenda 개요...3 원리...3 위협...4 잠깐! - 문서에관하여...4 이문서는...4 Code...4 대응방안...4 소스코드...5

More information

<4D F736F F D2034C0E52D554E495820BCD2C4CF20C0C0BFEB20C7C1B7CEB1D7B7A1B9D6>

<4D F736F F D2034C0E52D554E495820BCD2C4CF20C0C0BFEB20C7C1B7CEB1D7B7A1B9D6> 4. UNIX 소켓응용프로그래밍 4.1 소켓의동작모드 소켓의동작모드 blocking, non-blocking, 그리고비동기 (asynchronous) 모드 소켓을처음생성하면 blocking 모드의소켓이생성 blocking 모드소켓 어떤소켓관련시스템콜을호출하였을때네트웍시스템 ( 즉, TCP/IP) 이동작을완료할때까지응용프로세스가멈추어있게 (block) 되는소켓

More information

Microsoft PowerPoint - 04-UDP Programming.ppt

Microsoft PowerPoint - 04-UDP Programming.ppt Chapter 4. UDP Dongwon Jeong djeong@kunsan.ac.kr http://ist.kunsan.ac.kr/ Dept. of Informatics & Statistics 목차 UDP 1 1 UDP 개념 자바 UDP 프로그램작성 클라이언트와서버모두 DatagramSocket 클래스로생성 상호간통신은 DatagramPacket 클래스를이용하여

More information

Microsoft Word - Network Programming_NewVersion_01_.docx

Microsoft Word - Network Programming_NewVersion_01_.docx 10. Unix Domain Socket 105/113 10. Unix Domain Socket 본절에서는 Unix Domain Socket(UDS) 에대한개념과이에대한실습을수행하고, 이와동시에비신뢰적인통신시스템의문제점에대해서분석하도록한다. 이번실습의목표는다음과같다. 1. Unix Domain Socket의사용법을익히고, IPC에대해서실습 2. TCP/IP의응용계층과전달계층의동작을구현및실습

More information

제1장 Unix란 무엇인가?

제1장  Unix란 무엇인가? 1 12 장파이프 2 12.1 파이프 파이프원리 $ who sort 파이프 3 물을보내는수도파이프와비슷 한프로세스는쓰기용파일디스크립터를이용하여파이프에데이터를보내고 ( 쓰고 ) 다른프로세스는읽기용파일디스크립터를이용하여그파이프에서데이터를받는다 ( 읽는다 ). 한방향 (one way) 통신 파이프생성 파이프는두개의파일디스크립터를갖는다. 하나는쓰기용이고다른하나는읽기용이다.

More information

본 강의에 들어가기 전

본 강의에 들어가기 전 인터넷프로토콜 02 장 TCP 소켓 목차 제 2 장 TCP 소켓 2.1 IPv4 TCP 클라이언트 2.2 IPv4 TCP 서버 2.3 소켓의생성과해지 2.4 주소지정 2.5 소켓에연결 2.6 소켓을주소에바인딩하기 2.7 클라이언트의연결요청처리 2.8 데이터주고받기 2.9 IPv6 의사용 소켓통신과정 간략화한소켓통신과정 소켓생성 TCP or UDP 소켓에주소정보할당

More information

The Pocket Guide to TCP/IP Sockets: C Version

The Pocket Guide to  TCP/IP Sockets: C Version 얇지만얇지않은 TCP/IP 소켓프로그래밍 C 2 판 Chap 3. Of Names and Address Families Chap. 3 Of Names and Address Families 3.1 도메인네임주소를숫자주소로매핑하기 3.2 IP 버전에무관한주소 - 범용코드의작성 3.3 숫자주소에서도메인네임주소획득하기 기존 IPv4 전용, IPv6 전용코드의취약성

More information

The Pocket Guide to TCP/IP Sockets: C Version

The Pocket Guide to  TCP/IP Sockets: C Version 인터넷프로토콜 5 장 데이터송수신 (3) 1 파일전송메시지구성예제 ( 고정크기메시지 ) 전송방식 : 고정크기 ( 바이너리전송 ) 필요한전송정보 파일이름 ( 최대 255 자 => 255byte 의메모리공간필요 ) 파일크기 (4byte 의경우최대 4GB 크기의파일처리가능 ) 파일내용 ( 가변길이, 0~4GB 크기 ) 메시지구성 FileName (255bytes)

More information

Microsoft PowerPoint PythonGUI-socket

Microsoft PowerPoint PythonGUI-socket : 채팅프로그래밍 순천향대학교컴퓨터공학과 이상정 순천향대학교컴퓨터공학과 1 학습내용 인터넷구조 인터넷구성요소 인터넷주소 클라이언트 / 서버구조 소켓프로그래밍소개 파이썬소켓프로그래밍 TCP 클라이언트 / 서버프로그래밍 스레드소개 파이썬스레드 채팅클라이언트 / 서버프로그램 순천향대학교컴퓨터공학과 2 네트워크요소 네트워크가장자리 (edge) 호스트 : 클라이언트와서버

More information

Microsoft PowerPoint - Lecture_Note_7.ppt [Compatibility Mode]

Microsoft PowerPoint - Lecture_Note_7.ppt [Compatibility Mode] Unix Process Department of Computer Engineering Kyung Hee University. Choong Seon Hong 1 유닉스기반다중서버구현방법 클라이언트들이동시에접속할수있는서버 서비스를동시에처리할수있는서버프로세스생성을통한멀티태스킹 (Multitasking) 서버의구현 select 함수에의한멀티플렉싱 (Multiplexing)

More information

6주차.key

6주차.key 6, Process concept A program in execution Program code PCB (process control block) Program counter, registers, etc. Stack Heap Data section => global variable Process in memory Process state New Running

More information

The Pocket Guide to TCP/IP Sockets: C Version

The Pocket Guide to  TCP/IP Sockets: C Version 인터넷프로토콜 03 장 도메인네임시스템과주소 패밀리 (IPv4-IPv6 서비스 ) 1 목포해양대해양컴퓨터공학과 목차 제 3 장도메인네임시스템과주소패밀리 3.1 도메인네임주소를숫자주소로매핑하기 3.2 IP 버전에무관한주소-범용코드의작성 3.3 숫자주소에서도메인네임주소획득하기 2 목포해양대해양컴퓨터공학과 기존 IPv4 전용, IPv6 전용코드의 취약성 전용주소코드

More information

<C0CCBCBCBFB52DC1A4B4EBBFF82DBCAEBBE7B3EDB9AE2D313939392D382E687770>

<C0CCBCBCBFB52DC1A4B4EBBFF82DBCAEBBE7B3EDB9AE2D313939392D382E687770> i ii iii iv v vi 1 2 3 4 가상대학 시스템의 국내외 현황 조사 가상대학 플랫폼 개발 이상적인 가상대학시스템의 미래상 제안 5 웹-기반 가상대학 시스템 전통적인 교수 방법 시간/공간 제약을 극복한 학습동기 부여 교수의 일방적인 내용전달 교수와 학생간의 상호작용 동료 학생들 간의 상호작용 가상대학 운영 공지사항,강의록 자료실, 메모 질의응답,

More information

The Pocket Guide to TCP/IP Sockets: C Version

The Pocket Guide to  TCP/IP Sockets: C Version 얇지만얇지않은 TCP/IP 소켓프로그래밍 C 2 판 Chap 2. Basic TCP Sockets Chap. 2 Basic TCP Sockets 2.1 IPv4 TCP 클라이언트 2.2 IPv4 TCP 서버 2.3 소켓의생성과해지 2.4 주소지정 2.5 소켓에연결 2.6 소켓을주소와바인딩하기 2.7 클라이언트의연결요청처리 2.8 데이터주고받기 2.9 IPv6의사용

More information

1장. 유닉스 시스템 프로그래밍 개요

1장.  유닉스 시스템 프로그래밍 개요 9 장. 파이프 Unix 프로그래밍및실습 1 강의내용 1 절개요 2 절이름없는파이프 3 절이름있는파이프 http://lily.mmu.ac.kr/lecture/13u2/ch09.pdf 책에나온내용반드시 man 으로확인할것! UNIX, LINUX 등시스템마다차이가있을수있음을반드시인식 2 기본실습 #1 [ 예제 9-1] ~ [ 예제 9-7] ( 각 10점 ) 과제개요

More information

3. 다음장에나오는 sigprocmask 함수의설명을참고하여다음프로그램의출력물과그출력물이화면이표시되는시점을예측하세요. ( 힌트 : 각줄이표시되는시점은다음 4 가지중하나. (1) 프로그램수행직후, (2) kill 명령실행직후, (3) 15 #include <signal.

3. 다음장에나오는 sigprocmask 함수의설명을참고하여다음프로그램의출력물과그출력물이화면이표시되는시점을예측하세요. ( 힌트 : 각줄이표시되는시점은다음 4 가지중하나. (1) 프로그램수행직후, (2) kill 명령실행직후, (3) 15 #include <signal. 학번 : 이름 : 1. 다음가정하에서아래프로그램의출력물을예측하세요. 가정 : 부모프로세스의 process id=20100, 자식프로세스의 process id=20101. int glob = 31; /* external variable in initialized data */ char buf[] = "a write to stdout\n"; int main(void)

More information

임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과

임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과 임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과 System call table and linkage v Ref. http://www.ibm.com/developerworks/linux/library/l-system-calls/ - 2 - Young-Jin Kim SYSCALL_DEFINE 함수

More information

3. 다음장에나오는 sigprocmask 함수의설명을참고하여다음프로그램의출력물과그출력물이화면이표시되는시점을예측하세요. ( 힌트 : 각줄이표시되는시점은다음 6 가지중하나. (1) 프로그램수행직후, (2) 5 초후 (3) 10 초후 (4) 15 #include <signa

3. 다음장에나오는 sigprocmask 함수의설명을참고하여다음프로그램의출력물과그출력물이화면이표시되는시점을예측하세요. ( 힌트 : 각줄이표시되는시점은다음 6 가지중하나. (1) 프로그램수행직후, (2) 5 초후 (3) 10 초후 (4) 15 #include <signa 학번 : 이름 : 1. 다음가정하에서아래프로그램의출력물을예측하세요. 가정 : 부모프로세스의 process id=10100, 자식프로세스의 process id=10101. char buf[] = "a write to stdout\n"; int var; /* automatic variable on the stack */ pid_t pid; int glob = 31;

More information

Microsoft PowerPoint - ch09_파이프 [호환 모드]

Microsoft PowerPoint - ch09_파이프 [호환 모드] 학습목표 파이프를이용한 IPC 기법을이해한다. 이름없는파이프를이용해통신프로그램을작성할수있다. 이름있는파이프를이용해통신프로그램을작성할수있다. 파이프 IT CookBook, 유닉스시스템프로그래밍 2/20 목차 파이프의개념 이름없는파이프만들기 복잡한파이프생성 양방향파이프활용 이름있는파이프만들기 파이프의개념 파이프 두프로세스간에통신할수있도록해주는특수파일 그냥파이프라고하면일반적으로이름없는파이프를의미

More information

2009년 상반기 사업계획

2009년 상반기 사업계획 파이프 IT CookBook, 유닉스시스템프로그래밍 학습목표 파이프를이용한 IPC 기법을이해한다. 이름없는파이프를이용해통신프로그램을작성할수있다. 이름있는파이프를이용해통신프로그램을작성할수있다. 2/20 목차 파이프의개념 이름없는파이프만들기 복잡한파이프생성 양방향파이프활용 이름있는파이프만들기 3/20 파이프의개념 파이프 두프로세스간에통신할수있도록해주는특수파일 그냥파이프라고하면일반적으로이름없는파이프를의미

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 KeyPad Device Control - Device driver Jo, Heeseung HBE-SM5-S4210 에는 16 개의 Tack Switch 를사용하여 4 행 4 열의 Keypad 가장착 4x4 Keypad 2 KeyPad 를제어하기위하여 FPGA 내부에 KeyPad controller 가구현 KeyPad controller 16bit 로구성된

More information

슬라이드 1

슬라이드 1 / 유닉스시스템개요 / 파일 / 프로세스 01 File Descriptor file file descriptor file type unix 에서의파일은단지바이트들의나열임 operating system 은파일에어떤포맷도부과하지않음 파일의내용은바이트단위로주소를줄수있음 file descriptor 는 0 이나양수임 file 은 open 이나 creat 로 file

More information

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D> 리눅스 오류처리하기 2007. 11. 28 안효창 라이브러리함수의오류번호얻기 errno 변수기능오류번호를저장한다. 기본형 extern int errno; 헤더파일 라이브러리함수호출에실패했을때함수예 정수값을반환하는함수 -1 반환 open 함수 포인터를반환하는함수 NULL 반환 fopen 함수 2 유닉스 / 리눅스 라이브러리함수의오류번호얻기 19-1

More information

10. 시스템 프로그래밍

10.  시스템 프로그래밍 네트워크프로그래밍 Unix Network Programming, 2nd Ed., W. Richard Stevens, Prentice Hall PTR, 1999. 한국어판 Unix Network Programming, Stevens 저, 김치하, 이재용역, 대영사, 1991. 컴퓨터네트워크프로그래밍, 개정판, 김화종, 홍릉과학출판사, 2000. 10.7 소켓

More information

Chapter #01 Subject

Chapter #01  Subject Device Driver March 24, 2004 Kim, ki-hyeon 목차 1. 인터럽트처리복습 1. 인터럽트복습 입력검출방법 인터럽트방식, 폴링 (polling) 방식 인터럽트서비스등록함수 ( 커널에등록 ) int request_irq(unsigned int irq, void(*handler)(int,void*,struct pt_regs*), unsigned

More information

자바-11장N'1-502

자바-11장N'1-502 C h a p t e r 11 java.net.,,., (TCP/IP) (UDP/IP).,. 1 ISO OSI 7 1977 (ISO, International Standards Organization) (OSI, Open Systems Interconnection). 6 1983 X.200. OSI 7 [ 11-1] 7. 1 (Physical Layer),

More information

슬라이드 1

슬라이드 1 -Part3- 제 4 장동적메모리할당과가변인 자 학습목차 4.1 동적메모리할당 4.1 동적메모리할당 4.1 동적메모리할당 배울내용 1 프로세스의메모리공간 2 동적메모리할당의필요성 4.1 동적메모리할당 (1/6) 프로세스의메모리구조 코드영역 : 프로그램실행코드, 함수들이저장되는영역 스택영역 : 매개변수, 지역변수, 중괄호 ( 블록 ) 내부에정의된변수들이저장되는영역

More information

10.

10. 10. 10.1 10.2 Library Routine: void perror (char* str) perror( ) str Error 0 10.3 10.3 int fd; /* */ fd = open (filename, ) /*, */ if (fd = = -1) { /* */ } fcnt1 (fd, ); /* */ read (fd, ); /* */ write

More information

Microsoft PowerPoint - Lecture_Note_2.ppt [Compatibility Mode]

Microsoft PowerPoint - Lecture_Note_2.ppt [Compatibility Mode] Understanding of Socket and File I/O Department of Computer Engineering Kyung Hee University. Choong Seon Hong 1 컴퓨터통신프로토콜 컴퓨터통신프로토콜데이터를원활이주고받을수있도록정한약속컴퓨터네트워크프로토콜 통신장비는서로간의통신방법이미리정의되어있어야함 같은통신프로토콜을지원하는장비간에만통신이가능컴퓨터통신은네트워크형태로운영

More information

Microsoft PowerPoint - chap06-2pointer.ppt

Microsoft PowerPoint - chap06-2pointer.ppt 2010-1 학기프로그래밍입문 (1) chapter 06-2 참고자료 포인터 박종혁 Tel: 970-6702 Email: jhpark1@snut.ac.kr 한빛미디어 출처 : 뇌를자극하는 C프로그래밍, 한빛미디어 -1- 포인터의정의와사용 변수를선언하는것은메모리에기억공간을할당하는것이며할당된이후에는변수명으로그기억공간을사용한다. 할당된기억공간을사용하는방법에는변수명외에메모리의실제주소값을사용하는것이다.

More information

Microsoft PowerPoint - chap13-입출력라이브러리.pptx

Microsoft PowerPoint - chap13-입출력라이브러리.pptx #include int main(void) int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; 1 학습목표 스트림의 기본 개념을 알아보고,

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Web server porting 2 Jo, Heeseung Web 을이용한 LED 제어 Web 을이용한 LED 제어프로그램 web 에서데이터를전송받아타겟보드의 LED 를조작하는프로그램을작성하기위해다음과같은소스파일을생성 2 Web 을이용한 LED 제어 LED 제어프로그램작성 8bitled.html 파일을작성 root@ubuntu:/working/web# vi

More information

9장 윈도우 소켓 프로그래밍

9장   윈도우 소켓 프로그래밍 윈도우소켓프로그래밍 _A_2015 버전 IT CookBook, 윈도우 API 프로그래밍 한빛미디어의윈도우 API 프로그래밍, 윈도우네트워크프로그래밍, 혜지원 API programming 을참조함! Updated 2015.11.22 1 학습목표 TCP/IP 프로토콜의개념을이해하고, 윈도우프로그래밍을이용한간단한채팅프로그램을작성하여이해도를높인다. 내용 소켓연결 메시지교환

More information

Microsoft Word - KPMC-400,401 SW 사용 설명서

Microsoft Word - KPMC-400,401 SW 사용 설명서 LKP Ethernet Card SW 사용설명서 Version Information Tornado 2.0, 2.2 알 림 여기에실린내용은제품의성능향상과신뢰도의증대를위하여예고없이변경될수도있습니다. 여기에실린내용의일부라도엘케이일레븐의사전허락없이어떠한유형의매체에복사되거나저장될수없으며전기적, 기계적, 광학적, 화학적인어떤방법으로도전송될수없습니다. 엘케이일레븐경기도성남시중원구상대원동

More information

1. What is AX1 AX1 Program은 WIZnet 사의 Hardwired TCP/IP Chip인 iinchip 들의성능평가및 Test를위해제작된 Windows 기반의 PC Program이다. AX1은 Internet을통해 iinchip Evaluation

1. What is AX1 AX1 Program은 WIZnet 사의 Hardwired TCP/IP Chip인 iinchip 들의성능평가및 Test를위해제작된 Windows 기반의 PC Program이다. AX1은 Internet을통해 iinchip Evaluation 1. What is AX1 AX1 Program은 WIZnet 사의 Hardwired TCP/IP Chip인 iinchip 들의성능평가및 Test를위해제작된 Windows 기반의 PC Program이다. AX1은 Internet을통해 iinchip Evaluation Board(EVB B/D) 들과 TCP/IP Protocol로연결되며, 연결된 TCP/IP

More information

ABC 11장

ABC 11장 12 장고급응용 0 수행중인프로그램 프로세스 모든프로세스는유일한프로세스식별번호 (PID) 를가짐 유닉스에서는 ps 명령을사용하여프로세스목록을볼수있음 12-1 프로세스 $ ps -aux USER PID %CPU %MEM SZ RSS TT STAT START TIME COMMAND blufox 17725 34.0 1.6 146 105 i2 R 15:13 0:00

More information

Unix Network Programming Chapter 4. Elementary TCP Sockets

Unix Network Programming Chapter 4. Elementary TCP Sockets Unix Network Programming Chapter 14. Advanced I/O Functions 광운대학교컴퓨터과학과 정보통신연구실 석사과정안중현 14.1 Introduction 이장에서소개되고있는내용 I/O operation 에서 timeout 을설정하는세가지방법 세가지 Read/Write 관련함수 recv/send readv/writev recvmsg/sendmsg

More information

Microsoft PowerPoint - 09-Pipe

Microsoft PowerPoint - 09-Pipe 9. 파이프 상명대학교소프트웨어학부 파이프 시그널은이상한사건이나오류를처리하는데는이용하지만, 한프로세스로부터다른프로세스로대량의정보를전송하는데는부적합하다. 파이프 한프로세스를다른관련된프로세스에연결시켜주는단방향의통신채널 2 pipe() Usage #include int pipe(int filedes[2]); 3 < ex_1.c > #include

More information

bn2019_2

bn2019_2 arp -a Packet Logging/Editing Decode Buffer Capture Driver Logging: permanent storage of packets for offline analysis Decode: packets must be decoded to human readable form. Buffer: packets must temporarily

More information

chap7.key

chap7.key 1 7 C 2 7.1 C (System Calls) Unix UNIX man Section 2 C. C (Library Functions) C 1975 Dennis Ritchie ANSI C Standard Library 3 (system call). 4 C?... 5 C (text file), C. (binary file). 6 C 1. : fopen( )

More information

SMB_ICMP_UDP(huichang).PDF

SMB_ICMP_UDP(huichang).PDF SMB(Server Message Block) UDP(User Datagram Protocol) ICMP(Internet Control Message Protocol) SMB (Server Message Block) SMB? : Microsoft IBM, Intel,. Unix NFS. SMB client/server. Client server request

More information

Chap06(Interprocess Communication).PDF

Chap06(Interprocess Communication).PDF Interprocess Communication 2002 2 Hyun-Ju Park Introduction (interprocess communication; IPC) IPC data transfer sharing data event notification resource sharing process control Interprocess Communication

More information

The Pocket Guide to TCP/IP Sockets: C Version

The Pocket Guide to  TCP/IP Sockets: C Version 중급소켓프로그래밍 (3) 네트워크프로그래밍 6 장 1 목차 제 6장중급소켓프로그래밍 6.1 소켓옵션 6.2 시그널 6.3 넌블로킹입 / 출력 6.4 멀티태스킹 6.5 멀티플렉싱 6.6 다수의수싞자처리 2 멀티태스킹 멀티태스킹이란? 사젂적의미 한사람의사용자가한대의컴퓨터로 2 가지이상의작업을동시에처리하거나, 2 가지이상의프로그램들을동시에실행시키는것 소켓에서의멀티태스킹

More information

TCP.IP.ppt

TCP.IP.ppt TCP/IP TCP/IP TCP/IP TCP/IP TCP/IP Internet Protocol _ IP Address Internet Protocol _ Subnet Mask Internet Protocol _ ARP(Address Resolution Protocol) Internet Protocol _ RARP(Reverse Address Resolution

More information

Microsoft PowerPoint - ch09 - 연결형리스트, Stack, Queue와 응용 pm0100

Microsoft PowerPoint - ch09 - 연결형리스트, Stack, Queue와 응용 pm0100 2015-1 프로그래밍언어 9. 연결형리스트, Stack, Queue 2015 년 5 월 4 일 교수김영탁 영남대학교공과대학정보통신공학과 (Tel : +82-53-810-2497; Fax : +82-53-810-4742 http://antl.yu.ac.kr/; E-mail : ytkim@yu.ac.kr) 연결리스트 (Linked List) 연결리스트연산 Stack

More information

금오공대 컴퓨터공학전공 강의자료

금오공대 컴퓨터공학전공 강의자료 C 프로그래밍프로젝트 Chap 14. 포인터와함수에대한이해 2013.10.09. 오병우 컴퓨터공학과 14-1 함수의인자로배열전달 기본적인인자의전달방식 값의복사에의한전달 val 10 a 10 11 Department of Computer Engineering 2 14-1 함수의인자로배열전달 배열의함수인자전달방식 배열이름 ( 배열주소, 포인터 ) 에의한전달 #include

More information

<4D F736F F F696E74202D20B3D7C6AEBFF6C5A9C7C1B7CEB1D7B7A1B9D65F FBCD2C4CF5FC3A4C6C35FBFA1C4DA2E BC8A3C8A

<4D F736F F F696E74202D20B3D7C6AEBFF6C5A9C7C1B7CEB1D7B7A1B9D65F FBCD2C4CF5FC3A4C6C35FBFA1C4DA2E BC8A3C8A 학습목표 자바의소켓포트의개념을이해한다 네트워크프로그래밍 클라이언트통신프로그램의구조를이해한다 소켓과클라이언트소켓을구분하여이해한다 11 주소켓 - 애코김문정 tops@u1.ac.kr 2 포트 (port) 데이터송수신창구 0~65536 (0~1024 : well-known port) ServerSocket 클래스 ( 소켓 ) ServerSocket 클래스에사용되는클래스

More information

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Function) 1. 함수의개념 입력에대해적절한출력을발생시켜주는것 내가 ( 프로그래머 ) 작성한명령문을연산, 처리, 실행해주는부분 ( 모듈 ) 자체적으로실행되지않으며,

More information

좀비프로세스 2

좀비프로세스 2 Signal & Inter-Process Communication Department of Computer Engineering Kyung Hee University. Choong Seon Hong 1 좀비프로세스 2 좀비프로세스 (zombie process) 좀비프로세스란프로세스종료후메모리상에서사라지지않는프로세스 좀비프로세스의생성이유. 자식프로세스는부모프로세스에게실행결과에대한값을반환해야한다.

More information

Microsoft PowerPoint UnixNetProg.ppt [호환 모드]

Microsoft PowerPoint UnixNetProg.ppt [호환 모드] 유닉스네트워크프로그래밍 Unix Network Programming, 2nd Ed., W. Richard Stevens, Prentice Hall PTR, 1999. 한국어판 Unix Network Programming, 2nd Ed., W. Richard Stevens 저, 김치하, 이재용편역, 교보문고, 1999. 컴퓨터네트워크프로그래밍, 개정판, 김화종,

More information

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx #include int main(void) { int num; printf( Please enter an integer "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; } 1 학습목표 을 작성하면서 C 프로그램의

More information

Microsoft PowerPoint - ch07 - 포인터 pm0415

Microsoft PowerPoint - ch07 - 포인터 pm0415 2015-1 프로그래밍언어 7. 포인터 (Pointer), 동적메모리할당 2015 년 4 월 4 일 교수김영탁 영남대학교공과대학정보통신공학과 (Tel : +82-53-810-2497; Fax : +82-53-810-4742 http://antl.yu.ac.kr/; E-mail : ytkim@yu.ac.kr) Outline 포인터 (pointer) 란? 간접참조연산자

More information

학번 : 이름 1. 다음프로그램실행결과를예측하시오. $./a.out & [1] 7216 $ kill -USR $ kill -USR 아래학생이작성한쓰레드코드의문제점을설명하시오. void* thread_main() { pthread_mutex_t

학번 : 이름 1. 다음프로그램실행결과를예측하시오. $./a.out & [1] 7216 $ kill -USR $ kill -USR 아래학생이작성한쓰레드코드의문제점을설명하시오. void* thread_main() { pthread_mutex_t 학번 : 이름 1. 다음프로그램실행결과를예측하시오. $./a.out & [1] 7216 $ kill -USR1 7216 $ kill -USR2 7216 2. 아래학생이작성한쓰레드코드의문제점을설명하시오. void* thread_main() pthread_mutex_t lock=pthread_mutex_initializer; pthread_mutex_lock(&lock);

More information

11장 포인터

11장 포인터 Dynamic Memory and Linked List 1 동적할당메모리의개념 프로그램이메모리를할당받는방법 정적 (static) 동적 (dynamic) 정적메모리할당 프로그램이시작되기전에미리정해진크기의메모리를할당받는것 메모리의크기는프로그램이시작하기전에결정 int i, j; int buffer[80]; char name[] = data structure"; 처음에결정된크기보다더큰입력이들어온다면처리하지못함

More information

IPv6 적용

IPv6 적용 IPv6 적용 1 IPv6 기본규격 2 IPv6 Basic header 3 IPv6 - Extension Headers (1) Hop-by-Hop Options (0) RSVP, PIM/MLD, etc. Routing (43) Source Routing, MIPv6 Fragment (44) Encapsulating Security Payload (50) IPsec

More information

hd132x_k_v1r3_Final_.PDF

hd132x_k_v1r3_Final_.PDF HelloDevice ( HD1320E/1320/1321) Version 11 1 2 1 2 3 31 HD1320/1320E 311 312 313 RS232 32 HD1321 321 322 33 4 41 42 421 HD1320/1320E 422 HD1321 43 431 IP 432 IP 44 441 442 443 RS232 5 51 52 521 TCP 522

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 System Software Experiment 1 Lecture 5 - Array Spring 2019 Hwansoo Han (hhan@skku.edu) Advanced Research on Compilers and Systems, ARCS LAB Sungkyunkwan University http://arcs.skku.edu/ 1 배열 (Array) 동일한타입의데이터가여러개저장되어있는저장장소

More information

0x00 Contents 0x About Nickster 0x Analaysis 0x Exploit

0x00 Contents 0x About Nickster 0x Analaysis 0x Exploit Defcon CTF 17 th Nickster Report StolenByte(Son Choong-Ho) http://stolenbyte.egloos.com thscndgh_4@hotmail.com WOWHACKER 2009. 08. 09 0x00 Contents 0x01 ------------- About Nickster 0x02 -------------

More information

게시판 스팸 실시간 차단 시스템

게시판 스팸 실시간 차단 시스템 오픈 API 2014. 11-1 - 목 차 1. 스팸지수측정요청프로토콜 3 1.1 스팸지수측정요청프로토콜개요 3 1.2 스팸지수측정요청방법 3 2. 게시판스팸차단도구오픈 API 활용 5 2.1 PHP 5 2.1.1 차단도구오픈 API 적용방법 5 2.1.2 차단도구오픈 API 스팸지수측정요청 5 2.1.3 차단도구오픈 API 스팸지수측정결과값 5 2.2 JSP

More information

[ 네트워크 1] 3 주차 1 차시. IPv4 주소클래스 3 주차 1 차시 IPv4 주소클래스 학습목표 1. IP 헤더필드의구성을파악하고요약하여설명할수있다. 2. Subnet ID 및 Subnet Mask 를설명할수있고, 각클래스의사용가능한호스트수와사설 IP 주소및네트

[ 네트워크 1] 3 주차 1 차시. IPv4 주소클래스 3 주차 1 차시 IPv4 주소클래스 학습목표 1. IP 헤더필드의구성을파악하고요약하여설명할수있다. 2. Subnet ID 및 Subnet Mask 를설명할수있고, 각클래스의사용가능한호스트수와사설 IP 주소및네트 3 주차 1 차시 IPv4 주소클래스 학습목표 1. IP 헤더필드의구성을파악하고요약하여설명할수있다. 2. Subnet ID 및 Subnet Mask 를설명할수있고, 각클래스의사용가능한호스트수와사설 IP 주소및네트워크주소와 브로드캐스트주소를설명할수있다. 학습내용 1 : IP 헤더필드구성 1. Network Layer Fields 2. IP 헤더필드의구성 1)

More information

1217 WebTrafMon II

1217 WebTrafMon II (1/28) (2/28) (10 Mbps ) Video, Audio. (3/28) 10 ~ 15 ( : telnet, ftp ),, (4/28) UDP/TCP (5/28) centralized environment packet header information analysis network traffic data, capture presentation network

More information

<4D F736F F F696E74202D20C1A63235C0E520B3D7C6AEBFF6C5A920C7C1B7CEB1D7B7A1B9D628B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D20C1A63235C0E520B3D7C6AEBFF6C5A920C7C1B7CEB1D7B7A1B9D628B0ADC0C729205BC8A3C8AF20B8F0B5E55D> Power Java 제 25 장네트워크프로그래밍 이번장에서학습할내용 네트워크프로그래밍의개요 URL 클래스 TCP를이용한통신 TCP를이용한서버제작 TCP를이용한클라이언트제작 UDP 를이용한통신 자바를이용하여서 TCP/IP 통신을이용하는응응프로그램을작성하여봅시다. 서버와클라이언트 서버 (Server): 사용자들에게서비스를제공하는컴퓨터 클라이언트 (Client):

More information

Microsoft Word doc

Microsoft Word doc TCP/IP 구조 1. I.P 구조설명 2. ARP 구조설명 3. TCP 구조설명 4. UDT 구조설명 5. RIP 구조설명 6. BOOTP 구조설명 7. TFTP 구조설명 destination addr source addr type data CRC 6 6 2 46-1500 4 type 0X0800 IP datagram 2 46-1500 type 0X0806

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 (Host) set up : Linux Backend RS-232, Ethernet, parallel(jtag) Host terminal Target terminal : monitor (Minicom) JTAG Cross compiler Boot loader Pentium Redhat 9.0 Serial port Serial cross cable Ethernet

More information

Microsoft PowerPoint APUE(File InO).pptx

Microsoft PowerPoint APUE(File InO).pptx Linux/UNIX Programming 문양세강원대학교 IT대학컴퓨터과학전공 강의목표및내용 강의목표 파일의특성을이해한다. 파일을열고닫는다. 파일로부터데이터를읽고쓴다. 기타파일제어함수를익힌다. 강의내용 파일구조 (UNIX 파일은어떤구조일까?) 파일관련시스템호출 시스템호출의효율과구조 Page 2 What is a File? A file is a contiguous

More information

Microsoft PowerPoint - UnixNetProg.ppt [호환 모드]

Microsoft PowerPoint - UnixNetProg.ppt [호환 모드] 유닉스네트워크프로그래밍 Unix Network Programming, 2nd Ed., W. Richard Stevens, Prentice Hall PTR, 1999. 한국어판 Unix Network Programming, 2nd Ed., W. Richard Stevens 저, 김치하, 이재용편역, 교보문고, 1999. 컴퓨터네트워크프로그래밍, 개정판, 김화종,

More information

Microsoft PowerPoint - 3ÀÏ°_º¯¼ö¿Í »ó¼ö.ppt

Microsoft PowerPoint - 3ÀÏ°_º¯¼ö¿Í »ó¼ö.ppt 변수와상수 1 변수란무엇인가? 변수 : 정보 (data) 를저장하는컴퓨터내의특정위치 ( 임시저장공간 ) 메모리, register 메모리주소 101 번지 102 번지 변수의크기에따라 주로 byte 단위 메모리 2 기본적인변수형및변수의크기 변수의크기 해당컴퓨터에서는항상일정 컴퓨터마다다를수있음 short

More information