{"id":974,"date":"2019-06-02T22:31:15","date_gmt":"2019-06-02T13:31:15","guid":{"rendered":"https:\/\/www.oji-koji.com\/?p=974"},"modified":"2019-06-14T17:32:54","modified_gmt":"2019-06-14T08:32:54","slug":"windows%e7%89%88server%e3%80%81client%e3%82%92utf-8%e5%af%be%e5%bf%9c%e3%81%ab","status":"publish","type":"post","link":"https:\/\/www.oji-koji.com\/?p=974","title":{"rendered":"Windows\u7248Server\u3001Client\u3092UTF-8\u5bfe\u5fdc\u306b(2019\/06\/14\u66f4\u65b0)"},"content":{"rendered":"\n<p class=\"program_discription\">SimpleServer\uff08Windows\uff09, SimpleClient\uff08Linux\uff09\u9593\u3001 <br>SimpleServer\uff08Linux\uff09, SimpleClient\uff08Windows\uff09\u9593<br>\u3067\u6f22\u5b57\u3082\u6b63\u3057\u304f\u901a\u4fe1\u3067\u304d\u308b\u3088\u3046\u306b\u3057\u307e\u3057\u3087\u3046\u3002<br>Windows\u7248\u306fShift-JIS\u3001Linux\u7248\u306fUTF-8\u306b\u306a\u3063\u3066\u3044\u308b\u306e\u3067\u3001\u4eca\u306e\u307e\u307e\u3067\u306f<br>\u6f22\u5b57\u3067\u30e1\u30c3\u30bb\u30fc\u30b8\u4ea4\u63db\u304c\u3067\u304d\u307e\u305b\u3093\u3002<\/p>\n\n\n\n<p class=\"program_discription\">\u3053\u3053\u3067\u306f\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u9593\u306e\u30d7\u30ed\u30c8\u30b3\u30eb\u3068\u3057\u3066\u6587\u5b57\u5217\u306fUTF-8\u3092\u4f7f\u3046\u3053\u3068\u306b\u3057\u307e\u3059\u3002<br>\u3064\u307e\u308a\u3001Windows\u7248SimpleClient, SimpleServer\u306b<br>  \u9001\u4fe1\u6642\uff1aUTF-8\u306b\u5909\u63db\u3059\u308b<br>  \u53d7\u4fe1\u6642\uff1aShift-JIS\u306b\u5909\u63db\u3059\u308b<br>\u6a5f\u80fd\u3092\u8ffd\u52a0\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<p class=\"program_discription\"><a href=\"https:\/\/www.oji-koji.com\/pro-files\/CommonWin.zip\">stdThread.cpp\u3001stdThread.h<\/a>\u306bUTF-8&lt;=&gt;Shift-JIS\u306e\u5909\u63db\u95a2\u6570\u3092\u8ffd\u52a0\u3057\u307e\u3057\u305f\u3002<br>\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u306e\u672c\u8cea\u3068\u306f\u5c11\u3057\u96e2\u308c\u3066\u3044\u308b\u306e\u3067\u3001\u8a73\u3057\u304f\u89e3\u8aac\u306f\u3057\u307e\u305b\u3093\u304c<br>\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u306e\u30b3\u30e1\u30f3\u30c8\u3068\u4f7f\u3044\u65b9\u3092\u898b\u3066\u3044\u305f\u3060\u3051\u308c\u3070\u3001\u3054\u7406\u89e3\u3044\u305f\u3060\u3051\u308b\u3068\u601d\u3044\u307e\u3059\u3002<br>\u305d\u308c\u3067\u306f\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u30d5\u30a1\u30a4\u30eb\u3092\u66f4\u65b0\u3057\u3066\u3001SimpleServer.cpp\u3001SimpleClient.cpp\u3082<br>\u5909\u66f4\u3057\u307e\u3057\u3087\u3046\u3002<\/p>\n\n\n\n<p class=\"source_code\">\u3010SimpleServer.cpp\u3011\n\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\n\/\/ function\n\/\/    \u53d7\u4fe1\u51e6\u7406\n\/\/ parameter\n\/\/    \u306a\u3057\n\/\/ return\n\/\/    TRUE\/FALSE\n\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\nBOOL DoRecv()\n{\n    BOOL        fRet = TRUE;\n    char        szRecvBuffer[RCVBUFSIZE + 1];    \/\/ \u53d7\u4fe1\u30d0\u30c3\u30d5\u30a1\n    int         iSize;\n    fd_se       rfds;\n    struct timeval     tv;\n\n    fprintf(stderr, &#8220;DoRecv()\\n&#8221;);\n    while (1)\n    {\n        tv.tv_sec = 0;\n        tv.tv_usec = 10 * 1000;                        \/\/ 10msec\n        FD_ZERO(&amp;rfds);\n        FD_SET(m_fdClient, &amp;rfds);\n        select(FD_SETSIZE, &amp;rfds, NULL, NULL, &amp;tv);    \/\/ \u30bf\u30a4\u30e0\u30a2\u30a6\u30c8\u307e\u3067Sleep\u3068\u540c\u7b49\n        \/\/ \u30ad\u30fc\u5165\u529b\u3067\u4e2d\u65ad\n        if (CheckKey())\n        {\n            fprintf(stderr, &#8221;  OK:Abort by key\\n&#8221;);\n            break;\n        }\n        if (FD_ISSET(m_fdClient, &amp;rfds))\n        {\n            memset(szRecvBuffer, 0, sizeof(szRecvBuffer));\n            if ((iSize = recv(m_fdClient, szRecvBuffer, RCVBUFSIZE, 0)) &lt;= 0)\n            {\n                if (iSize == 0)                        \/\/ 0\u30d0\u30a4\u30c8\u306e\u53d7\u4fe1\u306f\u5207\u65ad\u691c\u77e5 \u3000-1\u306f\u30a8\u30e9\u30fc\n                    fprintf(stderr, &#8220;Disconnected %d\\n&#8221;, WSAGetLastError());\n                else\n                    fprintf(stderr, &#8220;Err:recv %d\\n&#8221;, WSAGetLastError());\n                fRet = FALSE;\n                break;\n            }\n            else\n            {\n#if 0\n                fprintf(stderr, &#8220;%s\\n&#8221;, szRecvBuffer);\n#else\n                \/\/ UTF-8\u3067\u53d7\u4fe1\u3057\u305f\u306e\u3067\u3001SJIS\u306b\u5909\u63db\u3057\u3066\u8868\u793a\u3059\u308b\n                int        iSize = 0;\n                LPBYTE    pbDest = NULL;\n                ConvUtf8toSJis((LPBYTE)szRecvBuffer, NULL, &amp;iSize);\n                pbDest = (LPBYTE)calloc(iSize, sizeof(BYTE));\n                ConvUtf8toSJis((LPBYTE)szRecvBuffer, pbDest, &amp;iSize);\n                fprintf(stderr, &#8220;%s\\n&#8221;, pbDest);\n                SAFE_FREE(pbDest)\n#endif\n            }\n        }\n    }\n    return(fRet);\n}<\/p>\n\n\n\n<p><\/p>\n\n\n\n<p class=\"source_code\">\u3010SimpleClient.cpp\u3011\nint main(int argc, char *argv[])\n{\n    char    szKeyInBuff[81];\n#if 0\n#else\n    int        iSize;\n    LPBYTE    pbDest = NULL;\n#endif\n\n    m_fdClient = INVALID_SOCKET;\n    \/\/ \u8d77\u52d5\u30d1\u30e9\u30e1\u30fc\u30bf\u30c1\u30a7\u30c3\u30af\n    if (argc != 3)\n    {\n        fprintf(stderr, &#8220;Usage:  %s &lt;ServerAddress&gt; &lt;ServerPort&gt;\\n&#8221;, argv[0]);\n        goto L_END;\n    }\n    \/\/ \u30bd\u30b1\u30c3\u30c8\u30e9\u30a4\u30d6\u30e9\u30ea\u306e\u521d\u671f\u5316\n    if (InitSocketLib() == FALSE)\n        goto L_END;\n    \/\/ \u30bd\u30b1\u30c3\u30c8\u306e\u4f5c\u6210\u3068\u63a5\u7d9a\u51e6\u7406\n    \/\/ m_fdClient\u304c\u63a5\u7d9a\u6e08\u307f\u72b6\u614b\u306b\u306a\u308b\n    if (CreateAndConnectSocket(argv[1], (WORD)atol(argv[2])) == FALSE)\n        goto L_END;\n    \/\/ \u30e1\u30cb\u30e5\u30fc\u306e\u8868\u793a\n    DispMenu();\n    while (1)\n    {\n        \/\/ \u30ad\u30fc\u30dc\u30fc\u30c9\u304b\u3089\u5165\u529b\u3055\u308c\u305f\u6587\u5b57\u5217\u304c&#8217;q&#8217;\u306a\u3089\u7d42\u4e86\n        \/\/ &#8216;m&#8217;\u306a\u3089\u30e1\u30c3\u30bb\u30fc\u30b8\u3092\u5165\u529b\u5f8c\u306f\u9001\u4fe1\u3059\u308b        \n        switch (GetKeyString(szKeyInBuff, sizeof(szKeyInBuff)))\n        {\n            case 0:                            \/\/ \u5165\u529b\u306a\u3057\u3001\u4f55\u3082\u3057\u306a\u3044\n                break;\n            case CMD_QUIT_CHAR:                \/\/ &#8216;q&#8217;\u5165\u529b\u7d42\u4e86\n                goto L_END;\n            case CMD_SEND_MSG_CHAR:            \/\/ &#8216;m&#8217;\u5165\u529bszKeyInBuff\u306b\u6587\u5b57\u5217\u304c\u683c\u7d0d\u3055\u308c\u3066\u3044\u308b\n#if 0\n                DoSend(szKeyInBuff, strlen(szKeyInBuff));\n#else\n                \/\/ S-JIS\u3092UTF-8\u306b\u5909\u63db\u3057\u3066\u9001\u4fe1\n                iSize = 0;\n                pbDest = NULL;\n                ConvSJistoUtf8((LPBYTE)szKeyInBuff, NULL, &amp;iSize);\n                pbDest = (LPBYTE)calloc(iSize, sizeof(BYTE));\n                ConvSJistoUtf8((LPBYTE)szKeyInBuff, pbDest, &amp;iSize);\n                DoSend((char *)pbDest, iSize);\n                SAFE_FREE(pbDest)\n#endif\n                \/\/ \u30e1\u30cb\u30e5\u30fc\u306e\u8868\u793a\n                DispMenu();\n                break;\n        }\n    }\n\nL_END:\n    \/\/ \u5207\u65ad\u3068\u3059\u3079\u3066\u306e\u30bd\u30b1\u30c3\u30c8\u306e\u7834\u68c4\n    Stop();\n    \/\/ \u30bd\u30b1\u30c3\u30c8\u30e9\u30a4\u30d6\u30e9\u30ea\u306e\u958b\u653e\n    UninitSocketLib();\n    return(0);\n}<\/p>\n\n\n\n<p><a href=\"https:\/\/www.oji-koji.com\/pro-files\/SimpleClientWinUTF8.zip\">\u30d7\u30ed\u30b8\u30a7\u30af\u30c8SimpleClient for Win UTF-8\u5bfe\u5fdc(zip)<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/www.oji-koji.com\/pro-files\/SimpleServerWinUTF8.zip\">\u30d7\u30ed\u30b8\u30a7\u30af\u30c8SimpleServer for Win UTF-8\u5bfe\u5fdc(zip)<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>SimpleServer\uff08Windows\uff09, SimpleClient\uff08Linux\uff09\u9593\u3001 SimpleServer\uff08Linux\uff09, SimpleClient\uff08Windows\uff09\u9593\u3067\u6f22\u5b57\u3082\u6b63\u3057\u304f\u901a\u4fe1\u3067\u304d\u308b\u3088\u3046\u306b\u3057\u307e\u3057\u3087\u3046\u3002W [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":129,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_locale":"","_original_post":"","footnotes":""},"categories":[6],"tags":[],"class_list":["post-974","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-networkprograming","ja"],"_links":{"self":[{"href":"https:\/\/www.oji-koji.com\/index.php?rest_route=\/wp\/v2\/posts\/974","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.oji-koji.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.oji-koji.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.oji-koji.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.oji-koji.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=974"}],"version-history":[{"count":9,"href":"https:\/\/www.oji-koji.com\/index.php?rest_route=\/wp\/v2\/posts\/974\/revisions"}],"predecessor-version":[{"id":1083,"href":"https:\/\/www.oji-koji.com\/index.php?rest_route=\/wp\/v2\/posts\/974\/revisions\/1083"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.oji-koji.com\/index.php?rest_route=\/wp\/v2\/media\/129"}],"wp:attachment":[{"href":"https:\/\/www.oji-koji.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=974"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.oji-koji.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=974"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.oji-koji.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=974"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}