From abe3f4cfc6cfda20bb3f3befca0d942576f3efa5 Mon Sep 17 00:00:00 2001 From: zhangjinbang <13002584422@163.com> Date: Sun, 18 Feb 2024 18:33:42 +0800 Subject: [PATCH] 11 --- c++/devC/devC2/DigtalWork.c | 45 ++++ c++/devC/devC2/DigtalWork.h | 19 ++ c++/devC/devC2/DigtalWork.o | Bin 0 -> 410 bytes c++/devC/devC2/Makefile.win | 43 ++++ c++/devC/devC2/Project0.dev | 182 ++++++++++++++++ c++/devC/devC2/Project0.exe | Bin 0 -> 200029 bytes c++/devC/devC2/Project0.layout | 68 ++++++ c++/devC/devC2/RobotWork.c | 202 ++++++++++++++++++ c++/devC/devC2/RobotWork.h | 45 ++++ c++/devC/devC2/RobotWork.o | Bin 0 -> 7789 bytes c++/devC/devC2/Transcoding.c | 84 ++++++++ c++/devC/devC2/Transcoding.h | 26 +++ c++/devC/devC2/Transcoding.o | Bin 0 -> 2294 bytes c++/devC/devC2/UavWork.c | 353 +++++++++++++++++++++++++++++++ c++/devC/devC2/UavWork.h | 63 ++++++ c++/devC/devC2/UavWork.o | Bin 0 -> 13096 bytes c++/devC/devC2/WebsocketClient.c | 27 +++ c++/devC/devC2/WebsocketClient.h | 9 + c++/devC/devC2/WebsocketClient.o | Bin 0 -> 1105 bytes c++/devC/devC2/WebsocketConfig.c | 151 +++++++++++++ c++/devC/devC2/WebsocketConfig.h | 23 ++ c++/devC/devC2/WebsocketConfig.o | Bin 0 -> 4689 bytes c++/devC/devC2/WebsocketModel.h | 8 + c++/devC/devC2/gmon.out | Bin 0 -> 23970 bytes 24 files changed, 1348 insertions(+) create mode 100644 c++/devC/devC2/DigtalWork.c create mode 100644 c++/devC/devC2/DigtalWork.h create mode 100644 c++/devC/devC2/DigtalWork.o create mode 100644 c++/devC/devC2/Makefile.win create mode 100644 c++/devC/devC2/Project0.dev create mode 100644 c++/devC/devC2/Project0.exe create mode 100644 c++/devC/devC2/Project0.layout create mode 100644 c++/devC/devC2/RobotWork.c create mode 100644 c++/devC/devC2/RobotWork.h create mode 100644 c++/devC/devC2/RobotWork.o create mode 100644 c++/devC/devC2/Transcoding.c create mode 100644 c++/devC/devC2/Transcoding.h create mode 100644 c++/devC/devC2/Transcoding.o create mode 100644 c++/devC/devC2/UavWork.c create mode 100644 c++/devC/devC2/UavWork.h create mode 100644 c++/devC/devC2/UavWork.o create mode 100644 c++/devC/devC2/WebsocketClient.c create mode 100644 c++/devC/devC2/WebsocketClient.h create mode 100644 c++/devC/devC2/WebsocketClient.o create mode 100644 c++/devC/devC2/WebsocketConfig.c create mode 100644 c++/devC/devC2/WebsocketConfig.h create mode 100644 c++/devC/devC2/WebsocketConfig.o create mode 100644 c++/devC/devC2/WebsocketModel.h create mode 100644 c++/devC/devC2/gmon.out diff --git a/c++/devC/devC2/DigtalWork.c b/c++/devC/devC2/DigtalWork.c new file mode 100644 index 0000000..0f143cf --- /dev/null +++ b/c++/devC/devC2/DigtalWork.c @@ -0,0 +1,45 @@ +//#include "DigtalWork.h" +// +//bool init3() { +// if (websocket_connect(&websocket,"ws://172.16.1.131:10088/cxx") < 0) { +// printf("WebSocket连接失败"); +// return false; +// } +// printf("websocket连接成功"); +// createPthread(); +// initRobot(); +// return true; +//} +// +//void initHuman() { +// +// char sex; +// printf("初始化,输入数字人性别Male/Female:\n"); +// scanf("%s", &sex); +// if(sex == ""){ +// strcpy(sex, "male"); +// } +// +// printf("操作结果:"); +//} +// +//void setName() { +// char name; +// printf("设置数字人名字:\n"); +// scanf("%s", &name); +//} +// +//void setAge() { +// +//} +// +//void getHandAction() { +// +//} +// +//void setHandAction() { +// +//} +// +// + diff --git a/c++/devC/devC2/DigtalWork.h b/c++/devC/devC2/DigtalWork.h new file mode 100644 index 0000000..675fa34 --- /dev/null +++ b/c++/devC/devC2/DigtalWork.h @@ -0,0 +1,19 @@ +//#ifndef _ROBOTWORK_H_ +//#define _ROBOTWORK_H_ +// +//#include "WebsocketConfig.h" +// +// typedef struct { +// +// }Digtal; +// +// bool init3(); /*初始化连接*/ +// void initHuman(); +// void setName(); +// void setAge(); +// void getHandAction(); +// void setHandAction(); +// Digtal digtal; +// int number3 = 0; /*编号*/ +// int event_id3 = 0; +//#endif diff --git a/c++/devC/devC2/DigtalWork.o b/c++/devC/devC2/DigtalWork.o new file mode 100644 index 0000000000000000000000000000000000000000..4f84007864ee81888b350e57768a7886c58afb10 GIT binary patch literal 410 zcmeZaWMKe-GeFD*X0bBrm84dbfZ4bS1qOozy_Cd~MBGZiG7by|2lSGPiwP)WXaK6y zH$hb;0pxB$6=DFI=iu(_Y^9)4l9Fp?qHCzBV4`QKX9QBFmzJ563RVB_KLbNLqf2Ib zNn%cTeo?kwGDHH|Z;U`8W)Oh}kp0C3l*6h9$xqBU)PRiT2N6I33T0+SQ7{{skOFe_ Oia-IWQdL!j%me^kU?vLy literal 0 HcmV?d00001 diff --git a/c++/devC/devC2/Makefile.win b/c++/devC/devC2/Makefile.win new file mode 100644 index 0000000..8e3eeee --- /dev/null +++ b/c++/devC/devC2/Makefile.win @@ -0,0 +1,43 @@ +# Project: Project0 +# Makefile created by Dev-C++ 5.11 + +CPP = g++.exe +CC = gcc.exe +WINDRES = windres.exe +OBJ = Transcoding.o WebsocketClient.o UavWork.o RobotWork.o WebsocketConfig.o DigtalWork.o +LINKOBJ = Transcoding.o WebsocketClient.o UavWork.o RobotWork.o WebsocketConfig.o DigtalWork.o +LIBS = -L"F:/devCpp/MinGW64/x86_64-w64-mingw32/lib32" -static-libgcc -lwsock32 -Ldll -lws2_32 -lwsock32 -lmswsock -m32 -pg +INCS = -I"F:/devCpp/MinGW64/include" -I"F:/devCpp/MinGW64/x86_64-w64-mingw32/include" -I"F:/devCpp/MinGW64/lib/gcc/x86_64-w64-mingw32/4.9.2/include" +CXXINCS = -I"F:/devCpp/MinGW64/include" -I"F:/devCpp/MinGW64/x86_64-w64-mingw32/include" -I"F:/devCpp/MinGW64/lib/gcc/x86_64-w64-mingw32/4.9.2/include" -I"F:/devCpp/MinGW64/lib/gcc/x86_64-w64-mingw32/4.9.2/include/c++" +BIN = Project0.exe +CXXFLAGS = $(CXXINCS) -m32 -pg +CFLAGS = $(INCS) -m32 -pg +RM = rm.exe -f + +.PHONY: all all-before all-after clean clean-custom + +all: all-before $(BIN) all-after + +clean: clean-custom + ${RM} $(OBJ) $(BIN) + +$(BIN): $(OBJ) + $(CC) $(LINKOBJ) -o $(BIN) $(LIBS) + +Transcoding.o: Transcoding.c + $(CC) -c Transcoding.c -o Transcoding.o $(CFLAGS) + +WebsocketClient.o: WebsocketClient.c + $(CC) -c WebsocketClient.c -o WebsocketClient.o $(CFLAGS) + +UavWork.o: UavWork.c + $(CC) -c UavWork.c -o UavWork.o $(CFLAGS) + +RobotWork.o: RobotWork.c + $(CC) -c RobotWork.c -o RobotWork.o $(CFLAGS) + +WebsocketConfig.o: WebsocketConfig.c + $(CC) -c WebsocketConfig.c -o WebsocketConfig.o $(CFLAGS) + +DigtalWork.o: DigtalWork.c + $(CC) -c DigtalWork.c -o DigtalWork.o $(CFLAGS) diff --git a/c++/devC/devC2/Project0.dev b/c++/devC/devC2/Project0.dev new file mode 100644 index 0000000..1994412 --- /dev/null +++ b/c++/devC/devC2/Project0.dev @@ -0,0 +1,182 @@ +[Project] +FileName=Project0.dev +Name=Project0 +Type=1 +Ver=2 +ObjFiles= +Includes= +Libs= +PrivateResource= +ResourceIncludes= +MakeIncludes= +Compiler= +CppCompiler= +Linker= +IsCpp=0 +Icon= +ExeOutput= +ObjectOutput= +LogOutput= +LogOutputEnabled=0 +OverrideOutput=0 +OverrideOutputName= +HostApplication= +UseCustomMakefile=0 +CustomMakefile= +CommandLine= +Folders=Common,Common/Headers,Common/Sources,DigtalHuman,DigtalHuman/Headers,DigtalHuman/Sources,Robot,Robot/Headers,Robot/Sources,Uav,Uav/Headers,Uav/Sources +IncludeVersionInfo=0 +SupportXPThemes=0 +CompilerSet=3 +CompilerSettings=0000000100000000100000000 +UnitCount=13 + +[VersionInfo] +Major=1 +Minor=0 +Release=0 +Build=0 +LanguageID=1033 +CharsetID=1252 +CompanyName= +FileVersion= +FileDescription=Developed using the Dev-C++ IDE +InternalName= +LegalCopyright= +LegalTrademarks= +OriginalFilename= +ProductName= +ProductVersion= +AutoIncBuildNr=0 +SyncProduct=1 + +[Unit2] +FileName=Transcoding.h +CompileCpp=0 +Folder=Common/Headers +Compile=1 +Link=1 +Priority=1000 +OverrideBuildCmd=0 +BuildCmd= + +[Unit3] +FileName=WebsocketClient.c +CompileCpp=0 +Folder=Common/Sources +Compile=1 +Link=1 +Priority=1000 +OverrideBuildCmd=0 +BuildCmd= + +[Unit4] +FileName=WebsocketClient.h +CompileCpp=0 +Folder=Common/Headers +Compile=1 +Link=1 +Priority=1000 +OverrideBuildCmd=0 +BuildCmd= + +[Unit5] +FileName=UavWork.h +CompileCpp=0 +Folder=Uav/Headers +Compile=1 +Link=1 +Priority=1000 +OverrideBuildCmd=0 +BuildCmd= + +[Unit6] +FileName=UavWork.c +CompileCpp=0 +Folder=Uav/Sources +Compile=1 +Link=1 +Priority=1000 +OverrideBuildCmd=0 +BuildCmd= + +[Unit7] +FileName=RobotWork.h +CompileCpp=0 +Folder=Robot/Headers +Compile=1 +Link=1 +Priority=1000 +OverrideBuildCmd=0 +BuildCmd= + +[Unit1] +FileName=Transcoding.c +CompileCpp=0 +Folder=Common/Sources +Compile=1 +Link=1 +Priority=1000 +OverrideBuildCmd=0 +BuildCmd= + +[Unit8] +FileName=RobotWork.c +CompileCpp=0 +Folder=Robot/Sources +Compile=1 +Link=1 +Priority=1000 +OverrideBuildCmd=0 +BuildCmd= + +[Unit9] +FileName=WebsocketConfig.c +CompileCpp=0 +Folder=Common/Sources +Compile=1 +Link=1 +Priority=1000 +OverrideBuildCmd=0 +BuildCmd= + +[Unit10] +FileName=WebsocketConfig.h +CompileCpp=0 +Folder=Common/Headers +Compile=1 +Link=1 +Priority=1000 +OverrideBuildCmd=0 +BuildCmd= + +[Unit11] +FileName=WebsocketModel.h +CompileCpp=0 +Folder=Common/Headers +Compile=1 +Link=1 +Priority=1000 +OverrideBuildCmd=0 +BuildCmd= + +[Unit12] +FileName=DigtalWork.h +CompileCpp=0 +Folder=DigtalHuman/Headers +Compile=1 +Link=1 +Priority=1000 +OverrideBuildCmd=0 +BuildCmd= + +[Unit13] +FileName=DigtalWork.c +CompileCpp=0 +Folder=DigtalHuman/Sources +Compile=1 +Link=1 +Priority=1000 +OverrideBuildCmd=0 +BuildCmd= + diff --git a/c++/devC/devC2/Project0.exe b/c++/devC/devC2/Project0.exe new file mode 100644 index 0000000000000000000000000000000000000000..a40bbb5418000fe42c9990bc9c1b13c4341fe224 GIT binary patch literal 200029 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 No@q`t8=dQz{{wHGP3!;w literal 0 HcmV?d00001 diff --git a/c++/devC/devC2/Transcoding.c b/c++/devC/devC2/Transcoding.c new file mode 100644 index 0000000..1123209 --- /dev/null +++ b/c++/devC/devC2/Transcoding.c @@ -0,0 +1,84 @@ +#include "Transcoding.h" + + +wchar_t * ANSIToUnicode(const char* str) { + int textlen; + wchar_t * result; + textlen = MultiByteToWideChar( CP_ACP, 0, str,-1, NULL,0 ); + result = (wchar_t *)malloc((textlen+1)*sizeof(wchar_t)); + memset(result,0,(textlen+1)*sizeof(wchar_t)); + MultiByteToWideChar(CP_ACP, 0,str,-1,(LPWSTR)result,textlen ); + return result; +} + +char * UnicodeToANSI( const wchar_t* str ) +{ + char* result; + int textlen; + textlen = WideCharToMultiByte( CP_ACP, 0, str, -1, NULL, 0, NULL, NULL ); + result =(char *)malloc((textlen+1)*sizeof(char)); + memset( result, 0, sizeof(char) * ( textlen + 1 ) ); + WideCharToMultiByte( CP_ACP, 0, str, -1, result, textlen, NULL, NULL ); + return result; +} + +wchar_t * UTF8ToUnicode( const char* str ) +{ + int textlen; + wchar_t * result; + textlen = MultiByteToWideChar( CP_UTF8, 0, str,-1, NULL,0 ); + result = (wchar_t *)malloc((textlen+1)*sizeof(wchar_t)); + memset(result,0,(textlen+1)*sizeof(wchar_t)); + MultiByteToWideChar(CP_UTF8, 0,str,-1,(LPWSTR)result,textlen ); + return result; +} + +char * UnicodeToUTF8( const wchar_t* str ) +{ + char* result; + int textlen; + textlen = WideCharToMultiByte( CP_UTF8, 0, str, -1, NULL, 0, NULL, NULL ); + result =(char *)malloc((textlen+1)*sizeof(char)); + memset(result, 0, sizeof(char) * ( textlen + 1 ) ); + WideCharToMultiByte( CP_UTF8, 0, str, -1, result, textlen, NULL, NULL ); + return result; +} + +/*??????????????Unicode - ANSI*/ +char* w2m(const wchar_t* wcs) +{ + int len; + char* buf; + len =wcstombs(NULL,wcs,0); + if (len == 0) + return NULL; + buf = (char *)malloc(sizeof(char)*(len+1)); + memset(buf, 0, sizeof(char) *(len+1)); + len =wcstombs(buf,wcs,len+1); + return buf; +} + +/*??????????????ANSI - Unicode*/ +wchar_t* m2w(const char* mbs) +{ + int len; + wchar_t* buf; + len =mbstowcs(NULL,mbs,0); + if (len == 0) + return NULL; + buf = (wchar_t *)malloc(sizeof(wchar_t)*(len+1)); + memset(buf, 0, sizeof(wchar_t) *(len+1)); + len =mbstowcs(buf,mbs,len+1); + return buf; +} + +char* ANSIToUTF8(const char* str) +{ + return UnicodeToUTF8(ANSIToUnicode(str)); +} + +char* UTF8ToANSI(const char* str) +{ + return UnicodeToANSI(UTF8ToUnicode(str)); +} + diff --git a/c++/devC/devC2/Transcoding.h b/c++/devC/devC2/Transcoding.h new file mode 100644 index 0000000..dbd9d88 --- /dev/null +++ b/c++/devC/devC2/Transcoding.h @@ -0,0 +1,26 @@ +#ifndef _TRANSCODING_H_ +#define _TRANSCODING_H_ + +#include +#include +#include +#define BUF_SIZE 1024 + + wchar_t * ANSIToUnicode(const char* str); + + char * UnicodeToANSI( const wchar_t* str ); + + wchar_t * UTF8ToUnicode( const char* str ); + + char * UnicodeToUTF8( const wchar_t* str ); + + char* w2m(const wchar_t* wcs); + + wchar_t* m2w(const char* mbs); + + char* ANSIToUTF8(const char* str); + + char* UTF8ToANSI(const char* str); + +#endif + diff --git a/c++/devC/devC2/Transcoding.o b/c++/devC/devC2/Transcoding.o new file mode 100644 index 0000000000000000000000000000000000000000..67ae2d319baab182648e3bcf5f862579dbe6b9a0 GIT binary patch literal 2294 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 Va2EJ|K70_;y7N83plhbb_&=oE2fhFR literal 0 HcmV?d00001 diff --git a/c++/devC/devC2/WebsocketClient.c b/c++/devC/devC2/WebsocketClient.c new file mode 100644 index 0000000..e615e48 --- /dev/null +++ b/c++/devC/devC2/WebsocketClient.c @@ -0,0 +1,27 @@ +#include +#include +#include "WebsocketClient.h" +#include "UavWork.h" +#pragma comment(lib,"ws2_32.lib") + + +int main(int argc, char *argv[]) { + int num; + printf("请选择需要操作的组件类型:\n"); + printf("1.无人机\n"); + printf("2.机器人\n"); + printf("3.数字人\n"); + scanf("%d", &num); + printf("你输入的整数是: %d\n", num); + operate(num); + return 0; +} + +void operate(int choose) { + switch(choose) { + case 1: init(); break; + case 2:break; + case 3:break; + } +} + diff --git a/c++/devC/devC2/WebsocketClient.h b/c++/devC/devC2/WebsocketClient.h new file mode 100644 index 0000000..6cfca30 --- /dev/null +++ b/c++/devC/devC2/WebsocketClient.h @@ -0,0 +1,9 @@ +#ifndef _WEBSOCKETCLIENT_H_ +#define _WEBSOCKETCLIENT_H_ + +#define BUF_SIZE 1024 + +void operate(int choose); + +#endif + diff --git a/c++/devC/devC2/WebsocketClient.o b/c++/devC/devC2/WebsocketClient.o new file mode 100644 index 0000000000000000000000000000000000000000..36dda42059cda6f7b0c70b032a5c44600794ac99 GIT binary patch literal 1105 zcmeZaWMu$>c}xrpVqg{vqh3jBMG2Sg4gGF6v=hNmVADZ7Nya1^~ z5XV_m-~vFlG)xl621$Sw0@=DScCU+yOs9(q3sB4qCf1D*vqTYNQF*}*6xad83?~nR zobZMNY+|=7NAnM+62ayl%q9HIKNw57!NRXuCcI{xaPshk2@{ULzPRwp#|tkmt=e?+ z`uD9zuD{&#@4$l#XBY2cFw{GD@5JfdzZi`4cKqoCT5-0Adjaejo{o zO%Whu0P{o`K*7Nc#B9JgW?&EkVi5*)APEuEfr}Z##Vp`r_HZ#5xL7b;ECR?924WG0 zbhua!m=6-`0FglmL>7&o4+VN-Rlj2C~6w7?9IANCPwDS|AAu3j{z;-@xnvRD+O% zv5?a?GcGkq>6!(s#t)_)g$Bh22!L`VGb1PjP(ge=vR{Ed1^PWXzcde#S3$01V30!6 z22@i}T7t-aU|q$@iFs)-MPQMFqRhM!m=IVbGcOZiE=UBF1|T_9rK+k5nF(}OeqM1& KVo^zH0RsS2hqgcf literal 0 HcmV?d00001 diff --git a/c++/devC/devC2/WebsocketConfig.c b/c++/devC/devC2/WebsocketConfig.c new file mode 100644 index 0000000..3021087 --- /dev/null +++ b/c++/devC/devC2/WebsocketConfig.c @@ -0,0 +1,151 @@ +#include "WebsocketConfig.h" +#include +#include "Transcoding.h" + + + +int websocket_connect(Websocket *ws, const char *address){ + // 解析URL + char host[BUF_SIZE], path[BUF_SIZE]; + int port = 80; + char *url = (char *)malloc(sizeof(char) * 100); + memset(url, 0, strlen(url)); + if(strlen(address) == 0) { + url = (char *)"ws://127.0.0.1:10088/cxx"; + } else { + memcpy(url,address,strlen(address)); + } + + if (sscanf(url, "ws://%[^:/]:%d/%s", host, &port, path) != 3) { + if (sscanf(url, "ws://%[^:/]:%d", host, &port) != 2) { + return -1; + } + } + + WSADATA wsaData; + if(WSAStartup(MAKEWORD(2,2),&wsaData) != 0) { + printf("winsock连接失败"); + return -1; + } + + // 建立TCP连接 + int sockfd = socket(AF_INET, SOCK_STREAM, 0); + SOCKADDR_IN addr; + addr.sin_family = AF_INET; + addr.sin_port = htons(port); + addr.sin_addr.S_un.S_addr = inet_addr(host); + int result = connect(sockfd, (SOCKADDR*)&addr, sizeof(SOCKADDR)); + if (result < 0) { + closesocket(sockfd); + return -1; + } + + // 发送WebSocket握手请求 + sprintf(ws->buf, "GET /%s HTTP/1.1\r\n", path); + sprintf(ws->buf + strlen(ws->buf), "Host: %s:%d\r\n", host, port); + sprintf(ws->buf + strlen(ws->buf), "Connection: Upgrade\r\n"); + sprintf(ws->buf + strlen(ws->buf), "Pragma: no-cache\r\n"); + sprintf(ws->buf + strlen(ws->buf), "Cache-Control: no-cache\r\n"); + sprintf(ws->buf + strlen(ws->buf), "Upgrade: websocket\r\n"); + sprintf(ws->buf + strlen(ws->buf), "Sec-WebSocket-Version: 13\r\n"); + sprintf(ws->buf + strlen(ws->buf), "Accept-Encoding: gzip, deflate\r\n"); + sprintf(ws->buf + strlen(ws->buf), "Accept-Language: zh-CN,zh;q=0.9\r\n"); + sprintf(ws->buf + strlen(ws->buf), "Sec-WebSocket-Version: 13\r\n"); + sprintf(ws->buf + strlen(ws->buf), "Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==\r\n"); + sprintf(ws->buf + strlen(ws->buf), "Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits\r\n"); + sprintf(ws->buf + strlen(ws->buf), "\r\n"); + if (send(sockfd, ws->buf, strlen(ws->buf), 0) < 0) { + closesocket(sockfd); + return -1; + } + + // 接收WebSocket握手响应 + int n = recv(sockfd, ws->buf, BUF_SIZE, 0); + if (n < 0) { + closesocket(sockfd); + return -1; + } + + ws->buf[n] = '\0'; + + //HTTP/1.1 101 Switching Protocols + if (strstr(ws->buf, "HTTP/1.1 101") == NULL) { + closesocket(sockfd); + return -1; + } + // WebSocket连接建立成功 + ws->sockfd = sockfd; + return 0; +} + +//const char* parseObject(UAV uav) { +// char *json_str = (char *)malloc(sizeof(char) * 100); // 假设 JSON 字符串最大长 +//// sprintf(json_str, "{\"number\":\"%i\",\"event_id\":\"%i\",\"pos\":%s,\"type\":%s,\"commond\":%s}" +//// ,uav.number, uav.event_id,"[0.0,0.0]", uav.type, uav.commond); +// sprintf(json_str, "{\"event_id\":\"%i\",\"type\":%s,\"commond\":%s}" +// , uav.event_id, uav.type, uav.commond); +// return json_str; +//} + +int websocket_recv() { + // 接收响应消息 + char recvMsg[1024]; + memset(recvMsg, 0, sizeof(recvMsg)); + int recvLen = recv(websocket.sockfd, recvMsg, sizeof(recvMsg) - 1, 0); + if (recvLen == SOCKET_ERROR || recvLen == 0) { + printf("接收响应消息失败\n"); + return -1; + } + recvMsg[recvLen] = '\0'; +// char* abc = UTF8ToANSI(recvMsg); + printf("收到响应消息:%s",recvMsg); + return recvLen; +} + +int websocket_send(const char *data, int len) { + // 构造WebSocket数据帧 + char frame[BUF_SIZE]; + frame[0] = 0x81; + frame[1] = (0x80 | len); + frame[2] = 0x12; + frame[3] = 0x34; + frame[4] = 0x56; + frame[5] = 0x78; + int i; + for (i = 0; i < len; i++) { + frame[i + 6] = data[i] ^ frame[i%4+2]; + } + if (send(websocket.sockfd, frame, strlen(frame), 0) < 0) { + return -1; + } + return 0; +} + +void sendMessage(const char *data) { + printf(data); + if (websocket_send(data,strlen(data)) < 0) { + printf("WebSocket发送数据失败\n"); + websocket_close(); + }else{ + printf("WebSocket发送数据成功呢\n"); + getChoose(); + } +} + +void websocket_close() { + closesocket(websocket.sockfd); + printf("子线程已销毁,通信已关闭"); +} + +void createPthread() { + // 创建接收消息的线程 + if (pthread_create(&reply_thread, NULL, websocket_recv, NULL) != 0) { +// printf("创建接收消息线程失败"); + exit(1); + }else { +// printf("创建接收消息线程成功"); + } +} + + + diff --git a/c++/devC/devC2/WebsocketConfig.h b/c++/devC/devC2/WebsocketConfig.h new file mode 100644 index 0000000..f479067 --- /dev/null +++ b/c++/devC/devC2/WebsocketConfig.h @@ -0,0 +1,23 @@ +#ifndef _WEBSOCKETCONFIG_H_ +#define _WEBSOCKETCONFIG_H_ + +#include "WebsocketModel.h" +#include +#include +#include +#include + + pthread_t send_thread, reply_thread; + + int websocket_connect(Websocket *ws, const char *address); + + int websocket_recv(); + + int websocket_send(const char *data, int len); + + void websocket_close(); + + void createPthread(); + + +#endif diff --git a/c++/devC/devC2/WebsocketConfig.o b/c++/devC/devC2/WebsocketConfig.o new file mode 100644 index 0000000000000000000000000000000000000000..945606cc6df2c987bd16c2562e895aa4a4e3dc08 GIT binary patch literal 4689 zcmb_ge@q+K9e)Ogx(tTfcr9(y)-Y&c!v-@(h_gs;hy}}7O9dp`(!@3PVZ0jK^BoPK zW@_YE>dEp{ZR;PET4_tQc7J5krfg}mt`#IJUb1$O&}dXjH&&%>HqbPwEI$?!_W8c& zJI)yRYlpb|ywCUdyLaDr=PpwTqhqd|F$YIxlT(pK6pqCyXkpB3Vr;2YjCbQ=XH8E! zgMP(t&|3?7Skt((UzXRB8M$XkFPM-5%F~j@_W}&wu8qW%`%B~pu0w9WFVyoiw&dGZ zVt6T6gC>DLPoMhn-aS2s7Z%{-G6}M&_pdH5cM~$#1aaZ4>b;cqUQ*39VzjHqlHFBf zCVc~)_LfzgU`NJ>Z_j!!k!-#Sl+lQWurt_XQnLsL(wgCcfy%($;2aNfPkxZ(wPK}p zJ>4&_)-6&>-&n@+59cPvGO1lxxL-3$D=K2_rBg8>D2%S7Leyy? zHL4eLO|t^a71J`+J2#L`wZL-`OY<5kULQx%x^we@nrekOSC&ztrrID#d*>*M6>c*x zkR!FX#%%O}7#EX=F0#>kp=uPEMV^l%&$QQ)={D=r$)}DMt7;SXEd4UwS7;^2$+x(V zr!Y26!%lr-^|bFd+OA~#@Y5ZhO{K))x;YvL35HD3uRnJ+@NH ztuQLL?@stbupjc1p(Pq~1YqwE3`#JxmX}U??%cq*9f}m((H#BE1LR(SFw zHat-dl^f+C(lsMpH{93{O8syn#{y5mjigW#whfZ#kpd1Ru~+Kvp&1A~CBa&8?7_vF zki$sHhFNhThp&`xl*J=~08Gqr#o?u50 zvu}{vipwsz^hZO(aOn?GnO6JQAkwzAKiV(`mxJ5Cw*xMloZD!&>>K6z|EhN#Ki{Bv z8+B8mwvNHb*O6T3ql363TfVhZ{tj~M**T0+P4id3i&5RzNlBi%QrTHl~DGScF{1HS#Iu|phQs6#HiWoU_!SFV*> zq+Xr#&3m4D3PL^;q`X{Ajh8FI1l>sQi&oXUm^`$&td!u)hBu?Lj>F|j|DAt0^8y*B zy^AQw=mx6iG*w8?P?FfhC?#$_$paq7c9Z<$v(Kge11FQID>&adnYxNg%Vg>rE_)_Z z*KrxidKamd`K|Dk=`2b2En+52(-kKwLA*He&j(D?$+_bC>Ew7(#fc-EC@0tKb4SVv zB#|7nwtLH-naJc#hB~ooI%r|!R8~&~md9-|{$O=ObG|Gg#UrCD zLUvGgH#WMOw>q2f=W@H6n%deL10y3sP`mGdyK%p}HrQAzuVUE2aFpUt9D8f#>}$We z$U3~ecBt7qdwaVZT}~IebZ1Of-1b@-4lrWWs;Iy7tR3DFMT(-aM`gD?E+vK}Sw>HF z1gR}6(sp|w5|*NhZ^%F5L#SZvpszoy$mBH_!0u{tF$BLbwJ`JQ)Qzd5JdLv#e*2b2 zxRJFU@b#mAdhhJbw?E`s1?=%NCtv-;Ec?sM)ZdQ3d;Z+if8YGzm1FPyeEOa9=T6T4 z`U2}{Z+F}4l;BWni^ElKZ*gvOHq*_*D=(vWLL2)c&Q%<_aIWU46KCRW?Atisf&UUV zfU}T314MV+#*X4Fq`v^F<=mfj?gO2>1w`+0CG7K98Ny;S&_m#CY#Y$MT)GeFK8}Wg zws7<^(ES{p0D6F<4}pZ2kAWTrXJglaM1J=aY0@enA#DT_(wL5p>F6^ZxzMhJ-l&e= z)ln51jF5(PG^3-BfJ9dJ;cZjseN9I`pa*&OGLWd_H6T0Z#&zx!AmQa-Ky|#fo4T|C z&z-n$yMe?#dJKpj^%5on34cET5?+1;RL{Mf)Va5T9^%}2AmMNCZCcI;fP}yA1Bskp z0TOz@1QNCF}qmC>G{Luj;6HkPrN**H{DJ>Slt$fhU1<#jT6ta z$JMM6g9^50Pm4ATM