반응형

계산기 클라이언트

 

-

 

op_client.c
0.00MB

 

 

-

 

8행, 9

 

피연산자의 바이트 수 연산 결과의 바이트 수 상수화했다.

 

-

 

15

 

데이터의 송수신을 위한 메모리 공간은 이렇듯 배열을 기반으로 생성하는 것이 좋다.

 

데이터를 누적해서 송수신해야 하기 때문이다.

 

-

 

38행, 39

 

프로그램 사용자로부터 피연산자의 개수 정보를 후 이를 배열 opmsg에 저장하고 있다.

 

char형으로의 형 변환은

 

"피연산자의 개수 정보를 1바이트 정수 형태로 전달한다"

 

라고 정의한 프로토콜에 근거한 형 변환이다.

 

그렇기에 1바이트로 표현 불가능한 범위의 정수가 입력되면 안 된다.

 

참고로 여기서는 부호 있는 정수의 형태로 예제를 작성했지만

 

피연산자의 개수 정보는 음수가 될 수 없으므로 부호 없는 양의 정수 형태로 예제를 작성하는 것이 보다 합리적이다.

 

-

 

41행, 45행

 

프로그램 사용자로부터 정수를 입력받아서배열 opmsg에 이어서 저장하고 있다.

 

char형 배열 4바이트 int형 정수를 저장해야 하기 때문에 int형 포인터로 형 변환을 하고 있다.

 

만약에 이 부분이 이해되지 않는다면 포인터에 대한 별도의 학습이 필요한 상태이다.

 

-

 

47행

 

49행에서 문자를 입력받아야 하는데

 

이에 앞서 버퍼에 남아있는 \n 문자의 삭제를 위해 fgetc 함수가 호출된다.

 

-

 

49행

 

마지막으로 연산자 정보를 입력받아서배열 opmsg에 저장하고 있다.

 

-

 

50행

 

드디어 write 함수 호출을 통해 opmsg 저장되어 있는 연산과 관련된 정보를 한 번에 전송하고 있다.

 

이렇듯 한 번의 write 함수 호출을 통해서 묶어서 보내도 되고

 

여러 번의 write 함수 호출을 통해서 나눠서 보내도 된다.

 

여러 차례 강조했듯이

 

TCP는 데이터의 경계가 존재하지 않기 때문이다.

 

-

 

51행

 

서버가 전송해주는 연산 결과의 저장과정을 보이고 있다.

 

수신한 데이터의 크기가 4바이트이기 때문에 이렇게 한 번의 read 함수 호출로 충분히 수신이 가능하다.

 

-

 

이로써 클라이언트에 대한 분석을 마쳤다.

 

마지막으로 클라이언트가 서버에 전송하는 데이터 구성의 예를 그림으로 정리해 보자.

 

-

 

 

-

 

이렇듯 하나의 배열에 다양한 종류의 데이터를 저장해서 전송하려면

 

char형 배열을 선언해야 한다.

 

뿐만 아니라

 

다소 과도한 포인터 및 배열 연산이 등장하기도 한다.

 

이제 다음 글에서 서버 프로그램의 코드를 봐보자.

 

반응형

+ Recent posts