hello_server.c
#include <stdio.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <dirent.h>
#include <string.h>
#include <unistd.h>
#define PORT 9000
#define BUFSIZE 1024
char err_1[] = "Directory Error";
char rBuffer[BUFSIZE];
int main() {
int c_socket, s_socket;
struct sockaddr_in s_addr, c_addr;
int len, length;
int n;
DIR *dp;
struct dirent *dir;
s_socket = socket(PF_INET, SOCK_STREAM, 0);
memset(&s_addr, 0, sizeof(s_addr));
s_addr.sin_addr.s_addr = htonl(INADDR_ANY);
s_addr.sin_family = AF_INET;
s_addr.sin_port = htons(PORT);
if (bind(s_socket, (struct sockaddr *)&s_addr, sizeof(s_addr)) == -1) {
printf("Can not Bind\n");
return -1;
}
if (listen(s_socket, 5) == -1) {
printf("listen Fail\n");
return -1;
}
while (1) {
len = sizeof(c_addr);
c_socket = accept(s_socket, (struct sockaddr *)&c_addr, &len);
if ((dp = opendir(".")) == NULL) {
write(c_socket, err_1, strlen(err_1));
close(c_socket);
} else {
while ((dir = readdir(dp)) != NULL) {
if (dir->d_ino == 0) continue;
write(c_socket, dir->d_name, strlen(dir->d_name));
write(c_socket, "\n", 1); // 파일명 끝에 줄바꿈 추가
}
closedir(dp);
close(c_socket);
}
}
close(s_socket);
return 0;
}
hello_clinet.c
// hello_client.c
#include <stdio.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <string.h>
#include <unistd.h>
#include <stdlib.h>
#include <arpa/inet.h>
#define PORT 9000
#define IPADDR "127.0.0.1"
int main() {
int c_socket;
struct sockaddr_in c_addr;
int n;
char buffer[BUFSIZ];
char rcvBuffer[BUFSIZ];
c_socket = socket(PF_INET, SOCK_STREAM, 0);
memset(&c_addr, 0, sizeof(c_addr));
c_addr.sin_family = AF_INET;
c_addr.sin_port = htons(PORT);
if (inet_pton(AF_INET, IPADDR, &c_addr.sin_addr) <= 0) {
printf("Invalid address/ Address not supported\n");
return -1;
}
if (connect(c_socket, (struct sockaddr *)&c_addr, sizeof(c_addr)) == -1) {
printf("Can not connect\n");
close(c_socket);
return -1;
}
printf("Enter message: ");
scanf("%s", buffer);
buffer[strlen(buffer)] = '\0';
write(c_socket, buffer, strlen(buffer) + 1);
while ((n = read(c_socket, rcvBuffer, sizeof(rcvBuffer))) > 0) {
rcvBuffer[n] = '\0';
printf("received Data : %s\n", rcvBuffer);
}
close(c_socket);
return 0;
}