У меня есть 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. - person chris   schedule 19.12.2012strMESSAGE
в вашем клиенте не должно бытьMESSAGE
? - person Cyclonecode   schedule 19.12.2012if (Disconnect == "DC")
, что, по-видимому, Disconnect не равно DC? - person Ian Lundberg   schedule 19.12.2012std::vector<char>
для хранения ваших персонажей и либо сделать из негоstd::string
для сравнения, либо использоватьstd::equal
. Если вам все еще нужны массивы, используйтеstrncmp
. - person chris   schedule 19.12.2012strncpy
для этого. Под этим я говорю оDisconnect = "DC";
. Если вам никогда не нужно передавать изменяемые символы, вы можете пропустить вектор и также использоватьstd::string
с места в карьер. - person chris   schedule 19.12.2012Disconnect
. Это не копирует символы; он просто присваивает указатель, а это значит, что у вас определенно будет утечка памяти. Используя массивы,strncmp
будет сравнивать строки. - person chris   schedule 19.12.2012recv
, вероятно, не возвращаетSOCKET_ERROR
по какой-то причине. - person chris   schedule 19.12.2012