ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Суббота
23 ноября
742673 Топик полностью
Antimouse (16.03.2017 10:13 - 10:24, просмотров: 240) ответил Bill на Builder v6.0 А вообще задача такая: требуется обмениваться данными между некоторым устройством и ноутбуком. На устройстве есть модуль типа ESP8266, в то время как на буке предполагается использование встроенного WiFi модуля. Сам я никогда такими
В дополнение к ноутбуку и устройству с ESP8266 ещё точка(и) доступа наверное? Если сеть локальная, IP адреса известны, то вообще никаких проблем нет. У меня Builder 4.0, принимаю данные примерно так: В начале описания класса TForm1 добавляем: #define WM_READSOCKMESSAGE (WM_APP + 400) //--------------------------------------------------------------------------- class TForm1 : public TForm { protected: void __fastcall InSockReadMessageHandler(TMessage &Message); BEGIN_MESSAGE_MAP MESSAGE_HANDLER(WM_READSOCKMESSAGE, TMessage, InSockReadMessageHandler) END_MESSAGE_MAP(TForm) __published: // IDE-managed Components . . // здесь вся остальная начинка . } Реализация работы через сокет: // запускаем приём данных void __fastcall TForm1::Device_connectExecute(TObject *Sender) { // открываем сокет ServerSocket = OpenInSocket(ServerPort, ServerAddress); } // останавливаем приём данных void __fastcall TForm1::Device_disconnectExecute(TObject *Sender) { if(ServerSocket != NULL) {closesocket(ServerSocket); ServerSocket = NULL;} } SOCKET TForm1::OpenInSocket(DWORD Port, DWORD IPADRESS) { SOCKET m_hServerSocket; SOCKADDR_IN m_sockServerAddr; int BindRezult; memset(&m_sockServerAddr,0,sizeof(m_sockServerAddr)); m_sockServerAddr.sin_family = AF_INET; m_sockServerAddr.sin_addr.S_un.S_un_b.s_b1=(BYTE)(IPADRESS>>24); m_sockServerAddr.sin_addr.S_un.S_un_b.s_b2=(BYTE)(IPADRESS>>16); m_sockServerAddr.sin_addr.S_un.S_un_b.s_b3=(BYTE)(IPADRESS>>8); m_sockServerAddr.sin_addr.S_un.S_un_b.s_b4=(BYTE)(IPADRESS); m_sockServerAddr.sin_port = htons((WORD)Port); m_hServerSocket = socket(AF_INET, SOCK_DGRAM, DEFAULT_PROTOCOL); if(m_hServerSocket == INVALID_SOCKET) { Application->MessageBox("Server socket was not open","Error",IDOK); return NULL; } BindRezult = bind(m_hServerSocket, (LPSOCKADDR)&m_sockServerAddr, sizeof(m_sockServerAddr)); if(BindRezult!=0) { closesocket(m_hServerSocket); Application->MessageBox("Server socket was not binded","Error",IDOK); return NULL; } // MESSAGE based input data treatment: WSAAsyncSelect(m_hServerSocket,this->Handle,WM_READSOCKMESSAGE,FD_READ); return m_hServerSocket; } void __fastcall TForm1::InSockReadMessageHandler(TMessage &Message) { SOCKADDR_IN SourceSock; BYTE buf[2000]; int size; int fromlen = sizeof(SourceSock); size = recvfrom( ServerSocket, (char*)buf, sizeof(buf), 0, (LPSOCKADDR)&SourceSock, &fromlen); // и далее распоряжаемся полученными данными в буфере "buf" }