wxSocket wxWidgets失败

| 有人可以提供一个简单的示例来说明如何使用wxSockets写的方法,因为每次我尝试使用wxSockets来写连接时,我都会发现该程序出现的Windows窗口停止工作了,我唯一要做的就是使用wxSocketBase :: Write。还是有人知道为什么它失败了? 我什至尝试对应该用以下内容编写的缓冲区进行硬编码:
wxSocketClient * sockConn = new wxSocketClient();

wxString url = \"localhost\";
wxIPV4address addr;
addr.Hostname(url);
addr.Service(6667);


sockConn->Connect(addr);


wxString test = wxT(\"testing\");
    sockConn->Write(test.mb_str(), wxStrlen(test));



sockConn->Close();
delete sockConn;`
而且每次我打电话给写它都会失败 还有一种让wxString与wxSocket一起使用的简单方法,还是在弄清楚这里发生了什么之后是否应该很容易? 现在,仅使用winsock来完成所有这些工作就容易了很多,这不是我拥有wxWidgets的原因,它使生活变得更加轻松。     
已邀请:
           有人可以提供一个简单的示例来说明如何使用wxSockets写吗? 我可以:
#include <wx/wx.h>
#include <wx/socket.h>
#include <iostream>

int main () {
  wxInitialize();
  wxSocketClient * sockConn = new wxSocketClient(wxSOCKET_WAITALL);
  wxString url = wxT(\"localhost\");
  wxIPV4address addr;
  addr.Hostname(url);
  addr.Service(6667);
  if(!sockConn->Connect(addr, true)) {
    std::cout << \"Connect failed\\n\";
    return 1;
  }
  wxString test = wxT(\"testing\\n\");
  sockConn->Write(test.mb_str(), wxStrlen(test));
  sockConn->Close();
  delete sockConn;
  wxUninitialize();
  return 0;
}
    
        我不认为您应该使用wxSocketBase。您应该使用wxSocketClient  或wxSocketServer。这是wxSocketClient的简单示例
// connect to a server on the same machine, listening on port 3000
wxSocketClient mySocket;
wxIPV4address addr;
addr.Hostname(L\"localhost\");
addr.Service(3000);
mySocket.Connect(addr,true) );   // should check return for success

// write something
char sentence[100];
sprintf(sentence,\"$SDDBT,%5.1f,0,0,,0*00\\x13\\n\",depth/10.0);
mySocket.Write(sentence,strlen(sentence));
查看您发布的代码,我将调查几件事。 首先,您应该检查Connect()的返回值以确保您确实获得了连接。 其次,您使用的是unicode还是多字节构建? Tt在我看来可能是unicode     
        我认为您可能会滥用wxString :: mb_str()。 该文档给我们这个:   wxString :: mb_str const char *   mb_str(wxMBConv&conv)const      const wxCharBuffer mb_str(wxMBConv&   转换)const      返回多字节(C字符串)   字符串的表示形式。在   Unicode构建,使用conv \进行转换   cWC2MB方法和返回   wxCharBuffer。在ANSI版本中,   功能与c_str相同。宏   wxWX2MBbuf被定义为正确的   返回类型(不带const)。 这向我建议你应该写类似
wxMBConv conv;
sockConn->Write(test.mb_str(conv), wxStrlen(test));
    
        
std::string test(\"testing\");
sockConn->Write(test.c_str(), test.length);
使用std :: string代替wxString更简单。     

要回复问题请先登录注册