我正在嘗試在 Windows 10 上使用 Code:Blocks 20.03、wxWidgets 3.15 和 mingw64 創建 TCPsocket 應用程式。使用 Formbuilder 3.10.1 作為 GUI 設計器,我已經研究并成功構建了套接字示例。現在我想在我當前嘗試創建的應用程式中創建一個 TCPsocket 服務器。這是我第一次嘗試使用套接字,也是我第一次嘗試創建自定義事件。Server 類是 SocketTCPserver 的子類,由 wxFormBuilder 在主 GUI 頭檔案和源檔案中生成。
因為我使用 Formbuilder 創建我的 GUI,所以我不能使用事件表。因此,我搜索了一種解決方案,并發現下面的解決方案產生的錯誤最少。我不確定是什么導致了警告:“EVT_SOCKET”重新定義,并且錯誤:“EVT_SOCKET”未在此范圍內宣告。
我希望有人可以幫助我理解和建議如何在我的情況下創建自定義事件。
下面是我使用的代碼:
#include "Server.h"
enum
{
// id for sockets
SERVER_ID = 100,
SOCKET_ID
};
#define EVT_SOCKET(SOCKET_ID, OnSocketEvent) \
wxDECLARE_EVENT(EVT_SOCKET, wxSocketEvent);
Server::Server( wxWindow* parent ) : SocketTCPserver( parent )
{
Bind(EVT_SOCKET, &Server::OnSocketEvent, this);
}
我收到了以下來自建筑的訊息:
||=== Build: Debug in ClientServer (compiler: GNU GCC Compiler) ===|
F:\Data\__C \wxApps\Socket\Client Server\Server.cpp|22|warning: "EVT_SOCKET" redefined|
F:\SDKs\wx315\include\wx\socket.h|439|note: this is the location of the previous definition|
F:\Data\__C \wxApps\Socket\Client Server\Server.cpp||In constructor 'Server::Server(wxWindow*)':|
F:\Data\__C \wxApps\Socket\Client Server\Server.cpp|28|error: 'EVT_SOCKET' was not declared in this scope|
||=== Build failed: 1 error(s), 1 warning(s) (0 minute(s), 2 second(s)) ===|
uj5u.com熱心網友回復:
您不應該重新EVT_SOCKET定義 wxWidgets 已經定義的內容。此外,您要處理的事件型別,因此應該與Bind(), 一起使用wxEVT_SOCKET。
最后,我建議對任何重要的網路代碼使用專用庫,而不是完全使用wxSocket。
uj5u.com熱心網友回復:
經過谷歌的多次搜索,我得到了它的作業。
我洗掉了:
#define EVT_SOCKET(SOCKET_ID, OnSocketEvent) \
wxDECLARE_EVENT(EVT_SOCKET, wxSocketEvent);
我沒有使用事件表,而是嘗試了 Bind() 無濟于事。然后我為 Connect() 找到了一個非常好的解釋。
以下2個命令作業:
Connect(SERVER_ID, wxEVT_SOCKET, wxSocketEventHandler(Server::OnServerEvent));
Connect(SOCKET_ID, wxEVT_SOCKET, wxSocketEventHandler(Server::OnSocketEvent));
我現在有一個作業服務器。客戶端現在應該沒有問題了。
我喜歡學習:-)
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/409891.html
標籤:
上一篇:IPv6套接字上的recvfrom()是否總是在“from”引數中回傳IPv6地址?
下一篇:為什么查詢引數沒有到達介面?
