C++ wxSocket wxWidgets失败

C++ wxSocket wxWidgets失败,c++,wxwidgets,C++,Wxwidgets,有人能提供一个简单的例子来说明如何使用wxSockets write吗?因为每次我尝试使用它来写入连接时,我都会发现windows提供的这个程序已经停止工作了,我正在做的唯一一件事就是使用wxSocketBase::write。或者有人知道它失败的原因吗 我甚至尝试对缓冲区进行硬编码,该缓冲区应使用以下内容编写: wxSocketClient * sockConn = new wxSocketClient(); wxString url = "localhost"; wxIPV4address

有人能提供一个简单的例子来说明如何使用wxSockets write吗?因为每次我尝试使用它来写入连接时,我都会发现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的原因,我使用它是为了让生活更轻松。

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

常量wxCharBuffer mb_str(wxMBConv& conv)const

返回多字节(C字符串) 字符串的表示形式。在里面 Unicode构建,使用conv的 cWC2MB方法和返回 wxCharBuffer。在ANSI构建中,这个 函数与c_str相同。宏 wxWX2MBbuf被定义为正确的 返回类型(不带常量)

这对我来说意味着你应该写一些

wxMBConv conv;
sockConn->Write(test.mb_str(conv), wxStrlen(test));
使用std::string而不是wxString更简单

有人能提供一个简单的例子说明如何使用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;
}
#包括
#包括
#包括
int main(){
wxInitialize();
wxSocketClient*sockConn=新的wxSocketClient(wxSOCKET_WAITALL);
wxstringurl=wxT(“localhost”);
WXIPV4地址地址地址;
地址主机名(url);
地址服务(6667);
如果(!sockConn->Connect(addr,true)){
std::cout Write(test.mb_str(),wxStrlen(test));
sockConn->Close();
删除sockConn;
wxUninitialize();
返回0;
}

您没有提供任何信息让我们帮助您解决问题。发布代码如何?好的,我添加了代码,然后请编辑您的问题以正确描述您正在做什么,然后发布代码,以便我们可以帮助您。您询问了一个简单的用法示例,我提供了它。
#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;
}