*경*
Bronze개인
팔로워0 팔로우
소개
등록된 소개글이 없습니다.
전문분야 등록된 전문분야가 없습니다.
판매자 정보
학교정보
입력된 정보가 없습니다.
직장정보
입력된 정보가 없습니다.
자격증
  • 입력된 정보가 없습니다.
판매지수
전체자료 4
검색어 입력폼
  • [리눅스 프로그래밍] IPC 프로그래밍
    초고속 통신망제 7주차 실험ㆍ실습 결과 보고서- IPC -실험일자2004/10/14담당조교담당교수조학번성명1. 제목 : IPC2. 목적메시지큐, 파이프, 공유메모리, 세마포어, 뮤텍스 등과 같은 기본적인 IPC 설비의 개념을 이해하고 이를 이용한 간단한 프로그램을 작성한다..3. 기초 지식리눅스 개발환경에 대한 이해운영체제 기초4. 준비물임베디드시스템 응용프로그래밍(강의 홈페이지 자료실 제공)LDS2000 매뉴얼5. 실험ㆍ실습의 구체적인 절차 (Step By Step)IPC 정의IPC란?프로세스간에 정보를 주고 받는 것InterProcess Communication(IPC)종류통신방법에 따라Connection-based 또는 stream-basedConnection-less 또는 message-based기타 : 데이터블록, exit status, 시그널호스트 범위에 따라동일 호스트네트워크연결방법에 따라관련된 프로세스를 통해서IPC를 위해 생성된 파일 시스템 객체 이용연결에 사용되는 기존 파일명 사용인터넷 주소프로그램 구별자 또는 핸들에 따라파일기술자(file descriptor)System V IPC 구별자(identifier)가상주소(Vitual address)IPC의 종류IPC통신 특징호스트 범위연결방법프로그램구별자 / 핸들Exit Status정수값동일 호스트자식프로세스가 부모프로세스에게없음Signal시그널 번호동일 호스트목적지 PID시그널번호mmap system call데이터영역동일 호스트파일명가상주소Pipe데이터스트림동일 호스트없음파일기술자FIFO데이터스트림동일 호스트파일명파일기술자System V- 메시지 큐- 공유 메모리- 세마포어메시지데이터영역동기화동일 호스트파일명IPC_PRIVATEIPC ID소켓데이터스트림/ 메시지동일 호스트네트워크파일명인터넷주소파일기술자TLI데이터스트림/ 메시지동일 호스트네트워크파일명인터넷주소파일기술자Message Queue메시지 큐는 파이프와 유사파이프 : 스트림 기반으로 동작메시지 큐 : 메시지(또는 패킷) 단위로 동작각 메 블록모드(메시지 큐가 꽉 찰 경우)IPC_NOWAIT : non-blockingmsgrcv() 함수msgsnd() 함수로 전송한 메시지를 수신하는 함수이다.#include int msgrcv(int msqid, const void *msgp, size_t msgsz, long msgtyp, int msgflg);[문법]msgmsqid : 메시지 큐 IDmsgp : 메시지를 수신할 메시지 버퍼(struct msgbuf)의 주소msgsz : 수신하는 메시지 버퍼의 크기msgtyp : 메시지 수신 방법 구분0 : 메시지 큐의 첫 번째 메시지부터 읽음+n : 메시지 큐에 수신된 메시지 중 유형이 n인 첫 번째 메시지 읽음-n : 유형이 n보다 작거나 같은 메시지중 첫 번째 것 읽음msgflg0 : 블록모드(메시지 큐가 빈 경우)IPC_NOWAIT : non-blockingmsgctl() 함수msgctl() 함수는 IPC 객체를 제거하거나, 상태정보를 설정하고 읽어오는 등 다양한 제어를 수행하기 위한 함수msgc시() 함수는 첫 번째 매개변수로 지정된 메시지 큐에 두 번째 매개변수로 지정된 제어를 수행세 번째 매개변수는 두 번째 매개변수에 따라 제어값을 지정하는데 사용[문법]#include int msgctl(int msqid, int cmd, struct msqid_ds *buf);msqid : 메시지 큐 IDcmd : 수행할 명령지정(/usr/include/sys/ipc.h)IPC_RMID(10)IPC_SET(11)IPC_STAT(12)buf : 명령에 따른 설정값 지정공유 메모리공유메모리는 프로세스의 일부분이 다른 프로세스와 공유되도록 하는 것을 의미즉 메모리의 일부 공간을 두 개의 독립적인 프로세스가 공유하는 것shmget() : 공유메모리 공간 할당shmat() : 할당된 메모리 공간을 사용자 프로세스의 주소공간에 매핑shmdt() : 사용자 프로세스의 주소공간에 매핑된 공유메모리를 분리shmctl() : 공유메모리 객체에 대한 제어기능 제공shmget() 한다. 파일의 끝에 다다르면 파일의 끝을 알리는 EOF를 클라이언트에게 마지막으로 보낸 뒤 종료한다.클라이언트 : 메시지큐를 생성한 뒤 사용자의 입력에 따라 각각 파일전송 또는 메시지큐 삭제, 메시지큐 모드 변경 등의 명령을 수행한다. 파일 전송을 선택하게 되면 서버로부터 일단 파일의 이름을 전송 받는다. 파일의 이름 앞에 “tesmp_”를 붙인 뒤 파일을 생성하고 연다. 열려 진 파일에 서버로부터 전송되는 데이터를 한 바이트 씩 쓴다. 파일의 끝을 알리는 EOF 가 전송되면 파일의 쓰는 작업을 중단하고 파일을 닫은 뒤 종료한다.파일 전송 프로그램 server / ClientServer#include #include #include #include #include #include #define MAX_SEND_SIZE 80struct mymsgbuf {long mtype;char mtext[MAX_SEND_SIZE];};void send_message(int qid, struct mymsgbuf *qbuf, long type, char *text);void remove_queue(int qid);void change_queue_mode(int qid, char *mode);void usage(void);int main(int argc, char *argv[]){key_t key;int msgqueue_id;struct mymsgbuf qbuf;if (argc == 1) usage();key = ftok(".", 'm');/* ftok() 호출을 통해 유일한 키를 만든다 *//* 필요하다면 큐를 만들고 연다 */if ((msgqueue_id = msgget(key, IPC_CREAT|0660)) == -1){perror("msgget");exit(1);}switch (tolower(argv[1][0])){case 's': send_message(msgqueue_id, (struct mymsgbuf*)&qbuf,atol(argv[2]), argv[3]);breakPC_RMID, 0);}void change_queue_mode(int qid, char *mode){struct msqid_ds myqueue_ds;/* 현재 정보를 읽는다 */msgctl(qid, IPC_STAT, &myqueue_ds);sscanf(mode, "%ho", &myqueue_ds.msg_perm.mode);msgctl(qid, IPC_SET, &myqueue_ds); /* 모드를 수정한다 */}void usage(void){fprintf(stderr, "msgtool - A utility for tinkering with msg queuesn");fprintf(stderr, "nUSAGE: msgtool msgnum (s)end FILENAME n");fprintf(stderr, "nUSAGE: msgtool (d)elete n");fprintf(stderr, "nUSAGE: msgtool (m)ode n");exit(1);}Client#include #include #include #include #include #include #define MAX_SEND_SIZE 80struct mymsgbuf {long mtype;char mtext[MAX_SEND_SIZE];};void read_message(int qid, struct mymsgbuf *qbuf, long type);void remove_queue(int qid);void change_queue_mode(int qid, char *mode);void usage(void);int main(int argc, char *argv[]){key_t key;int msgqueue_id;struct mymsgbuf qbuf;if (argc == 1)usage();key = ftok(".", 'm');/* ftok() 호출을 통해 유일한 키를 만든다 *//* 필요하다면 큐를 만들고 연다 */if ((msgqueue_id = msgget(key, IPC_CREAT|0660)) == -id change_queue_mode(int qid, char *mode){struct msqid_ds myqueue_ds;/* 현재 정보를 읽는다 */msgctl(qid, IPC_STAT, &myqueue_ds);sscanf(mode, "%ho", &myqueue_ds.msg_perm.mode);msgctl(qid, IPC_SET, &myqueue_ds); /* 모드를 수정한다 */}void usage(void){fprintf(stderr, "msgtool - A utility for tinkering with msg queuesn");fprintf(stderr, "nUSAGE: msgtool (r)ecv n");fprintf(stderr, "nUSAGE: msgtool (d)elete n");fprintf(stderr, "nUSAGE: msgtool (m)ode n");exit(1);}결과 화면Server실행 방법은 다음과 같다.프로그램명 옵션((s)end / (d)elete / (m)ode) 메시지큐이름 파일명전송하기를 원하는 파일명을 가장 마지막에 적는다.Client실행 방법은 다음과 같다.프로그램명 옵션((r)eveive / (d)elete / (m)ode) 메시지큐이름전송받는 파일의 이름은 원래 전송하는 temp_원래파일명 이다.파일 생성 확인원래 파일은 test.txt 이고 새로 생성된 파일은 temp_test.txt 이다.공유 메모리를 이용한 구구단 프로그램공유모리를 이용하여 한 프로세스는 공유메모리에 구구단(1단 ~ 9단)을 기록하고 다른프로세스는 이를 읽어 수를 출력하는 프로그램을 작성하시오. 단, 이때 구구단 모두를 한번에 기록하고 한번에 출력하는 것이 아니라 한 단씩 처리하는 방식으로 작성하시오.원리공유 메모리 생성 -> 공유 메모리를 프로세스 메모리에 연결 -> 공유 메모리에 값을 입력 -> 자식 프로세스가 값을 쓰고 부모 프로세스가 읽어와서 계산메모리 주소 값을 토대로 해당 메모리 주소에 해당되는 공간에서 값을 쓰고 다시 0;i
    공학/기술| 2005.01.03| 18페이지| 1,000원| 조회(2,110)
    미리보기
  • [리눅스 프로그래밍] 패킷 분석 평가D별로예요
    초고속 통신망제 5주차 실험ㆍ실습 결과 보고서- Packet Analysis -실험일자2004/09/30담당조교담당교수조학번성명1. 제목 : Packet Analysis2. 목적인터넷 프로토콜에서 정의된 프로토콜 스택을 이해하고 실제 패킷을 캡쳐하여 분석해 주는 프로그램을 작성한다.3. 기초 지식스니퍼 / Ethereal등의 캡쳐 프로그램의 사용법과 동작원리 이해프로토콜 스택에 대한 이해4. 준비물LDS2000 메뉴얼임베디드시스템 응용프로그래밍(강의 홈페이지 자료실 제공)스니퍼 프로그램 작성ICMP를 캡쳐하는 프로그램 작성 및 테스트 [심화실험 3]TCP/UDP 캡쳐하는 프로그램 작성 및 테스트 [심화실험 4]5. 실험ㆍ실습의 구체적인 절차packet 분석Ethernet프레임 구조각 필드 설명프리앰블 (Preamble, 56bits) : 프레임의 시작, 전송매체에 연결되어 있는 모든 회로를 안정한 상태로 만들기 위해 사용, 송신측과 수신측 하드웨어의 동기를 맞춰주기 위하여 사용SFD(Start Frame Delimiter, 8bits) : 정상적인 프레임의 내용이 시작된다는 알려준다목적지 MAC 주소(48bits) : 이더넷 프레임을 수신할 노드의 하드웨어 주소발신지 MAC 주소(48bits) : 이더넷 프레임을 송신하는 노드의 하드웨어 주소 (상위 24 bits 는 네트워크 기기 제조업체/하위 24 bits 는 제품마다 부여되는 번호)Type(16 bits) : 상위 네트워크 계층에서 데이터 필드를 구분하기 위한 값 ( IP:0x0800, ARP: 0x0806, RARP : 0x8035, SNMP : 0x814C )데이터((46 ~1500 Byte) :이더넷 프레임의 최대 길이는 1526 byte 로써, 데이터는 46에서 1500바이트까지 전송가능 하다. 프레임의 크기가 1526바이트보다 큰 경우 단편화(Fragmentation) 한다FCS(Frame Check Sequence, 32bits) : 전송상의 오류를 검사ARP정의ARP ( Address Reso용, 데이터그램을 보내는 순서에 따라 1씩 증가, 단편화가 일어난 패킷의 경우, 동일한 식별자 값을 가진다.플래그(Flags, 3bits) : 비트 0은 예약으로서 무조건 0으로 설정, 비트 1은 단편화 여부를 나타냄, 비트 2는 마지막 단편의 여부를 지정.단편화 옵셋(Framentation Offset, 8bits) : 단편화된 패킷의 offset 을 바이트 단위로 지정TTL(Time To Live, 8bits) : IP 데이터그램의 수명을 제어하기 위한 값으로서 통과할 수 있는 라우터의 수를 지정프로토콜(Protocol, 8bits) : 상위 프로토콜의 유형을 나타낸다.TCP : 6 / UDP : 17(0x11)검사합(Checksum, 16bits) : IP 헤더 부분에 대해서만 checksum을 수행한 결과 저장.발신지 IP 주소(32bits) : 발신자의 IP 주소를 지정한다.목적지 IP 주소(32bits) : 목적지의 IP 주소를 지정한다.UDP프레임 구조각 필드 설명SrcPort : 발신자(application) 의 port 번호DstPort : 수신자의 port 번호Checksum : checksum을 수행한 결과.Length : 패킷의 길이TCP프레임 구조각 필드 설명SrcPort : 발신자(application) 의 port 번호DstPort : 수신자의 port 번호SequenceNum : 보내는 packet의 고유 번호Acknowledgement : ack일 경우, ack의 고유 번호HdrLen : header의 길이FlagsCWR, ENC-Echo : ethreal에서 캡쳐했을 때 나타난 flag로, 일반적으로 사용되지 않는다.URG : Urgent 항목의 포인터가 유효함.ACK : Acknowledgement number가 유효함.PSH : 해당 segment의 데이타는 응용 프로그램에게 즉시 전달되어야 한다. 이 segment에 대한 acknowledgement는 현재 acknowledgement number까지의 모든 데티타가 수신 f);인자device : 네트워크 디바이스명netp : 지정한 네트워크 디바이스의 IP 주소를 돌려받을 버퍼maskp : 지정한 네트워크 디바이스의 NETMASK를 돌려받을 버퍼errbuf : 호출에 실패할시 에러메시지를 돌려받을 버퍼리턴값성공 : 0 / 실패 : -1getopt()기능 : 두번째 인자 argv로 지정한 명령행 라인을 파싱한다.함수원형 : int getopt(int argc, char * const argv[], const char *optstring);인자argc : 명령행 argv에 있는 인자의 개수argv : 옵션이 들어있는 명령행optstring : 옵션으로 취급할 문자의 목록 (옵션간의 구분은 콜론(:)으로)리턴값성공 : 0 / 실패 : -1pcap_open_live()기능 : 패킷을 캡처할 수 있는 패킷 캡처 기술자를 구해준다.함수원형 : pcap_t *pcap_open_live(const char *device, int snaplen, int promisc, int to_ms, char *errbuf);인자device : 패킷을 캡처하고자 하는 네트워크 디바이스의 이름. 이 값이 “any” 또는 NULL 값인 경우에는 시스템의 모든 NIC로 부터의 패킷을 캡처한다.snaplen : 캡처할 패킷의 크기primisc : promiscuous(=1) 또는 non-promiscuous(=0) 모드로 할지를 지정한다. promiscuous 모드에서는 로컬 네트워크의 모든 패킷을 캡처하게 되며 non-promiscuous 모드에서는 device로 지정한 NIC의 IP에게 향하는 패킷만을 캡처하게 된다.to_ms : 읽기 타임아웃(timeout)을 지정하기 위해 사용된다. 단위는 밀리초. 이 값을 0으로 지정하는 경우에는 타임아웃 값을 무한대로 설정하겠다는 뜻이다.errbuf : 호출에 실패할시 에러메시지를 돌려받을 버퍼리턴값성공 : 패킷 캡처 기술자 / 실패 : NULLpcap_compile()기능 : 지정한 필터링 문자열을 필터 프로그램으로en_live()에서 획득한 패킷 캡처 기술자cnt : 캡처할 패킷의 개수(0을 지정하면 계속 캡처한다.)callback : 캡처한 패킷을 실제로 처리할 사용자 정의 함수를 지정한다. pcap_loop()는 내부적으로 패킷이 캡처되면 해당 패킷을 인자로 하여 사용자가 지정한 callback() 함수를 호출한다.user : 사용자가 지정한 callback() 함수로 넘겨줄 사용자 데이터리턴값성공 : 0 / 실패 : -1주요 구조체struct pcap_pkthdr //캡쳐된 패킷struct pcap_pkthdr // 패킷이 캡처된 시간, 길이 등의 정보를 포함한 구조체struct iphdr // ip headerstruct tcphdr // tcp headerstruct udphdr //udp headerstruct icmp // icmp headerstruct ether_header // ethernet header예제 프로그램 (snipper.c)CompileCompile 시 –lpcap 을 추가#gcc –o snipper snipper.c –lpcap실행방법command line에서 –d : 캡쳐할 장치 / -n : 패킷 개수 / -f : 필터링 옵션 지정# ./sniffer –d eth0 –n 3실행결과심화 실험실험 내용본 과제IP 헤더를 캡처하는 프로그램을 작성하고 패킷을 캡처하여 분석한다. 의미 있는 헥사 값에 대해 그 의미를 출력하도록 한다.TCP와 UDP를 캡처하는 프로그램을 작성하고 패킷을 캡처하여 분석한다. 의미 있는 헥사 값에 대해 그 의미를 출력하도록 한다.수정한 내용 : IP 프로토콜의 상위 프로토콜이 TCP또는 UDP 이기 때문에, 위의 두 가지 과제를 하나의 프로그램으로 작성하였다. 즉, IP 패킷을 캡처하여 IP 관련 정보를 출력하고, 그것이 TCP 패킷 이면 TCP 관련 정보를 출력하고, UDP 패킷이면 UDP 관련 정보를 출력하는 프로그램을 작성하였다.개념 – 원리패킷 filtering예제의 sniffer 프로그램은 모든 packet for capturingn"" dst hostn"" src hostn";void print_ethframe(struct ether_header *peth, int len);/*하나의 frame에 대한 정보를 출력하는 함수*/void callback(u_char *user, const struct pcap_pkthdr *ppkthdr, const u_char *pchpkt);int main(int argc, char **argv){int ret, cnt;char *pchDevice;bpf_u_int32 netp, maskp;struct bpf_program fp;pcap_t *pcd;/* packet capture descriptor*/char errmsg[PCAP_ERRBUF_SIZE];char filter[128], devname[128];cnt = 0;memset(filter, 0x00, sizeof(filter));memset(devname, 0x00, sizeof(devname));memset(g_delim, 0x00, sizeof(g_delim));memset(g_delim, '=', 78);printf("< 2조의 Sniffer Program(by hj) >>>>>>>n");if (argc 4); /*version정보*/hlen = pchpkt[0]&0x0f;printf("tHeader Length : 0x%d (%d bytes)n",hlen,hlen*4);/*header 길이*/printf("tTOS : 0x%dn",pchpkt[1]); /*TOS(Type Of Service)값. 일반적으로 사용하지 않으므로 0 이다.*/printf("tLength : 0x%X (%d bytes)n",pchpkt[2]*0x100 + pchpkt[3],pchpkt[2]*0x100 + pchpkt[3]); /*패킷의 길이*/tcppkt = pchpkt + hlen*4; /*상위 protocol의 정보 분석을 위해, header 다음의 poini
    공학/기술| 2005.01.03| 17페이지| 1,000원| 조회(1,615)
    미리보기
  • 멀티프로세스 프로그래밍
    초고속 통신망제 3주차 실험ㆍ실습 결과 보고서- 멀티프로세스 프로그래밍 -실험일자2004/09/16담당조교담당교수조학번성명21. 제목 : 멀티프로세스 프로그래밍2. 목적멀티프로세스의 기본 개념 및 구조에 대한 이해를 바탕으로 멀티프로세스 응용프로그래밍 개발 능력을 배양한다3. 기초 지식리눅스 개발환경에 대한 이해운영체제 기초4. 준비물임베디드시스템 응용프로그래밍(강의 홈페이지 자료실 제공)LDS2000 매뉴얼5. 실험ㆍ실습의 구체적인 절차 (Step By Step)프로세스 정의, 구조, 생성, 종료에 대한 이해프로세스란?실행중인 프로그램(program in execution)CPU time, memory, files, I/O devices 등 자원 요구시스템의 작업단위 (the unit of work)프로세스의 구조실행중인 프로그램(program in execution)CPU time, memory, files, I/O devices 등 자원 요구시스템의 작업단위 (the unit of work)프로세스의 생성자식은 부모의 것을 복제: fork자식은 자신의 새 프로그램을 가짐: fork+exec군execl : 문자형 인수 포인터들execv : 인수배열의 포인터fork: 자식 process 생성, 모든 process는 PID(Process identifier)를 가짐fork + exec: 호출하는 프로세스의 기억장소에 새 프로그램 loadfork 호출 후의 상태 모습fork + exec 호출 후의 상태 모습프로세스의 종료exit 시스템 콜이 커널내의 exit( ) 함수 호출모든 시그널을 끈다모든 열린 화일을 닫음텍스트화일과 현행 디렉토리 등을 방출계정로그에 기록proc구조에 자원사용통계와 exit 상태를 저장상태를 SZOMB(=시체상태)로 변경생존한 자식들을 init 프로세스에게 입양주소공간, U area, 주소 번역맵, 스왑공간 방출SIGCHLD 시그널을 부모에 보냄 ( 이 신호는 defaut로 무시됨)부모가 sleep할 경우 깨움swtch( ) 호출exit( )는 부모가 exit 상태와 자원사용 정보를 볼 수 있도록 proc 구조를 남겨둠멀티프로세스의 기본 개념 이해멀티프로세스란?한 개 이상의 컴퓨터 프로세서들이 협력하여 프로그램들을 처리하는 것서로 협력하여 작업을 하고 있는 두 대 이상의 컴퓨터 중 한 대에 프로그램을 동적으로 할당하는 것을 의미같은 프로그램을 동시에 병렬로 처리하고 있는 여러 대의 컴퓨터를 가리킴멀티프로세스 응용프로그램의 작성 – 프로세스간 통신파이프 (pipe)pipe함수 인자로 크기가 2인 배열이 들어간다.fd[0]에는 데이터를 입력할 수 있는 파일 디스크립터fd[1]에는 데이터를 출력할 수 있는 파일 디스크립터FIFO성공하면 0을 리턴하고, 실패하면 –1을 리턴 한다fildes 는 파이프의 파일 기술자이다.fildes[0]은 읽기 위해 사용됨fildes[1]은 쓰기 위해 사용됨세마포어 (Semaphore)Process 간의 데이터 교환 방식이 아님공유 데이터의 접근에 필요한 동기화의 제공다수의 process들의 작업을 동기화 하기 위해서 사용주로 사용하는 곳은 shared memory segment에 접근을 동기화 하기위함접근 단계자원의 접근을 제어하는 세마포어 값을 확인세마포어 값이 0보다 크면 프로세서는 자원을 사용 가능대신 세마포어의 값은 하나 감소하여 현재 자원이 사용중임을 표시세마포어 값이 0보다 작으면 그 값이 0보다 커질 때 까지 sleep 상태로 기다림프로세스가 깨어나면 1단계부터 다시 진행세마포어는 2진을 사용하고 1로 초기화멀티플렉싱 기법을 이용한 채팅프로그램 작성멀티플렉싱이란?- 하나의 전송로를 여러 사용자가 동시에 사용해서 효율성을 극대화하는 것I/O 멀티플렉싱이란?- 클라이언트와의 입/출력을 담당하는 프로세스를 하나로 묶어버리는 형식- 프로세스가 고속의 전송로에 해당한다.I/O 멀티플렉싱이란?- 클라이언트와의 입/출력을 담당하는 프로세스를 하나로 묶어버리는 형식- 프로세스가 고속의 전송로에 해당한다.I/O 멀티플렉싱이란?- 클라이언트와의 입/출력을 담당하는 프로세스를 하나로 묶어버리는 형식- 프로세스가 고속의 전송로에 해당한다.예제[3-2]를 다중접속이 가능한 프로그래밍 작성 [심화실험 1]Select 함수fd_set 구조체Select 함수의 기능과 호출 순서지정된 파일 디스크립터의 변화를 확인한다.파일 디스크립터 변화 : 파일 디스크립터를 통해 데이터 송수신 가능한 상태파일 디스크립터의 설정.- 변화를 확인 할 파일 디스크립터를 구분 지어 모아두는 것(총 3 묶음).파일 디스크립터의 변화.- 수신 할 데이터가 존재하는가? (입력 버퍼에 데이터 존재)- 데이터 전송이 가능한 상태인가? (출력 버퍼에 충분한 여유공간 존재)- 소켓에서 예외상황이 발생 하였는가? (OOB 메시지 전송)fd_set 자료형파일 디스크립터를 구분 지어 모아두기 위한 자료형(비트단위 배열)검사 해야 할 파일 디스크립터의 범위를 지정해 준다.실제로는 검사해야 하는 파일 디스크립터의 개수를 인자로 전달.가장 큰 파일 디스크립터 값에 1을 더해서 인자로 전달한다.타임 아웃을 설정한다.select 함수의 호출 및 결과 확인리턴 값의미-1오류 발생0타임 아웃0보다 큰 수변화 발생 파일 디스크립터 수select 함수를 이용한 다중 접속이 가능한 프로그래밍 작성Server#include #include #include #include #include #include #include #define MAXLINE 1024#define MAX_SOCK 512char *escapechar = "exitn";int main(int argc, char *argv[]) {char rline[MAXLINE], my_msg[MAXLINE];char *start = "대화방에 오신걸 환영합니다...n";int i, j, n;int s, client_fd, clilen;intnfds;/* 최대 소켓번호 +1 */fd_setread_fds;/* select 사용을 위한 fs_set 구조체 */intnum_chat = 0;/* 전체 클라이언트 수 */int client_s[MAX_SOCK];/* 클라이언트들 소켓번호 저장 배열 */struct sockaddr_in client_addr, server_addr; /* 서버와 클라이언트의 소켓 주소 구조체 */if(argc < 2) {printf("실행방법 :%s 포트번호n",argv[0]);return -1;}printf("init....n");if((s = socket(PF_INET, SOCK_STREAM, 0)) < 0) {/* 소켓을 생성한다.*/printf("Server: Can't open stream socket.");return -1;}bzero((char *)&server_addr, sizeof(server_addr));/* server_addr 의 구조체 초기화 */server_addr.sin_family = AF_INET;/* server_addr 의 구조체 설정 */server_addr.sin_addr.s_addr = htonl(INADDR_ANY);server_addr.sin_port = htons(atoi(argv[1]));if (bind(s,(struct sockaddr *)&server_addr,sizeof(server_addr)) < 0) {/* 소켓 설정 */printf("Server: Can't bind local address.n");return -1;}listen(s, 5);/* 서버가 연결을 기다린다. */nfds = s + 1;/* 소켓 번호를 증가시킨다. */FD_ZERO(&read_fds);/* select 함수 사용을 위한 fd_set 구조체를 초기화한다. */while(1) {if((num_chat-1) >= 0) nfds = client_s[num_chat-1] + 1;/* 소켓 번호 값을 클라이언트의 소켓번호+1로 증가 */FD_SET(s, &read_fds);/* fd_set 구조체를 설정한다. */for(i=0; i
    공학/기술| 2005.01.03| 22페이지| 1,000원| 조회(1,181)
    미리보기
  • [프로그래밍]자바(java) 지뢰찾기 소스
    import javax.swing.*; import javax.swing.event.*;import java.awt.*; import java.awt.event.*; import java.io.*;import java.util.*;import java.sql.*;class Mine extends JFrame { public static int maxWidth=100;public static int maxHeight=100;//판의 최대 폭,높이.int state=0; //게임 상태 - 실행중인지, 종료되었는지, 초기화 상태인지...int mode=0; //게임 모드. 초급:0, 중급:1, 고급:2, 사용자정의:3int MineLeft; //현재 남아 있는 지뢰의 수int NumMine; //지뢰의 총 개수int height;int width; //판크기int delay; //지나간 시간MineTop mTop;MinePanel mine;MinePanel mine2;MineMenuBar menubar;
    프로그램소스| 2003.06.22| 1페이지| 1,500원| 조회(6,191)
    미리보기
전체보기
받은후기 2
2개 리뷰 평점
  • A+최고예요
    0
  • A좋아요
    1
  • B괜찮아요
    0
  • C아쉬워요
    0
  • D별로예요
    1
전체보기
해캠 AI 챗봇과 대화하기
챗봇으로 간편하게 상담해보세요.
2026년 05월 14일 목요일
AI 챗봇
안녕하세요. 해피캠퍼스 AI 챗봇입니다. 무엇이 궁금하신가요?
1:28 오후
문서 초안을 생성해주는 EasyAI
안녕하세요 해피캠퍼스의 20년의 운영 노하우를 이용하여 당신만의 초안을 만들어주는 EasyAI 입니다.
저는 아래와 같이 작업을 도와드립니다.
- 주제만 입력하면 AI가 방대한 정보를 재가공하여, 최적의 목차와 내용을 자동으로 만들어 드립니다.
- 장문의 콘텐츠를 쉽고 빠르게 작성해 드립니다.
- 스토어에서 무료 이용권를 계정별로 1회 발급 받을 수 있습니다. 지금 바로 체험해 보세요!
이런 주제들을 입력해 보세요.
- 유아에게 적합한 문학작품의 기준과 특성
- 한국인의 가치관 중에서 정신적 가치관을 이루는 것들을 문화적 문법으로 정리하고, 현대한국사회에서 일어나는 사건과 사고를 비교하여 자신의 의견으로 기술하세요
- 작별인사 독후감