私は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;
}