서버, 클라이언트 연습 프로그램[구구단, C,Linux]
- 프로그래밍/리눅스
- 2019. 7. 17.
서버, 클라이언트 연습 프로그램[구구단, C, Linux]
오늘은 유닉스라는 과목을 들으면서 제가 만든 코드를 올려보려고 합니다.
- TCP서버 프로그램
- server는 client가 접속하면 random한 구구단 문제를 client로 전송
- client는 답을 입력하고 서버로 전송
- server는 답이 맞았는지 틀렸는지 client로 전송
- client는 server로 부터의 결과를 출력
코드
코드는 아래와 같습니다.
코드 파일은 깃허브에서 다운받으실 수 있습니다.
(귀찮아서 나중에 링크 올릴게요.)
1. tcp서버(server) 코드
2. tcp구구단 클라이언트(client) 코드
실행
학교에서 제공한 서버와 제가 가지고 있는 라즈베리파이(라즈비안)를 이용해서 코드를 실행했습니다.(리눅스 환경)
1. tcp 서버와 클라이언트(server&client)
최종적으로 위의 사진처럼 나올겁니다.
이해를 돕기 위한 설명
tcp와 udp의 차이에 대한 설명
1. tcp:전송 실패하면 다시 보냄
udp:전송 실패해도 다시 보내지 않음.
2. tcp: 연결 지향형(connection-oriented)
udp: 비연결형(connectionless)
3. tcp:신뢰성 보장
udp:신뢰성 보장하지 않음
4. tcp:흐름 제어 기능(flow-control)제공
udp: 흐름 제어 기능 없음
5. tcp:순서 보장
udp:순서를 보장하지 않음
ip주소: 인터넷을 이용할 때 사용하는 주소로 점(.)으로 구분된 32비트 숫자.
소켓의 종류
포트번호: 호스트에서 동작하고 있는 서비스를 구분하는 번호
-2바이트 정수로 0~65535까지 사용 가능
주요 코드 설명
소켓 주소 구조체는 아래와 같습니다.
문자열 형태의 ip주소& 구조체 형태의 ip주소
소켓 인터페이스 함수는 아래와 같습니다.
socket:소켓 생성하기
bind: 소켓에 이름 지정하기
listen: 클라이언트 연결 기다리기
accept: 연결 요청 수락하기
connect: 서버와 연결하기
recv: 데이터 받기
send: 데이터 보내기
close: 소켓 파일 기술자 종료
그냥 포트를 사용하면 여러 번 사용하지 못합니다.
그럴 때 사용하는 포트 재사용:setsockopt()
tcp형태(소켓 함수의 호출 순서)
srand: 랜덤으로 구구단을 출력하기 위해서 사용
sprintf(buf,"dd%d",n);
간단합니다.
buf[64]이고 n이 99라고 가정하고 설명하겠습니다.
sprintf(buf,"dd%d",n)으로 하면 buf에는 dd99가 저장돼있다고 생각하면 됩니다.
문자+문자같은 느낌이랄까?
대충 거의 설명을 끝낸 것 같네요.
+추가
혹시 이해가 잘 안되면 아래 pdf의 예제를 참고해주세요.
위의 내용들도 아래의 예제에 있습니다.