필자는 컴공과 대학교 3학년으로 "네트워크프로그래밍" 이라는 과목을 수강하고 있다.
기본 개념이 곧 무언가로 향하는 지름길이라는 것을 와닿게 설명하기 위해서는 c언어를 사용해가며 설명해야한다.
그러면 안읽을 사람도 있을 수 있으니 간단하게 몇줄평을 하자면
1. 주어진 과제에 기본 개념을 대충 흐름만 숙지하고 과제부터 하려고 함
2. 과제를 하다가 사소한 부분에서 막혔는데 왜 막혔는지를 모르겠음 찾다가 1시간 날림
3. 겨우 겨우 찾아냈더니 진짜 사소한 실수였음... 기본 개념을 한번 훑고 시작했으면 안했을 실수
4. 모든 일을 시작할 땐 기본 개념을 잘 다지고 들어가기
자세하게 설명해보자면
Thread or Select 함수를 사용하여 온도 범위 측정, 알람 프로그램을 만드는 것이다.
그때 Thread를 사용하려고 3,4주 전에 짜놨던 코드를 복붙해서 쓰는데 자꾸 오류가 나는 것이다.
send() 함수가 말을 안듣고 recv() 함수도 먹통이다
40분이 걸려서 오류를 잡았는데 그 원인은
Thread를 만드는 함수인 CreateThread(), _beginthreadex() 에다가 안그래도 포인터인 LPVOID 형으로 형변환을 해주는데 거기에 또 &hClntSock 으로 주소를 넣고 있으니 이중 포인터가 전달되면서 오류가 날 수 밖에 없지 않겠는가
CreateThread(NULL, 0, ProcessClient, (LPVOID)hClntSock, 0, &ThreadId) 요래 넣어야 하는데
CreateThread(NULL, 0, ProcessClient, (LPVOID)&hClntSock, 0, &ThreadId) 요래 넣어서 발생한 문제였다.
마지막 ThreadId도 주소를 넣어야하는지 안넣어도 되는지를 몇번 오류 내보고 알았습니다.
역시 c는 포인터가 성가실 때가 있네요
쨋든 배운점은
모든 일을 시작할 때 기본 개념을 잘 숙지하고 시작하는게 오히려 목표에 더 빨리 도달하는 지름길이다.