【发布时间】:2012-12-06 05:09:36
【问题描述】:
我有char* MESSAGE = new char[256]; 和char* DISCONNECT = new char[256]; 但是当我使用winsock 从客户端发送它们并在服务器中接收它们时(服务器具有相同的字符名称)由于某种原因char* MESSAGE 拦截char* DISCONNECT 任何帮助为什么这会很棒!
城市:
private: System::Void Form1_FormClosing(System::Object^ sender, System::Windows::Forms::FormClosingEventArgs^ e) {
char* Disconnect = new char[256];
ZeroMemory(Disconnect, sizeof(Disconnect));
Disconnect = "DC";
send(sConnect, "DC", 256, NULL);
}
private: System::Void txtMessage_KeyDown(System::Object^ sender, System::Windows::Forms::KeyEventArgs^ e) {
if(e->KeyCode == Keys::Enter && txtMessage->Text != "")
{
char* MESSAGE = new char[sizeof(txtMessage->Text->Length)];
ZeroMemory(MESSAGE, sizeof(MESSAGE));
string strMESSAGE = "";
MarshalString(txtMessage->Text, strMESSAGE);
send(sConnect, strMESSAGE.c_str(), strMESSAGE.length(), NULL);
txtMessage->Clear();
}
}
服务器:
int RecieveThread()
{
ZeroMemory(MESSAGE, sizeof(MESSAGE));
for (;; Sleep(50))
{
if(recv(sConnect, MESSAGE, 256, NULL) != SOCKET_ERROR)
{
printf("<%s:> %s\n", NAME, MESSAGE);
}
}
return 0;
}
int DisconnectThread()
{
ZeroMemory(Disconnect, sizeof(Disconnect));
for(;; Sleep(50))
{
if(recv(sConnect, Disconnect, 256, NULL) != SOCKET_ERROR)
{
if (Disconnect == "DC")
{
printf("has disconnected.");
}
}
}
return 0;
}
【问题讨论】:
-
sizeof(Disconnect)肯定不是 256。 -
在你的客户中
strMESSAGE不应该是MESSAGE吗? -
@chris 如果我可以选择评论作为答案,我不敢相信我犯了这样的菜鸟错误,甚至没有注意到。哈哈谢谢。如果我比较
if (Disconnect == "DC")显然 Disconnect 不等于“DC”,那么在收到 Disconnect 之后还有什么原因吗? -
@IanLundberg,真的,解决了吗?无论如何,你在那里比较两个指针,而不是字符串。我强烈建议使用
std::vector<char>来代替你的角色,或者使用std::string进行比较,或者使用std::equal。如果您仍然需要数组,请使用strncmp。 -
我以前没有看到这个,但你也不能分配指针来复制它。您应该为此使用
strncpy。通过这个,我说的是Disconnect = "DC";。如果您从不需要传递可修改的字符,您可以跳过向量并直接使用std::string。