我是 c++、windows 编程和这些论坛的新手(对于任何违反程序的行为感到抱歉),一段时间后我无法找到答案,所以这里......
我正在编写一个小聊天程序,它目前包括一个等待客户端连接的服务器,当客户端连接时,它会发送消息“您已连接!”。客户端是一个 Win32 应用程序,它自动连接到服务器,接收连接消息,并将其填充到多行文本框中。
我让它工作了,但我不得不使用一些代码将服务器响应转换为 wchar_t,而我这样做的方式对我来说并不合适。有没有更好的方法来设置客户端或服务器,或者我这样做的方式是否正确?
这是相关的服务器代码...
...
//JMP_:sListen and sConnect are both = socket(AF_INET, SOCK_STREAM,NULL);
if(sConnect = accept(sListen, (SOCKADDR*)&addr, &addrlen)){
cout << "A connection was found" << endl;
send(sConnect,"You have connected!", 20, NULL);
}
...
这是我为服务器响应声明 char 数组的一段代码......
...
// includes up here
char serverresponse[255];
// WinMain down here
...
以及从服务器接收消息的代码......
...
//JMP_: this is in the WinMain function.
connect(sConnect, (SOCKADDR*)&addr, sizeof(addr));
recv(sConnect, serverresponse, sizeof(serverresponse), NULL);
getchar();
...
最后一段代码是我将服务器响应放入文本框中的地方......
...
// JMP_: this is in WndProc
case WM_CREATE:
{
// Create an edit box
hwndEdit = CreateWindowEx(0, _T("EDIT"),
NULL,
WS_CHILD|WS_VISIBLE|WS_VSCROLL |
ES_LEFT | ES_MULTILINE|ES_AUTOVSCROLL,
50, 100, 200, 100,
hWnd,
(HMENU) ID_EDITCHILD,
(HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE),NULL);
//JMP_: I just pulled this indented bit from MSDN
// Convert to a wchar_t*
size_t origsize = strlen(serverresponse) + 1;
const size_t newsize = 100;
size_t convertedChars = 0;
wchar_t wcstring[newsize];
mbstowcs_s(&convertedChars, wcstring, origsize, serverresponse, _TRUNCATE);
//
// Add text to the window.
SendMessage(hwndEdit, WM_SETTEXT, 0, (LPARAM) wcstring);
return 0;
}