Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ wxWidgets从套接字读取_C++_Sockets_Wxwidgets - Fatal编程技术网

C++ wxWidgets从套接字读取

C++ wxWidgets从套接字读取,c++,sockets,wxwidgets,C++,Sockets,Wxwidgets,我在将从wxWidgets中的套接字读取的内容转换为wxString时遇到问题。我是这样做的: wxChar * readBuffer = new wxChar[256]; wxSocketClient * connection = new wxSocketClient(); connection->Connect(addr, true); connection->Read(readBuffer, 256); wxString wasRead(readBuffer); std::co

我在将从wxWidgets中的套接字读取的内容转换为wxString时遇到问题。我是这样做的:

wxChar * readBuffer = new wxChar[256];
wxSocketClient * connection = new wxSocketClient();
connection->Connect(addr, true);
connection->Read(readBuffer, 256);
wxString wasRead(readBuffer);
std::cout << wasRead.mb_string() << std::endl;
wxChar*readBuffer=newwxchar[256];
wxSocketClient*连接=新的wxSocketClient();
连接->连接(addr,true);
连接->读取(读取缓冲区,256);
wxString wasRead(readBuffer);

std::cout如果挂断表示崩溃,则可能是传输字符串末尾缺少一个
\0
。据我所知,
wxString(wxChar*)
将采用以null结尾的字符串。

您的readBuffer可能不会以null结尾。事实上,它可能只包含部分消息

最简单的“修复”是确保它以null结尾

可以使用LastCount()确定实际读取的字节数

然而,真正的解决方法是在服务器和客户端之间建立一个简单的协议,这样您就可以确定何时接收到整个消息,然后再打印出来

connection->Read(readBuffer, 255);       // leave room for null terminator
readBuffer[connection->LastCount()/2] = L'\0';      // ensure null terminated

我假设您使用的是unicode构建。删除/2,如果你没有

它没有崩溃,只是没有完成执行,我必须用ctrl-c键杀死它。实际上,它在打印而不是转换为wxString时失败。在这种情况下,如果您发布服务器端,可能会有所帮助。丢失的
\0
可能会产生很长的字符串,但我不确定它在打印时是否会挂起。