Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[fix] docker 파일에 테스트코드 추가 #5

Merged
merged 1 commit into from
Jul 7, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,6 @@ RUN apt-get -qq update\

COPY . /usr/src/irc_server/

RUN chmod +x start.sh
RUN make re

CMD [ "./start.sh" ]
CMD [ "./ircserv", "3000", "a" ]
39 changes: 36 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,47 @@
IRC Webserver based RFC1459


### docker 접속 방법
## docker 명령어 정리
### docker image build
```bash
docker build --rm -t irc_server .
docker run -p 3000:3000 irc_server
```

### docker image run
```bash
docker run -d -p 3000:3000 irc_server
```
d를 붙이면 컨테이너를 백그라운드로 실행한다.


### docker container stop
```bash
docker stop $(container name)
```

### docker container restart
```bash
docker restart $(container name)
```

### docker 실행중인거 삭제 방법
```bash
docker rm -f $(docker ps -qa)
```

`docker ps -qa`는 현재 실행하는 모든 컨테이너의 id를 출력
`docker ps -qa`는 현재 실행하는 모든 컨테이너의 id를 출력

### docker image 전체 삭제
```bash
docker rmi -f $(docker ps -qa)
```

### docker dangling image 전체 삭제 (none 뜨는 이미지)
```bash
docker image prune
```

### docker image 확인
```bash
docker images
```
30 changes: 26 additions & 4 deletions src/main.cpp
Original file line number Diff line number Diff line change
@@ -1,11 +1,25 @@
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <sstream>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h> // inet_ntoa

int main(void){
int main(int ac, char **av){
if (ac != 3) {
std::cerr << "Invalid argument, need 2 arguments" << "\n";
std::cerr << "1st: Port number, 2nd: password" << "\n";
exit(1);
}

std::istringstream iss(av[1]);
int PORT;
iss >> std::noskipws >> PORT;
if (!iss.eof() || iss.fail() || PORT <= 0 || PORT > 65535){
std::cerr << "error!\n";
exit(1);
}
/*
//SECTION
domain - AF_INET = ipv4,
Expand All @@ -28,7 +42,7 @@ int main(void){
// NOTE - INADDR_ANY 자신의 모든 랜카드로 ip를 받을 수 있음.
server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
// NOTE - Server ip의 PORT번호 지정
server_addr.sin_port = htons(3000);
server_addr.sin_port = htons(PORT);

// NOTE - socket과 ip를 연경하는 작업
int binded = bind(server_socket, (struct sockaddr *)&server_addr, sizeof(server_addr));
Expand All @@ -42,6 +56,8 @@ int main(void){
if (binded != 0) {
std::cerr << "bind error!" << "\n";
exit(1);
} else {
std::cout << "irc server is running on port: " << PORT << "\n";
}

while(1) {
Expand All @@ -52,10 +68,16 @@ int main(void){
std::cerr << "get client socket error!" << "\n";
exit(1);
}

std::string client_ip = std::string(inet_ntoa(client_addr.sin_addr));
int client_port = ntohs(client_addr.sin_port);
std::cout << "client " << client_ip << ":" << client_port << " conneted\n" << "\n";
while(1){
char buffer[1024] = { 0, };
recv(client_socket, buffer, sizeof(buffer), 0);
ssize_t recv_byte = recv(client_socket, buffer, sizeof(buffer), 0);
if (recv_byte == 0) {
std::cout << "client " << client_ip << ":" << client_port << " is leaved" << "\n";
break;
}
std::cout << "received! : " << buffer << "\n";

std::string msg = buffer;
Expand Down
5 changes: 0 additions & 5 deletions start.sh

This file was deleted.