Raspberry Pi에서 C/C++로 웹 소켓 서버 시작
2156 단어 C++CwebsocketRaspberryPi
개발에 이르는 배경
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 상태로 서버를 재기동할 수 없다고 하는 문제도 있었습니다.
Reference
이 문제에 관하여(Raspberry Pi에서 C/C++로 웹 소켓 서버 시작), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/NaotakaSaito/items/8e827361cde35425593f텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)