Raspberry Pi에서 C/C++로 웹 소켓 서버 시작

개발에 이르는 배경



C 언어로 개발한 OpenCV 응용 프로그램에서 websocket으로 이미지를 전달할 때 OpenCV와 같은 C++에서 WebSocket으로 이미지를 전달하려고 했던 것이 시작입니다. 찾던 중 cwebsocket을 찾았지만 불행히도 원래 버전은 Raspberry Pi에서 작동하지 않았기 때문에 Raspberry Pi와 x86 모두에서 작동하도록 수정했습니다.

오리지널 판으로부터의 변경점



다음을 수정하여 htp : // 기주 b. 코 m / 오타 카사이 토 / c ぇ b 소 c t에 게시했습니다.
1. Base64 인코딩의 처리를 수정하여 32bit/64bit 양쪽에서 움직이도록 했습니다.
2. 향후, multi client에 대응할 수 있도록 Socket의 비블로킹을 사용하도록 수정되었습니다. (지금 현재 동시 접속 가능한 클라이언트는 1대입니다)
3. WebSocket 서버를 안전하게 종료할 수 있도록 수정되었습니다.
4. gcc,g++,c++의 어느 것도 컴파일 할 수 있도록(듯이) 했습니다.
5. 여러 클라이언트를 지원했습니다. (2017년 9월 13일)

수정 버전 코드 사용 방법



아래 단계에서 소스 코드를 얻고 빌드하고 서버를 시작한 후 브라우저에서 cwebsocket/client.html을 시작하십시오.

콘솔 화면


$ git clone git://github.com/NaotakaSaito/cwebsocket
$ cd cwebsocket/raspberry_pi
$ make
$ ./websocket 
opened 0.0.0.0:8088
connected 127.0.0.1:48092
disconnected


브라우저 측 화면



화면은 Raspberry Pi가 아니지만 Raspberry Pi에서도 같은 방식으로 움직입니다.



오리지널 버전의 이동 방법



원본 버전의 소스 코드는 htp : // 기주 b. 코 m / m8 r 게 / c ぇ b 소 c t에 있습니다. 여기는 x86이라면 문제없이 작동합니다.

오리지널 버전의 이동 방법


git clone git://github.com/m8rge/cwebsocket
cd cwebsocket
cd x86_server
cp ../lib/* .
gcc main.c websocket.c -o websocket
./websocket

오리지널 버전을 Raspberry Pi로 이동했을 때의 문제점



Raspberry Pi에서 실행하여 시작할 수 있지만 브라우저에서 연결하면 "Sec-WebSocket-Accept"에서 오류가 발생합니다. 나는 WebSocket 자체는 자세하지 않습니다만, 원인은 Base64의 인코딩 부분에 CPU의 비트폭에 의존한 코드가 있어, 인코딩 결과가 잘못되어 버려 브라우저측에서 에러가 발생하고 있었습니다.
또, 오리지널 판은 클라이언트를 접속한 상태로 서버측을 Ctrl+C로 종료하면, 잠시 동안 포트가 busy 상태로 서버를 재기동할 수 없다고 하는 문제도 있었습니다.

좋은 웹페이지 즐겨찾기