送信時刻を見ると夜中の 1時に届いていた模様...。
すぐにWILLCOM STOREで予約したのですが、朝の6時過ぎの時点で受付番号は400番台でした。
この400人強の人たちは日が変わった頃からメールを待っていたのでしょうか...。
祭に参加しそこねた(笑
それでも無事に本予約ができたので勉強の続きをしていきます。
先日からC#のサンプルと同じことをしようとして IPアドレスがうまく表示できてなかった件は、 単にANCIコードページからUNICODEに変換できてなかった事が原因でした。
昨日までのコードのホスト名と同じことをするだけで無事表示することができました
void ShowMessage(HWND hWnd) { WSADATA wsaData; LPHOSTENT host; IN_ADDR * ip; CString msg; CString hostname; CString ipAddress; char * bufHostname; char * bufIPAddress; WSAStartup(MAKEWORD(2,2), &wsaData); bufHostname = (char *)hostname.GetBuffer(256); gethostname(bufHostname, 256); host = gethostbyname(bufHostname); WSACleanup(); if (host == NULL) return; bufIPAddress = (char *)ipAddress.GetBuffer(20); ip = (IN_ADDR *)host->h_addr_list[0]; strncpy_s(bufIPAddress, 20, inet_ntoa(*ip), _TRUNCATE); ipAddress.ReleaseBuffer(); Ansi2Unicode(&hostname); Ansi2Unicode(&ipAddress); msg.Format(_T("host=%s,IP=%s"), hostname, ipAddress); MessageBox(hWnd, msg, _T("ホスト名"), MB_OK); } void Ansi2Unicode(CString *text) { int len; _TCHAR *buf; char *ansiText; len = text->GetLength(); buf = text->GetBuffer(len); text->ReleaseBuffer(); ansiText = _strdup((const char *)buf); len = MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, ansiText, -1, NULL, 0); if (len > 0) { MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, ansiText, -1, text->GetBuffer(len), len); text->ReleaseBuffer(); } free(ansiText); }
そういえば C#のサンプルでは IPアドレスがループバックアドレスかどうかも表示しているのですが、 WinSockで同じことを判定する方法はわかりませんでした。
IPv4なら"127.0.0.1"と比較するだけのような気もするのですが、あまりカッコ良くないですしね...。
0 件のコメント:
コメントを投稿