gpt4 book ai didi

c++ - 如何发送和接收特定字符 winsock

转载 作者:行者123 更新时间:2023-11-30 04:22:15 25 4
gpt4 key购买 nike

我有 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;
}

最佳答案

在评论中提到的其他错误中,您对 recv 的使用是一个等待发生的问题。 recv 函数读取最多 您指定的字节数,而不是准确的数字。如果获得的字节数较少,则需要再次调用 recv

此外,永远不要丢弃recv 的返回值。这是了解您实际获得了多少字节数据的唯一方法。

TCP 层不知道您将 256 字节视为应用层消息。它不会将这些字节粘合在一起。只有您的代码知道这一点,因此您的代码有责任在收到消息时将它们放回原处。

关于c++ - 如何发送和接收特定字符 winsock,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13942386/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com