엔지니어가 되고 싶은 공돌이
11. TCP 본문
11. 1. Server TCP Socket
#include<stdio.h>
#include<stdlib.h>
#include<sys/types.h>
#include<netinet/in.h>
#include<inttypes.h>
#include<sys/socket.h>
#include<arpa/inet.h>
#include<string.h>
#include<unistd.h>
#define PORTNUM 1234
int main(void){
char buf[256];
struct sockaddr_in sin, cli;
int sd, ns, clientlen = sizeof(cli);
if((sd = socket(AF_INET, SOCK_STREAM, 0)) == -1){
perror("socket");
exit(1);
}
memset((char *)&sin, '\0', sizeof(sin));
sin.sin_family = AF_INET;
sin.sin_port = htons(PORTNUM);
sin.sin_addr.s_addr = inet_addr("0.0.0.0"); // 0.0.0.0은 모든 IP로부터의 요청을 받는다는 뜻.
if(bind(sd, (struct sockaddr *)&sin, sizeof(sin))){
perror("bind");
exit(1);
}
if(listen(sd, 5)){ // 클라이언트 접속요청 대기
perror("listen");
exit(1);
}
if((ns = accept(sd, (struct sockaddr *)&cli, &clientlen)) == -1){ // 클라이언트와 연결
perror("accept");
exit(1);
}
sprintf(buf, "Your IP address is %s", inet_ntoa(cli.sin_addr));
if(send(ns, buf, strlen(buf)+1, 0)==-1){
perror("send");
exit(1);
}
close(ns);
close(sd);
return 0;
}
11. 2. Client TCP Socket
#include<stdio.h>
#include<stdlib.h>
#include<sys/types.h>
#include<netinet/in.h>
#include<inttypes.h>
#include<sys/socket.h>
#include<arpa/inet.h>
#include<string.h>
#include<unistd.h>
#define PORTNUM 1234
int main(void){
int sd;
char buf[256];
struct sockaddr_in sin;
if((sd = socket(AF_INET, SOCK_STREAM, 0)) == -1){
perror("socket");
exit(1);
}
memset((char *)&sin, '\0', sizeof(sin));
sin.sin_family=AF_INET;
sin.sin_port = htons(PORTNUM);
sin.sin_addr.s_addr = inet_addr("0.0.0.0"); // 정확한 포트명 입력하기
if(connect(sd, (struct sockaddr *) &sin, sizeof(sin))){ // 서버에 접속 요청.
perror("connect");
exit(1);
}
if(recv(sd, buf, sizeof(buf), 0) == -1){
perror("recv");
exit(1);
}
close(sd);
printf("From Server : %s\n", buf);
return 0;
}
'Computer Science > Unix' 카테고리의 다른 글
12. UDP (0) | 2025.03.18 |
---|---|
10. Socket (0) | 2025.03.17 |
09. Thread (0) | 2025.03.16 |
08. Fork and Exec (0) | 2025.03.15 |
07. Process (0) | 2025.03.14 |
Comments