본문 바로가기

개발/리눅스4

[Linux]계산기 서버/클라이언트 잡담 계산기 서버/클라이언트는 어느정도 생각을 해서 풀어야 하는 문제입니다. 클라이언트에서 서버에게 데이터를 어떻게 보내야 할 것인지에 대해서 생각을 해보고, 데이터를 받은 서버가 어떻게 계산해서 클라이언트에게 보내줄 것인지... 이렇게 생각하면서 문제를 풀어야 실력도 늘고, 막혔을 때 끙끙 앓다가 포기하는 것보다는 끝까지 구글링을 하면서, 결국에는 답을 찾아내는 것이 좋다고 생각합니다. 갑자기 왜 이런 소리를 하냐면 제가 이 문제를 풀 때 여태까지는 코드를 복붙만 해서 각 함수에 대한 기능만 알고 있지, 처음부터 끝까지 작성한 적이 없었거든요... 그래서 계산기 문제를 풀 때 좀 오래걸렸었어요. 제 기억에는 한 3시간 정도 붙들고 있었던 것 같아요. 이제 시작해보죠 클라이언트 입력 기능 클라이언트는 아.. 2020. 4. 2.
[Linux]TCP의 전송특성과 에코 클라이언트의 문제점 해결 잡담 오늘은 TCP의 전송 특성에 대해서 알아볼 것인데 그전에 소켓, 프로토콜, 데이터의 전송방식에 대해서 자세히 알아보겠습니다. 원래는 처음부터 소켓에 대해서 소개를 했어야 했는데 순서가 뒤죽박죽이 돼버렸네요... 그래도 서버/클라이언트 구현에 대한 전체적인 흐름과 코드를 여러 개 작성하고, 그 뒤에 이론을 설명하면 "아 이 함수가 이런 역할을 하는 함수였구나"라고 좀 더 와 닿지 않을까 해서... 이제 진짜로 들어가 볼게요. 소켓의 생성 우선 소켓이란 무엇일까요? 소켓은 네트워크를 통한 두 컴퓨터의 연결을 의미하기도 하고, 네트워크 망에 사용되는 도구라고 생각하면 됩니다. 소켓을 사용하면 네트워크에서 데이터가 송수신되는 원리를 잘 몰라도 데이터 송수신을 할 수 있습니다. 또 운영체제가 소켓을 제공해주.. 2020. 4. 1.
[Linux]Iterative 기반의 서버, 클라이언트 구현 오늘은 예정대로 에코 서버, 클라이언트를 구현해보도록 하겠습니다. 이전 글에서 작성했던 TCP 서버, 클라이언트의 코드에서 조금만 변경을 하면 되니 금방 끝날 것입니다. Iterative 서버의 구현 방식 이번에 만들 에코 서버는 클라이언트가 전송한 문자열을 그대로 클라이언트에게 재전송을 해주는데요. 이전에 만든 TCP 서버는 클라이언트가 연결된 것을 확인한 후에 문자열을 전송해주고 바로 종료되는 방식이었습니다. 그래서 listen함수 호출을 통해서 만들어진 연결 요청 대기 큐가 별 소용이 없었습니다. 여러 클라이언트와 데이터를 주고받으려면 어떻게 해야 할까요? 바로 반복문을 돌려서 accept함수를 여러 번 호출하면 됩니다. 왼쪽에는 Iterative 서버의 함수 호출 순서를 나타낸 그림입니다. 이렇게.. 2020. 3. 31.
[Linux]TCP 서버/클라이언트 구현 이전 글에서는 TCP, UDP, 그리고 프로토콜 스택에 대해서 알아보았습니다. 이번에 소개할 내용은 TCP 서버/클라이언트에 대한 이론과 실제 구현 코드입니다. 그리고 이번에 소개하는 함수들은 Windows 운영체제에서는 컴파일이 불가능하고, Linux에서만 작동하는 함수입니다. 그 점 참고하고 봐주세요. 오늘 작성할 TCP의 서버 프로그램은 다음과 같은 순서로 구현이 됩니다. TCP 서버 프로그램의 순서 서버의 소켓 생성 서버의 소켓을 서버의 주소 정보로 초기화 클라이언트의 연결 대기실을 생성 클라이언트와 서버의 연결을 진행 데이터의 송수신 소켓 연결 종료 연결 요청 대기상태로의 진입 서버가 listen함수를 호출하면 연결 요청 대기상태가 가능한 상태가 됩니다. 이는 클라이언트와 관련이 있습니다. 서버.. 2020. 3. 30.