처음으로 공부를 하면서 대강 만들어본 채팅 프로그램
양방향 통신은 아니다.
Server가 어떤 특정한 포트를 타고 들어오는 상대의 IP를 알 수 있도록 만들었다.
Client는 Server에 이동한 이후에, (서버와 대화는 못 하지만.. ) 혼자 한 말을 다시 받는다.
실행 화면
개발 환경 : Linux (vi)
Server |
Client |
||||||
|
|
Server.c
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | #include <sys/socket.h> #include <sys/stat.h> #include <arpa/inet.h> #include <stdio.h> #include <string.h> #define MAXBUF 1024 int main(int argc, char **argv) { int server_sockfd, client_sockfd; int client_len, n; char buf[MAXBUF]; struct sockaddr_in clientaddr, serveraddr; client_len = sizeof(clientaddr); if ((server_sockfd = socket (AF_INET, SOCK_STREAM, IPPROTO_TCP )) == -1) { perror("socket error : "); exit(0); } bzero(&serveraddr, sizeof(serveraddr)); // 0으로 바이트 스트림 초기화 serveraddr.sin_family = AF_INET; serveraddr.sin_addr.s_addr = htonl(INADDR_ANY); // INADDR_ANY는 자기 자신을 뜻한다. serveraddr.sin_port = htons(atoi(argv[1])); // 포트번호 bind (server_sockfd, (struct sockaddr *)&serveraddr, sizeof(serveraddr)); listen(server_sockfd, 5); while(1) { memset(buf, 0x00, MAXBUF); client_sockfd = accept(server_sockfd, (struct sockaddr *)&clientaddr,&client_len); printf("New Client Connect: %s\n", inet_ntoa(clientaddr.sin_addr)); if ((n = read(client_sockfd, buf, MAXBUF)) <= 0) { close(client_sockfd); continue; } if (write(client_sockfd, buf, MAXBUF) <=0) { perror("write error : "); close(client_sockfd); } close(client_sockfd); } close(server_sockfd); return 0; } | cs |
Client.c
|
윈도우에서는 실행이 불가능하다.
※ 본 글은 개인 포트폴리오 혹은 공부용으로 사용하기 때문에, 무단 복사 유포는 금지하지만, 개인 공부 용도로는 얼마든지 사용하셔도 좋습니다
'C_C++ 프로그래밍 > TCP_IP' 카테고리의 다른 글
멀티쓰레드를 이용한 소켓 통신 (0) | 2019.06.04 |
---|---|
[TCP/IP] [OOB] OOB 통신에 대해서 알아보자 (0) | 2019.06.04 |
1:1 TCP 소켓 통신 프로그램 (0) | 2019.05.21 |
[struct rlimit] setrlimit, getrlimit... (0) | 2019.05.20 |
댓글