728x90
반응형
유닉스 고급 프로그래밍 p385
시그널 - 소프트웨어 인터럽트
자바에서는 이벤트
p389 SIGINT에 대해서 나와 있다.
p393 SIGINT에 대한 설명.
전경프로세스는 제일 앞의 프로세스를 의미한다. fore ground=전경프로세스
foreground <-> background
p397 Signal 함수.
<<양방향 채팅>>
client.c
#include "tcp.h" int iCSock; void sRead(int iNum) { char caBuff[BSIZE]; int iRet; iRet=read(iCSock , caBuff, BSIZE); caBuff[iRet-2]=0; printf("\n Incomming Message: [%s]\n", caBuff); printf("input Message: "); fflush(stdout); } int main(void) { int iRet; int iLen; char caBuff[BSIZE]; struct sockaddr_in stServer; iCSock=socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if(iCSock<0) { printf("can not make a socket \n"); perror("iCSock"); return 0; } stServer.sin_family = AF_INET; stServer.sin_addr.s_addr =inet_addr(IP_SERVER); //stServer.sin_port = htons(PORT); stServer.sin_port = htons(PORT); iLen=sizeof(stServer); iRet=connect(iCSock, (struct sockaddr *)&stServer, iLen); if(iRet==-1) { printf("connect error \n"); perror("connect"); close(iRet); return 0; } signal(SIGIO, sRead); fcntl(iCSock, F_SETOWN, getpid()); fcntl(iCSock, F_SETFL, FASYNC); while(1) { iRet=read(0 , caBuff, BSIZE); fflush(stdin); write(iCSock, caBuff, iRet); } close(iCSock); return 0; }
server.c
#include "tcp.h" int iCSock; int iSSock; void sRead(int iNum) { char caBuff[BSIZE]; int iRet; iRet=read(iCSock , caBuff, BSIZE); caBuff[iRet-1]=0; printf("\n Incomming Message: [%s]\n", caBuff); printf("input Message: "); fflush(stdout); } void End(int iNum) { close(iCSock); close(iSSock); exit (0); } int main(void) { int iRet; int iLen; char caBuff[BSIZE]; struct sockaddr_in stServer; struct sockaddr_in stClient; iSSock=socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if(iSSock<0) { printf("can not make a socket \n"); perror("iSSock"); return 0; } iLen= sizeof(stServer); bzero(&stServer, iLen); stServer.sin_family = AF_INET; stServer.sin_addr.s_addr = INADDR_ANY; //stServer.sin_port = htons(PORT); stServer.sin_port = htons(PORT); iRet=bind(iSSock, (struct sockaddr *)&stServer, iLe if(iRet==-1) { printf("binding error \n"); perror("bind"); close(iSSock); return 0; } iRet=listen(iSSock, 5); if(iRet==-1) { printf("listen error \n"); perror("listen"); close(iSSock); return 0; } iCSock=accept(iSSock, (struct sockaddr *)&stCli if(iCSock==-1) { printf("accept error \n"); perror("accept"); close(iSSock); return 0; } signal(SIGINT, End ); signal(SIGIO, sRead ); fcntl(iCSock, F_SETOWN, getpid()); fcntl(iCSock, F_SETFL, FASYNC); while(1) { printf("input Message: "); fflush(stdout); iRet=read(0, caBuff, BSIZE); write(iCSock, caBuff, iRet); } return 0; }
tcp.h
#ifndef __TCP_H__ #define __TCP_H__ #include <stdio.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <string.h> #include <errno.h> #include <fcntl.h> #include <unistd.h> #include <termios.h> #include <sys/stat.h> #include <sys/signal.h> #include <stdlib.h> #define BSIZE 250 #define IP_SERVER "192.168.1.60" #define PORT 10000 #endif //__TCP_H__
<출력결과>
728x90
'코스웨어 > 16년 스마트컨트롤러' 카테고리의 다른 글
20160425_김도관_업무일지_디지털제어_회로 기초 (0) | 2016.04.26 |
---|---|
2016-04-25_조재찬_업무일지_디지털제어-회로 기초 (0) | 2016.04.25 |
20160421_장진웅_업무일지_공장내Network_일대일통신6_멀티채팅2, 패킷보기 (1) | 2016.04.21 |
20160420_장진웅_업무일지_공장내Network_일대일통신5_멀티채팅 (1) | 2016.04.20 |
20160418_장진웅_업무일지_공장내Network_일대일통신3 (0) | 2016.04.18 |
버츄얼박스 com 개체를 만들수 없습니다 오류 (1) | 2016.04.17 |
20160415_장진웅_업무일지_공장내Network_일대일통신_입출력다중화(원시적인 채팅 프로그램) (1) | 2016.04.16 |
20160414_장진웅_업무일지_공장내Network_일대일통신(메뉴 추가한 도서관 프로그램) (0) | 2016.04.16 |