소켓 생성하여 서버로 데이터 전송 및 받아오기
# vi server.c
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #include <fcntl.h> #include <unistd.h> #include <netinet/in.h> #include <sys/socket.h> #include <sys/types.h> #include <arpa/inet.h>
#define BUF_SIZE 1024 #define BUF_LEN 128 int main(int argc,char *argv[]) { char buffer[BUF_LEN]; struct sockaddr_in server_addr, client_addr; char temp[20]; int server_fd, client_fd; int len, msg_size; char buff_rcv[BUF_SIZE+5]; if(argc !=2) { printf("Usege ./filename [PORT] \n"); exit(0); }
if((server_fd = socket(AF_INET,SOCK_STREAM,0)) == -1) { printf("\nServer: can not Open Socket\n"); exit(0); }
memset(&server_addr,0x00,sizeof(server_addr));
server_addr.sin_family = AF_INET; server_addr.sin_addr.s_addr = htonl(INADDR_ANY); server_addr.sin_port = htons(atoi(argv[1]));
if(bind(server_fd, (struct sockaddr *)&server_addr, sizeof(server_addr))< 0) { printf("\nServer: cat not bind local addrss\n"); exit(0);
}
if(listen(server_fd,5) < 0) { printf("\nServer: cat not listen connnect.\n"); exit(0); }
memset(buffer,0x00,sizeof(buffer)); len = sizeof(client_addr); printf("===== [PORT] : %d =====\n",atoi(argv[1])); printf("\nServer : wating connection request.\n");
while(1) { client_fd = accept(server_fd,(struct sockaddr *)&client_addr,(socklen_t *)&len);
if(client_fd < 0) { printf("\nServer: accept failed\n"); exit(0); } inet_ntop(AF_INET,&client_addr.sin_addr.s_addr,temp,sizeof(temp)); // client 접속 메세지 printf("\nServer: %s client connect.\n",temp); // client 에서 받은 데이터 출력 recv (client_fd, buff_rcv, BUF_SIZE, 0); printf("receive : %s\n", buff_rcv); close(client_fd); // client 접속 종료 메세지 printf("Server: %s client closed.\n",temp);
}
close(server_fd);
return 0; } |
# vi client.c
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <netinet/in.h> #include <arpa/inet.h> #include <sys/socket.h> #include <sys/types.h>
#define BUF_LEN 128 #define PORT 1234 #define IPADDR "192.168.2.10" int main(int argc,char *argv[]) { char buffer[BUF_LEN]; int client_fd,len; int msg_size; struct sockaddr_in client_addr;
client_fd = socket(PF_INET,SOCK_STREAM,0);
client_addr.sin_addr.s_addr = inet_addr(IPADDR); client_addr.sin_family = AF_INET; client_addr.sin_port = htons(PORT);
if(connect(client_fd,(struct sockaddr *)&client_addr,sizeof(client_addr))== -1) { printf("Can't connect\n"); close(client_fd); return -1; } // 서버로 데이터 전송 send(client_fd, argv[1], strlen(argv[1])+1, 0); close(client_fd);
return 0; } |
구동 파일 생성 하기
# gcc -o server server.c
# gcc -o client client.c
server 에서 구동 (netstat 로 확인 가능)
# ./server 1234 &
client 에서 구동 예
# ./client "This is test message."
server 에서 client 로 데이터 받아오는 방법은 예제와 유사합니다.
아래 원본 포스팅에서 참고하도록 합니다.
[출처] https://y0ubat.tistory.com/76
'프로그래밍 > C, C++' 카테고리의 다른 글
c언어 변수를 이용해 시스템 명령어 사용 (0) | 2020.09.21 |
---|---|
c언어 현재 날짜 및 시간 출력 (0) | 2020.09.14 |
c언어로 파일 생성 (내용 입력) (0) | 2020.01.10 |
C 언어로 리눅스 명령어 실행하기 (0) | 2020.01.08 |
c언어 파일 이벤트 감시 (inotify) (0) | 2020.01.08 |