я имею char* MESSAGE = new char[256];
а также char* DISCONNECT = new char[256];
однако, когда я использую winsock, чтобы отправить их от клиента и получить их на сервере (сервер имеет те же имена символов) по какой-то причине char* MESSAGE
перехватывает char* DISCONNECT
любая помощь в том, почему это было бы здорово!
Cient:
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;
}
Среди других ошибок, упомянутых в комментариях, ваше использование recv
проблема, ожидающая, чтобы случиться. recv
функция читает вплоть до количество байтов, которое вы указываете, а не точно это число. Если вы получите меньше байтов, вам нужно позвонить recv
снова.
Также, никогда выбросить возвращаемое значение из recv
, Это единственный способ узнать, сколько байтов данных вы на самом деле получили.
Уровень TCP не имеет представления о том, что вы рассматриваете 256 байтов сообщения уровня приложения. Это не склеивает эти байты вместе. Только ваш код знает об этом, поэтому ваш код отвечает за сбор сообщений, когда они получены.
Других решений пока нет …