【问题标题】:wxSocket wxWidgets failingwxSocket wxWidgets 失败
【发布时间】:2011-06-21 22:48:31
【问题描述】:

谁能提供一个如何使用 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;`

每次我调用 write 时都会失败

还有一种简单的方法可以让 wxString 与 wxSocket 一起工作,或者在我弄清楚这里发生了什么之后应该很容易?

现在使用 winsock 来做所有这些事情要容易得多,这不是我拥有 wxWidgets 的原因,我让它让生活更轻松。

【问题讨论】:

  • 您没有提供任何可以让我们帮助您解决问题的信息。把代码贴出来怎么样?
  • 好吧,我添加了代码

标签: c++ wxwidgets


【解决方案1】:

谁能提供一个简单的例子来说明如何使用 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;
}

【讨论】:

    【解决方案2】:

    我认为你不应该使用 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

    【讨论】:

    • 那么请编辑您的问题以正确描述您在做什么并发布您的代码,以便我们为您提供帮助。您要求提供一个简单的用法示例,我提供了它。
    【解决方案3】:

    我认为你可能误用了 wxString::mb_str()。

    文档给了我们这个:

    wxString::mb_str const char* mb_str(wxMBConv& conv) 常量

    const wxCharBuffer mb_str(wxMBConv& 转换)常量

    返回多字节(C 字符串) 字符串的表示。在 Unicode 构建,使用 conv 进行转换 cWC2MB 方法和返回 wxCharBuffer。在 ANSI 构建中,这 功能与 c_str 相同。宏 wxWX2MBbuf 被定义为正确的 返回类型(不带 const)。

    这向我建议你应该写类似的东西

    wxMBConv conv;
    sockConn->Write(test.mb_str(conv), wxStrlen(test));
    

    【讨论】:

      【解决方案4】:
      std::string test("testing");
      sockConn->Write(test.c_str(), test.length);
      

      使用 std::string 代替 wxString 更简单。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-12-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多