我是新来的c + +,Windows编程和这些论坛(对任何违反程序抱歉),并在一段时间后,我一直无法追查这个答案,所以这里去...正在将我的服务器响应字符数组转换为wchar_t数组处理我的客户端收到的服务器消息的正确方法?
我是编写一个小聊天程序,该程序目前包含一个服务器,它等待客户端连接,当客户端连接时发送消息“您已连接!”。客户端是一个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);
}
...
这里是哪里,我宣布了服务器响应的字符数组的代码位...
...
// 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;
}
有什么特别你coincerned什么? –
我只关心或困惑为什么我必须将其转换。我不明白为什么没有一个接收char数组的SendMessage。有 –
有。 SendMessage是一个扩展到SendMessageA或SendMessageW的宏,因此假设你只有有效的ASCII文本(而不是UTF-8),可以使用SendMessgeA()。 –