我试图做以下事情并遇到问题。这是使用Visual Studio 2015的C ++ / CLI形式。我使用TCP在服务器和客户端之间进行通信,并尝试使用BinaryFormatter作为通信方法。
private: System::Void ServerForm1_MouseMove(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e) {
//some code that does stuff
bf->Serialize(socketStream, myobj);
BinaryFormatter在整个主窗体的private:部分中声明。 socketStream在同一位置声明,但在RunServer方法
之前未分配值void RunServer() {
TcpListener ^listener = gcnew TcpListener(IPAddress::Any, 12345);
listener->Start();
connection = listener->AcceptSocket();
socketStream = gcnew NetworkStream(connection);
在构造表单时调用
ServerForm1(void)
{
InitializeComponent();
readThread = gcnew Thread(gcnew ThreadStart(this, &ServerForm1::RunServer));
readThread->Start();
}
每当我尝试使用bf-> Seralize执行第一个代码示例时,就会发生错误。该函数中socketStream的值显示为null。我还尝试在RunServer()中声明二进制写入器,然后使用binarywriter的BaseStream属性。 BinaryWriter也在RunServer()之外显示为null。
如何在RunServer()之外访问实例版本的socketStream或BinaryWriter,以便我的BinaryFormatter有正确的序列化流?