처음부터 차근차근
tcp 소켓 생성과 TCP 클라이언트용 API 본문
반응형
Tcp 소켓 생성
#include <stdio.h> // c 언어 파일 작성할 때 필요한 헤더
#include <unistd.h> // unix 계열 헤더
#include <sys/socket.h>
#include <sys/types.h>
#include <string.h>
#define MAX_FD 4
int main(void) {
int fd[MAX_FD] = { -1, }; // 소켓 기술자 선언
int i = 0;
// 프로세스 id 출력
printf("Process ID : %d\n", getpid());
// 소켓 생성하여 fd 배열 안에다 대입
// PF_INET : IPv4 인터넷 프로토콜, SOCK_STREAM : TCP
for (i = 0; i < MAX_FD; i++) {
fd[i] = socket(PF_INET, SOCK_STREAM, 0);
}
// enter 키 받아서 socket fd close
printf("Process Enter key to close all sockets.\n");
getchar();
for (i = 0; i < MAX_FD; i++) {
close(fd[i]);
}
printf("Press Enter key finish.\n");
getchar();
return 0; // 종료
}
실행결과
/proc/프로세스id/fd 에서 ls -l을 이용해서 보면 소켓이 4개가 할당됨을 볼 수 있다.
Enter을 하면 소켓들이 없어진 것을 볼 수 있다.
프로세스가 끝났다.
Tcp용 클라이언트
#include <stdio.h> // c 언어 파일 작성할 때 필요한 헤더
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <fcntl.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
int main(int argc, char * argv[]) {
// 변수 생성
int fd = -1;
struct sockaddr_in sock_client; // IPv4 주소체계에서 사용하는 구조체
// 파라미터의 개수가 3개가 아니면(자신 포함해서)
if (argc != 3) {
printf("Usage : %s <ip> <port>\n", argv[0]);
return -1; // 종료
}
// sock_client에다 0을 세팅
memset(&sock_client, 0, sizeof(sock_client));
sock_client.sin_family = AF_INET; // 주소체계 : IPv4
sock_client.sin_addr.s_addr = (in_addr_t)inet_addr(argv[1]); // 파라미터로 받은 ip 할당
sock_client.sin_port = htons(atoi(argv[2])); // 네트워크 바이트 정렬 방식의 4바이트 데이터를 호스트 바이트 정렬 방식으로 변환
fd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); // 소켓 생성
// 서버에 접속을 요청
if (connect(fd, (struct sockaddr*)&sock_client, sizeof(sock_client)) == 0) { // 성공시 0, 실패 -1
printf("Connetion Success.\n");
}
else {
printf("Connetion faliure.\n");
}
// enter 키를 받아 프로그램 종료
printf("Press Enter key to finish.\n");
getchar();
close(fd);
return 0; // 종료
}
실행결과(실행과정)
Tcp 연결을 위한 서버를 30000 포트로 연다.
Netstat 쳐보면 서버가 돌고 있는 것을 확인할 수 있다.
Ip address 명령어를 사용해서 포트 주소 확인한다.
아까 확인한 포트주소를 파라미터로 사용한다.
서버 connection 성공
netstat를 쳐보면 서버와 클라이언트가 열려있는 것을 볼 수 있다.
<telnet으로 확인>
서버를 연다음 telnet으로 확인
아무거나 쳐봤을 때
서버 측에서도 똑같은 내용이 보이는 것을 볼 수 있다.
출처 : 네트워크개론(22-1학기)김병국교수 강의 내용 변형 및 요약
반응형
'Linux & Unix' 카테고리의 다른 글
바이트 순서 변환과 호스트 정보 송수신 관련 함수들 (1) | 2022.05.14 |
---|---|
Unix 기본 시스템 함수 - getopt(), time(), localtime(), localtime_r(), ftime(), gettimeofday(), mktime(), 파일 기술자, bcopy() (0) | 2022.04.15 |
파일 접근과 해제, 읽기, 쓰기, 접근 위치 이동, 생성, 삭제 (0) | 2022.04.07 |
Virtual Box 공유 폴더 만들기, 명령어 정리 (0) | 2022.04.06 |
라이브러리와 아카이브, 에러 처리 (0) | 2022.03.01 |
Comments