小伙伴们怎么了,希望你们没事!好吧,问题是我正在做一个聊天客户端/服务器应用程序,但是对服务器进行了一些测试,我发现我在发送消息时遇到了问题。我正在使用结构、套接字和 DWORD WINAPI 线程......所以结构中的代码是:
DWORD WINAPI threadSendMessages(LPVOID vpParam); //THREAD
typedef struct messagesServerChat{ //STRUCT
const char *messageServEnv;
}MESSAGE, *SMESSAGES;
然后在 main 方法中,我调用结构来使用 const char messageServEnv,一个 HeapAlloc 为要发送消息的线程提供一些内存,以及一个用于存储消息的 char 变量
char mServer[1024] = ""; //variable to pre-store the message
SMESSAGES messages; //call the struct
messages = (SMESSAGES) HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(MESSAGE));
在 main 方法中,我要求用户插入他想要发送的消息,然后我使用结构来存储消息并将其作为参数发送到线程:
cout<<"Dear user, please insert your message: ";
setbuf(stdin, NULL);
fgets(mServer, 1024, stdin);
messages->messageServEnv = mServer;
DWORD hSend; //send the parameters to the thread function
HANDLE sendThread = CreateThread(0, 0, threadSendMessages, mServer, 0, &hSend);
最后是线程代码函数
DWORD WINAPI threadSendMessages(LPVOID lpParam){
SMESSAGES messages;
messages = (SMESSAGES)lpParam;
int mesa;
mesa = send(sConnect, (char *)messages->messageServEnv, sizeof messages->messageServEnv, 0);
//sConnect is the socket
//messages = to use the struct, and messageServEnv is the struct data that should contain the message
return 0;
}
--Edit-- 我使用 Remy 的解决方案解决了很多问题,但也许我遗漏了一些东西……在 Thread threadSendMessages(SMESSAGES lpMessage)
char *ptr = messages->messageServEnv;
int len = strlen(messages->messageServEnv);
我得到一个错误,说消息是未定义的,然后,我改为:
SMESSAGES messages;
char *ptr = messages->messageServEnv;
int len = strlen(messages->messageServEnv);
现在我可以使用消息和结构值messageServEnv但是如果我开始调试 Visual Studio 并尝试发送消息,我会收到一个错误,提示消息在未初始化的情况下被使用,然后我将该部分更改为
SMESSAGES messages = new MESSAGE;
现在我可以向客户端发送消息,但只能发送字符和垃圾代码