Skip to content

Commit

Permalink
Merge pull request #5 from falconlee236/fix/add-testcode-dockerfile
Browse files Browse the repository at this point in the history
[fix] docker 파일에 테스트코드 추가
  • Loading branch information
falconlee236 authored Jul 7, 2024
2 parents 6cea685 + 3e8342b commit 620f629
Show file tree
Hide file tree
Showing 4 changed files with 64 additions and 14 deletions.
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.

0 comments on commit 620f629

Please sign in to comment.