как отправить и получить конкретные символы Winsock

я имею 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;
}

1

Решение

Среди других ошибок, упомянутых в комментариях, ваше использование recv проблема, ожидающая, чтобы случиться. recv функция читает вплоть до количество байтов, которое вы указываете, а не точно это число. Если вы получите меньше байтов, вам нужно позвонить recv снова.

Также, никогда выбросить возвращаемое значение из recv, Это единственный способ узнать, сколько байтов данных вы на самом деле получили.

Уровень TCP не имеет представления о том, что вы рассматриваете 256 байтов сообщения уровня приложения. Это не склеивает эти байты вместе. Только ваш код знает об этом, поэтому ваш код отвечает за сбор сообщений, когда они получены.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]