{"id":1627,"date":"2019-10-26T14:17:39","date_gmt":"2019-10-26T05:17:39","guid":{"rendered":"https:\/\/www.oji-koji.com\/?p=1627"},"modified":"2021-07-28T11:31:51","modified_gmt":"2021-07-28T02:31:51","slug":"%e3%83%95%e3%82%a1%e3%82%a4%e3%83%ab%e9%80%81%e5%8f%97%e4%bf%a1%e6%a9%9f%e8%83%bd%e3%81%ae%e5%ae%9f%e8%a3%85%e3%83%a1%e3%83%83%e3%82%bb%e3%83%bc%e3%82%b8%e3%83%87%e3%83%bc%e3%82%bf%e3%81%ae%e3%83%91","status":"publish","type":"post","link":"https:\/\/www.oji-koji.com\/?p=1627","title":{"rendered":"\u30d5\u30a1\u30a4\u30eb\u9001\u53d7\u4fe1\u6a5f\u80fd\u306e\u5b9f\u88c5(\u30e1\u30c3\u30bb\u30fc\u30b8\u30c7\u30fc\u30bf\u306e\u30d1\u30b1\u30c3\u30c8\u5316\u305d\u306e\uff11)"},"content":{"rendered":"\n<p class=\"program_discription\">\u524d\u534a\u306b\u4f5c\u6210\u3057\u305fSimpleClientMEcho(<a href=\"https:\/\/www.oji-koji.com\/pro-files\/SimpleClientMEcho2Win.zip\">Windows\u7248<\/a>\u3001<a href=\"https:\/\/www.oji-koji.com\/pro-files\/SimpleClientPollMEcho2Linux.zip\">Linux\u7248<\/a>)\u3068SimpleServerMChat<br>(<a href=\"https:\/\/www.oji-koji.com\/pro-files\/SimpleServerMChatWin.zip\">Windows\u7248<\/a>, <a href=\"https:\/\/www.oji-koji.com\/pro-files\/SimpleServerPollMChatLinux.zip\">Linux\u7248<\/a>)\u9593\u306b\u30d5\u30a1\u30a4\u30eb\u9001\u53d7\u4fe1\u6a5f\u80fd\u3092\u8ffd\u52a0\u3059\u308b\u3053\u3068\u306b\u3057\u307e\u3057\u3087\u3046\u3002<\/p>\n\n\n\n<p class=\"program_discription\">\u9001\u53d7\u4fe1\u3055\u308c\u308b\u30c7\u30fc\u30bf\u304c\u4f55\u3092\u610f\u5473\u3059\u308b\u304b(\u30c1\u30e3\u30c3\u30c8\u306a\u306e\u304b\u3001\u30d5\u30a1\u30a4\u30eb\u9001\u4fe1\u306a\u306e\u304b\u3001<br>\u30d5\u30a1\u30a4\u30eb\u53d7\u4fe1\u306a\u306e\u304b)\u3001\u30c7\u30fc\u30bf\u306e\u533a\u5207\u308a\u306f\u3069\u3053\u306a\u306e\u304b\u3092\u30a8\u30f3\u30c9\u30dd\u30a4\u30f3\u30c8\u9593\u3067\u6b63\u3057\u304f<br>\u8a8d\u8b58\u3057\u3066\u3044\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002<br>\u3053\u306e\u7d04\u675f(\u898f\u7d04)\u3092\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u30d7\u30ed\u30c8\u30b3\u30eb\u3068\u3044\u3044\u307e\u3059\u3002<br>TCP\u306f\u5358\u306b\u30d0\u30a4\u30c8\u30b9\u30c8\u30ea\u30fc\u30e0\u3092\u9001\u53d7\u4fe1\u3059\u308b\u30d7\u30ed\u30c8\u30b3\u30eb\u3067\u3059\u306e\u3067\u3001\u3053\u308c\u3089\u306f\u5f53\u7136<br>\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3067\u5b9f\u88c5\u3057\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093<\/p>\n\n\n\n<figure class=\"wp-block-image is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.oji-koji.com\/wp-content\/uploads\/2019\/10\/ByteStream-1024x403.png\" alt=\"\" class=\"wp-image-1631\" width=\"768\" height=\"302\" srcset=\"https:\/\/www.oji-koji.com\/wp-content\/uploads\/2019\/10\/ByteStream-1024x403.png 1024w, https:\/\/www.oji-koji.com\/wp-content\/uploads\/2019\/10\/ByteStream-300x118.png 300w, https:\/\/www.oji-koji.com\/wp-content\/uploads\/2019\/10\/ByteStream-768x302.png 768w, https:\/\/www.oji-koji.com\/wp-content\/uploads\/2019\/10\/ByteStream.png 1057w\" sizes=\"auto, (max-width: 768px) 100vw, 768px\" \/><\/figure>\n\n\n\n<p class=\"program_discription\">\u4f8b\u3048\u3070\u3001\u30e1\u30fc\u30eb\u306f<a rel=\"noreferrer noopener\" aria-label=\"RFC5322 (\u65b0\u3057\u3044\u30bf\u30d6\u3067\u958b\u304f)\" href=\"https:\/\/tools.ietf.org\/html\/rfc5322#section-2.1\" target=\"_blank\">RFC5322<\/a>\u3067\u30d8\u30c3\u30c0\u90e8\u3068\u30dc\u30c7\u30a3\u90e8\u306e\u533a\u5207\u308a\u306f<strong>\u7a7a\u884c(CRLF)<\/strong>\u306b\u3088\u3063\u3066\u5206\u96e2\u3055\u308c\u307e\u3059\u3002<\/p>\n\n\n\n<p class=\"program_discription\">\u4eca\u56de\u306e\u62e1\u5f35\u3067\u306f\u3001\u30d5\u30a1\u30a4\u30eb\u9001\u4fe1\u306e\u3088\u3046\u306a\u30d0\u30a4\u30ca\u30ea\u30c7\u30fc\u30bf\u3092\u6271\u3044\u307e\u3059\u306e\u3067\u5358\u7d14\u306b\u533a\u5207\u308a\u3092<br>\u7a7a\u884c\u306b\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3002<br>\u305d\u3053\u3067\u3001\u4eca\u56de\u306f\u3001\u6b21\u306e\u3088\u3046\u306a\u30d8\u30c3\u30c0\u90e8\u3068\u30c7\u30fc\u30bf\u90e8\u3067\u69cb\u6210\u3055\u308c\u308b\u30d1\u30b1\u30c3\u30c8\u3068\u3057\u3066\u6271\u3046<br>\u3053\u3068\u306b\u3057\u3001\u51e6\u7406\u3092\u7c21\u5358\u306b\u3059\u308b\u305f\u3081\u306b<strong>\u5171\u901a\u30d8\u30c3\u30c0\u90e8\u306f\u56fa\u5b9a\u9577<\/strong>\u306b\u3057\u307e\u3059\u3002<br><strong>\u5171\u901a\u30d8\u30c3\u30c0\u90e8<\/strong><br>  <strong>\u8b58\u5225\u5b50(36Bytes)<\/strong>\uff1a\u30d1\u30b1\u30c3\u30c8\u304c\u3053\u306e\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u306e\u3082\u306e\u304b\u3069\u3046\u304b\u8b58\u5225\u3059\u308b\u305f\u3081\u306e\u30c7\u30fc\u30bf<br>  <strong>\u30b3\u30de\u30f3\u30c9(2Bytes)<\/strong>\uff1aWORD\u5024\u306e\u30c7\u30fc\u30bf\u7a2e\u5225\u3092<strong>\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u30aa\u30fc\u30c0\u30fc<\/strong>\u3067\u683c\u7d0d\u3057\u307e\u3059\u3002<br>  <strong>\u30c7\u30fc\u30bf\u9577(2Bytes)<\/strong>\uff1aWORD\u5024\u306e\u30c7\u30fc\u30bf\u9577(\u5171\u901a\u30d8\u30c3\u30c0\u3092\u542b\u307e\u306a\u3044)\u3092<strong>\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u30aa\u30fc\u30c0\u30fc<\/strong><br>  \u3067\u683c\u7d0d\u3057\u307e\u3059\u3002<br><strong>\u30c7\u30fc\u30bf\u90e8<\/strong>\u306b\u306f<strong>\u30d0\u30a4\u30ca\u30ea\u30c7\u30fc\u30bf(\u53ef\u5909\u9577)<\/strong>\u3092\u305d\u306e\u307e\u307e\u683c\u7d0d\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<figure class=\"wp-block-image is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.oji-koji.com\/wp-content\/uploads\/2019\/10\/PacketFormat-1024x113.png\" alt=\"\" class=\"wp-image-1642\" width=\"768\" height=\"85\" srcset=\"https:\/\/www.oji-koji.com\/wp-content\/uploads\/2019\/10\/PacketFormat-1024x113.png 1024w, https:\/\/www.oji-koji.com\/wp-content\/uploads\/2019\/10\/PacketFormat-300x33.png 300w, https:\/\/www.oji-koji.com\/wp-content\/uploads\/2019\/10\/PacketFormat-768x85.png 768w, https:\/\/www.oji-koji.com\/wp-content\/uploads\/2019\/10\/PacketFormat.png 1051w\" sizes=\"auto, (max-width: 768px) 100vw, 768px\" \/><\/figure>\n\n\n\n<p class=\"program_discription\">\u30d7\u30ed\u30b0\u30e9\u30e0\u3067\u3053\u306e\u30d1\u30b1\u30c3\u30c8\u69cb\u9020\u3092\u5b9f\u73fe\u3059\u308b\u306b\u306f\u6b21\u306e\u30d8\u30c3\u30c0\u30d5\u30a1\u30a4\u30eb\u3092\u4f7f\u3044\u307e\u3059\u3002<br>MAGIC_STRING\u304c\u8b58\u5225\u5b50\u3067\u3001\u3053\u3053\u3067\u306fGUID\u3092\u4f7f\u3063\u3066\u307f\u307e\u3057\u305f\u3002<br>\u69cb\u9020\u4f53\u3092\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u306b\u6d41\u3059\u5834\u5408\u3001\u30c7\u30fc\u30bf\u5883\u754c(\u30d1\u30c3\u30ad\u30f3\u30b0\u30a2\u30e9\u30a4\u30e1\u30f3\u30c8)\u306e\u8003\u3048\u65b9\u304c<br>\u30a8\u30f3\u30c9\u30dd\u30a4\u30f3\u30c8\u306b\u3088\u3063\u3066\u7570\u306a\u308b\u53ef\u80fd\u6027\u304c\u3042\u308b\u306e\u3067\u3001#pragma pack(push ,1)\u3092\u4f7f\u3063\u3066<br>\u5f37\u5236\u7684\u306b\u5883\u754c\u3092\uff11\u30d0\u30a4\u30c8\u306b\u3057\u307e\u3059\u3002<br>MsgDataRec\u306f\u5171\u901a\u30d8\u30c3\u30c0\u306b\u30c7\u30fc\u30bf(\u30c1\u30e3\u30c3\u30c8\u6587\u5b57\u5217)\u3092\u304f\u3063\u3064\u3051\u305f\u3082\u306e\u3067\u3059\u3002<\/p>\n\n\n\n<p class=\"source_code\">\u3010define.h\u3011\n#pragma once\n#include   &#8220;stdThread.h&#8221;\n\n#define     MAGIC_DATA_LEN  36\n#define     CMD_MSG_DATA    100\n#define     MAGIC_STRING    &#8220;E2E6F7BF-42B1-4382-AF0B-1F452ED13EB6&#8221;\n\n#pragma pack(push ,1)   \/\/ \u30d1\u30c3\u30ad\u30f3\u30b0\u30a2\u30e9\u30a4\u30e1\u30f3\u30c8\u30921\u306b\n\n\/\/==============\n\/\/ \u5171\u901a\u30d8\u30c3\u30c0\u90e8\n\/\/==============\ntypedef struct\n{\n    BYTE    bMagicData[MAGIC_DATA_LEN];     \/\/ \u4e0d\u6b63\u30a2\u30af\u30bb\u30b9\u9632\u6b62\u7528(GUID\u3092\u4f7f\u3044\u307e\u3059)\n    WORD    wCommand;                       \/\/ \u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u30aa\u30fc\u30c0\u30fc\n    WORD    wDataLen;                       \/\/ \u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u30aa\u30fc\u30c0\u30fc\n} HeaderRec;\n\n\/\/===============================================\n\/\/ \u30e1\u30c3\u30bb\u30fc\u30b8\u9001\u4fe1\u7528\u69cb\u9020\u4f53 \u5171\u901a\u30d8\u30c3\u30c0\u90e8 + \u30c7\u30fc\u30bf\u90e8 \n\/\/===============================================\ntypedef struct\n{\n    HeaderRec   header;\n    BYTE        bMsgData[1];                \/\/ null\u30bf\u30fc\u30df\u30cd\u30a4\u30c8\u3092\u542b\u307e\u306a\u3044\u30c7\u30fc\u30bf\n} MsgDataRec;\n\n#pragma pack(pop)       \/\/ \u30d1\u30c3\u30ad\u30f3\u30b0\u30a2\u30e9\u30a4\u30e1\u30f3\u30c8\u3092\u623b\u3059<\/p>\n\n\n\n<p class=\"program_discription\"><strong>\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u6e96\u5099<\/strong><br>SimpleClientTransFile(Windows), SimpleServerTransFile(Linux)\u3092\u4f5c\u308a\u307e\u3059\u3002<br><a href=\"https:\/\/www.oji-koji.com\/pro-files\/SimpleClientMEcho2Win.zip\">SimpleClientMEcho(Windows)<\/a>\u3092\u30b3\u30d4\u30fc\u3057\u3001SimpleClientTransFile\u306b\u540d\u524d\u5909\u66f4<br>\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u540d\u3092SimpleClientTransFile\u306b\u5909\u66f4\u3057\u307e\u3059\u3002<br><br><a href=\"https:\/\/www.oji-koji.com\/pro-files\/SimpleServerPollMChatLinux.zip\">SimpleServerPollMChat(Linux)<\/a>\u3092\u30b3\u30d4\u30fc\u3057\u3001SimpleServerTransFile\u306b\u540d\u524d\u5909\u66f4<br>\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u540d\u3092SimpleServerTransFile\u306b\u5909\u66f4<br>makefile\u306ePROGRAM\u3092SimpleServerTransFile\u306b\u5909\u66f4\u3057\u307e\u3059\u3002<br><br>define.h\u3092\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u8ffd\u52a0\u3057\u3066\u304f\u3060\u3055\u3044\u3002<br>SimpleClient.cpp, SimpleServer.cpp\u306b#include &#8220;define.h&#8221; \u3092\u8ffd\u52a0\u3057\u307e\u3059\u3002<br>makefile\u306e\u4f9d\u5b58\u95a2\u4fc2include\u90e8\u306bdefine.h\u3092\u8ffd\u52a0\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<figure class=\"wp-block-image is-resized\"><a href=\"https:\/\/www.oji-koji.com\/wp-content\/uploads\/2019\/10\/SimpleClientTransFileWinProject.png\" data-rel=\"lightbox-gallery-O5u5opSx\" data-rl_title=\"\" data-rl_caption=\"\" title=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.oji-koji.com\/wp-content\/uploads\/2019\/10\/SimpleClientTransFileWinProject-1024x379.png\" alt=\"\" class=\"wp-image-1646\" width=\"768\" height=\"284\" srcset=\"https:\/\/www.oji-koji.com\/wp-content\/uploads\/2019\/10\/SimpleClientTransFileWinProject-1024x379.png 1024w, https:\/\/www.oji-koji.com\/wp-content\/uploads\/2019\/10\/SimpleClientTransFileWinProject-300x111.png 300w, https:\/\/www.oji-koji.com\/wp-content\/uploads\/2019\/10\/SimpleClientTransFileWinProject-768x284.png 768w, https:\/\/www.oji-koji.com\/wp-content\/uploads\/2019\/10\/SimpleClientTransFileWinProject.png 1288w\" sizes=\"auto, (max-width: 768px) 100vw, 768px\" \/><\/a><figcaption>SimpleClientTransFile(Windows)<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image is-resized\"><a href=\"https:\/\/www.oji-koji.com\/wp-content\/uploads\/2019\/10\/SimpleServerTransFileLinucProject.png\" data-rel=\"lightbox-gallery-O5u5opSx\" data-rl_title=\"\" data-rl_caption=\"\" title=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.oji-koji.com\/wp-content\/uploads\/2019\/10\/SimpleServerTransFileLinucProject-1024x314.png\" alt=\"\" class=\"wp-image-1647\" width=\"768\" height=\"236\" srcset=\"https:\/\/www.oji-koji.com\/wp-content\/uploads\/2019\/10\/SimpleServerTransFileLinucProject-1024x314.png 1024w, https:\/\/www.oji-koji.com\/wp-content\/uploads\/2019\/10\/SimpleServerTransFileLinucProject-300x92.png 300w, https:\/\/www.oji-koji.com\/wp-content\/uploads\/2019\/10\/SimpleServerTransFileLinucProject-768x236.png 768w, https:\/\/www.oji-koji.com\/wp-content\/uploads\/2019\/10\/SimpleServerTransFileLinucProject.png 1431w\" sizes=\"auto, (max-width: 768px) 100vw, 768px\" \/><\/a><figcaption>SimpleServerTransFile(Linux)<\/figcaption><\/figure>\n\n\n\n<p class=\"source_code\">\u3010makefile\u3011\nCC=g++ -g3 -O0\n#CC=g++\nPROGRAM=SimpleServerTransFile\nOBJS=SimpleServer.o stdThread.o ThreadJob.o SendRecvThread.o MySyncObject.o\n\nSRCS=$(OBJS:%.o=%.cpp)\nINCLUDE=stdThread.h define.h\nLFLAGS=-lpthread\n\n$(PROGRAM):$(OBJS) $(SRCS) $(INCLUDE)\n\t$(CC) -o $(PROGRAM) $(SRCS) $(LFLAGS)<\/p>\n\n\n\n<p class=\"program_discription\">\u5148\u305a\u306f\u3001SimpleClientTransFile(Windows)\u306e\u9001\u4fe1\u90e8\u3092\u30d1\u30b1\u30c3\u30c8\u5bfe\u5fdc\u306b<br>SimpleServerTransFile(Linux)\u306e\u53d7\u4fe1\u90e8\u3092\u30d1\u30b1\u30c3\u30c8\u5bfe\u5fdc\u306b\u5909\u66f4\u3057\u307e\u3059\u3002<br>\u4e0b\u56f3\u306e\u3088\u3046\u306a\u611f\u3058\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<figure class=\"wp-block-image is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.oji-koji.com\/wp-content\/uploads\/2019\/10\/Packet1-1024x301.png\" alt=\"\" class=\"wp-image-1649\" width=\"768\" height=\"226\" srcset=\"https:\/\/www.oji-koji.com\/wp-content\/uploads\/2019\/10\/Packet1-1024x301.png 1024w, https:\/\/www.oji-koji.com\/wp-content\/uploads\/2019\/10\/Packet1-300x88.png 300w, https:\/\/www.oji-koji.com\/wp-content\/uploads\/2019\/10\/Packet1-768x225.png 768w, https:\/\/www.oji-koji.com\/wp-content\/uploads\/2019\/10\/Packet1.png 1039w\" sizes=\"auto, (max-width: 768px) 100vw, 768px\" \/><\/figure>\n\n\n\n<p class=\"program_discription\"><strong>SimpleClientTransFile(Windows)\u306e\u9001\u4fe1\u90e8\u306e\u30d1\u30b1\u30c3\u30c8\u5bfe\u5fdc<\/strong><br>\u30e1\u30c3\u30bb\u30fc\u30b8\u6587\u5b57\u5217\u3092\u305d\u306e\u307e\u307e\u9001\u4fe1\u3057\u3066\u3044\u305f\u90e8\u5206\u3092\u6b21\u306e\u3088\u3046\u306a\u30d1\u30b1\u30c3\u30c8\u5316\u3057\u3066\u9001\u4fe1\u3059\u308b<br>\u95a2\u6570\u306e\u547c\u3073\u51fa\u3057\u306b\u7f6e\u304d\u63db\u3048\u307e\u3059\u3002<\/p>\n\n\n\n<p class=\"source_code\">\u30d1\u30b1\u30c3\u30c8\u5316\u3057\u3066\u9001\u4fe1\u3059\u308b\u95a2\u6570\n\u3010SimpleClient.cpp\u3011\n\/\/==============================================\n\/\/ function\n\/\/      \u30e1\u30c3\u30bb\u30fc\u30b8\u30d1\u30b1\u30c3\u30c8\u306e\u9001\u4fe1\n\/\/ parameter\n\/\/      char    *pcData     [in]UTF-8\u30c7\u30fc\u30bf(NULL\u30bf\u30fc\u30df\u30cd\u30fc\u30c8\u306a\u3057)\n\/\/      int     iSize       [in]\u30c7\u30fc\u30bf\u30b5\u30a4\u30ba\n\/\/ return\n\/\/      \u306a\u3057\n\/\/==============================================\nBOOL    SendMessagePacket(char *pcData, int iSize)\n{\n    MsgDataRec  *pMsgData = NULL;\n    int         iPacketSize = sizeof(HeaderRec) + iSize;        \/\/ \u30d1\u30b1\u30c3\u30c8\u30b5\u30a4\u30ba\n    BOOL        fRet = FALSE;\n\n    pMsgData = (MsgDataRec *)calloc(iPacketSize, sizeof(BYTE)); \/\/ \u30d1\u30b1\u30c3\u30c8\u5168\u4f53\u306e\u30a8\u30ea\u30a2\u3092\u78ba\u4fdd\n\n    memcpy(pMsgData-&lt;header.bMagicData, MAGIC_STRING, strlen(MAGIC_STRING));\n    pMsgData-&lt;header.wCommand = htons(CMD_MSG_DATA);\n    pMsgData-&lt;header.wDataLen = htons(iSize);\n\n    memcpy(pMsgData-&lt;bMsgData, pcData, iSize);\n    fRet = m_pCSendRecvThread-&lt;SetSendData((char *)pMsgData, iPacketSize);\n\n    SAFE_FREE(pMsgData)\n    return(fRet);\n}<\/p>\n\n\n\n<p class=\"program_discription\">\u95a2\u6570\u3092\u547c\u3073\u51fa\u3059\u305f\u3081\u306b\u30d7\u30ed\u30c8\u30bf\u30a4\u30d7\u5ba3\u8a00\u3092\u8ffd\u52a0\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<p class=\"source_code\">\u3010SimpleClient.cpp\u3011\n\/\/ \u95a2\u6570\u306e\u5ba3\u8a00\nBOOL InitSocketLib();                           \/\/ WinSockDLL\u306e\u521d\u671f\u5316\n&#8230;\nBOOL EnableESC(FILE *stream);                   \/\/ ESC\u30b7\u30fc\u30b1\u30f3\u30b9\u753b\u9762\u5236\u5fa1\u3092\u6709\u52b9\u306b\u3059\u308b\nBOOL SendMessagePacket(char *pcData, int iSize);\/\/\u2605 \u30e1\u30c3\u30bb\u30fc\u30b8\u30d1\u30b1\u30c3\u30c8\u306e\u9001\u4fe1<\/p>\n\n\n\n<p class=\"program_discription\">\u30e1\u30c3\u30bb\u30fc\u30b8\u6587\u5b57\u5217\u9001\u4fe1\u3092\u95a2\u6570\u547c\u3073\u51fa\u3057\u306b\u5909\u66f4\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<p class=\"source_code\">int main(int argc, char *argv[])\n{\n    char    szKeyInBuff[81];\n    int     iSize;\n    LPBYTE  pbDest = NULL;\n\n    EnableESC(stderr);\n    m_pCMySyncObject = new CMySyncObject();\n    m_pCMySyncObject-&gt;Initialize();\n\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    \/\/ \u9001\u53d7\u4fe1\u30b9\u30ec\u30c3\u30c9\u3092\u958b\u59cb\u3059\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        if (KillZombei() == TRUE)           \/\/ \u5207\u65ad\u3057\u3066\u305f\u3089\u7d42\u4e86\n            break;\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)- 1))\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                \/\/ 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                \/\/ \u9001\u4fe1\u306f\u9001\u4fe1\u30c7\u30fc\u30bf\u3092\u30bb\u30c3\u30c8\u3059\u308b\u3060\u3051\u3001\u5b9f\u969b\u306e\u9001\u4fe1\u306fCSendRecvThread\u3067\u5b9f\u65bd\n                \/\/==========================================\n                \/\/ \u2605\u30e1\u30c3\u30bb\u30fc\u30b8\u30d1\u30b1\u30c3\u30c8\u306e\u9001\u4fe1\n                SendMessagePacket((char *)pbDest, iSize);\n                \/\/==========================================\n                SAFE_FREE(pbDest)\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    m_pCMySyncObject-&gt;Uninitialize();\n    SAFE_DELETE(m_pCMySyncObject)\n    return(0);\n}<\/p>\n\n\n\n<p class=\"program_discription\">\u3053\u308c\u3067\u3001SimpleClientTransFile(Windows)\u3067\u30c1\u30e3\u30c3\u30c8\u30e1\u30c3\u30bb\u30fc\u30b8\u3092\u30d1\u30b1\u30c3\u30c8\u5316\u3057\u3066<br>\u9001\u4fe1\u3059\u308b\u6a5f\u80fd\u306e\u5b9f\u88c5\u306f\u5b8c\u4e86\u3067\u3059\u3002<\/p>\n\n\n\n<p class=\"program_discription\"><strong>SimpleServerTransFile(Linux)\u306e\u53d7\u4fe1\u90e8\u306e\u30d1\u30b1\u30c3\u30c8\u5bfe\u5fdc<\/strong><br>\u30c7\u30fc\u30bf\u53d7\u4fe1\u5f8c\u3001\u53d7\u4fe1\u30c7\u30fc\u30bf\u306e\u89e3\u6790(\u6b63\u3057\u3044\u30c7\u30fc\u30bf\u304b\u5224\u65ad\u5f8c\u3001\u30b3\u30de\u30f3\u30c9\u3054\u3068\u306e\u51e6\u7406\u306e<br>\u547c\u3073\u51fa\u3057\u3092\u884c\u3046)\u95a2\u6570AnalyzeDataRecv\u3092\u547c\u3073\u51fa\u3059\u3088\u3046\u306b\u3057\u307e\u3059\u3002<br>AnalyzeDataRecv\u306f\u3001\u30b3\u30de\u30f3\u30c9\u304c\u30c1\u30e3\u30c3\u30c8\u6587\u5b57\u5217\u53d7\u4fe1\u306a\u3089\u30e1\u30c3\u30bb\u30fc\u30b8\u30b3\u30de\u30f3\u30c9\u51e6\u7406<br>\u95a2\u6570RecvMessagePacket\u3092\u547c\u3073\u51fa\u3057\u3001\u3053\u3053\u3067\u30d1\u30b1\u30c3\u30c8\u304b\u3089\u30e1\u30c3\u30bb\u30fc\u30b8\u30c7\u30fc\u30bf\u3092\u53d6\u308a\u51fa\u3059\u3002<br>\u53d6\u308a\u51fa\u3057\u305f\u30e1\u30c3\u30bb\u30fc\u30b8\u3092\u8868\u793a\u3001\u4ed6\u306e\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306b\u914d\u4fe1\u3059\u308b\u305f\u3081\u306bSetSendData\u306b\u6e21\u3059\u3002<br>\uff08\uff0a\uff09SetSendData\u3078\u6e21\u3059\u90e8\u5206\u306f\u3001\u307e\u3060\u30d1\u30b1\u30c3\u30c8\u5316\u3057\u3066\u3044\u307e\u305b\u3093\u3002<br>SendRecvThread.cpp\u306e\u8ffd\u52a0\u30fb\u4fee\u6b63\u7b87\u6240\u306f\u6b21\u306e\u901a\u308a\u3067\u3059\u3002<\/p>\n\n\n\n<p class=\"source_code\">\u3010SendRecvThread.cpp\u3011\n\/\/==============================================\n\/\/ function\n\/\/      \u2605\u4fee\u6b63 \u6a5f\u80fd\u3092\u8a18\u8ff0\u3057\u305f\u95a2\u6570\n\/\/ parameter\n\/\/      \u306a\u3057\n\/\/ return\n\/\/      0:\u6b63\u5e38 -1:\u30a8\u30e9\u30fc\u767a\u751f\n\/\/==============================================\nUINT CSendRecvThread::DoWork()\n{\n    BOOL        fRet = TRUE;\n    char        szRecvBuffer[RCVBUFSIZE + 1];   \/\/ \u53d7\u4fe1\u30d0\u30c3\u30d5\u30a1\n    int         iRecvSize;\n    pollfd      fds[1] = { 0 };\n    char        *pcData = NULL;           \/\/ \u672a\u9001\u4fe1\u30c7\u30fc\u30bf\n    int         iSendSize = 0;            \/\/ \u672a\u9001\u4fe1\u30c7\u30fc\u30bf\u30b5\u30a4\u30ba\n\n    fprintf(stderr, &#8220;DoWork()\\n&#8221;);\n    fds[0].fd = m_pConInfo-&gt;fdClient;\n    while (!m_fStopFlag)\n    {\n        \/\/ \u672a\u9001\u4fe1\u306e\u30c7\u30fc\u30bf\u304c\u306a\u3051\u308c\u3070\u9001\u4fe1\u3057\u305f\u3044\u30c7\u30fc\u30bf\u304c\u3042\u308b\u304b\u8abf\u3079\u308b\n        if (iSendSize == 0)\n            iSendSize = GetSendData(&amp;pcData);\n\n        fds[0].events = POLLIN | POLLRDHUP;     \/\/ \u53d7\u4fe1\u3068\u76f8\u624b\u5074\u304b\u3089\u306e\u5207\u65ad\u30a4\u30d9\u30f3\u30c8\u3092\u8a2d\u5b9a\n        if (iSendSize &gt; 0)\n            fds[0].events |= POLLOUT;           \/\/ \u66f8\u304d\u8fbc\u307f\u53ef\u80fd\u3092\u8ffd\u52a0\n\n        poll(fds, 1, 10);\n        if (fds[0].revents &amp; POLLRDHUP)         \/\/ \u76f8\u624b\u5074\u304b\u3089\u306e\u5207\u65ad\n        {\n            fprintf(stderr, &#8220;Disconnected pollrdhup\\n&#8221;);\n            fRet = FALSE;\n            break;\n        }\n        if (fds[0].revents &amp; POLLERR)           \/\/ \u30a8\u30e9\u30fc\u767a\u751f\n        {\n            m_pConInfo-&gt;pCMySyncObject-&gt;Lock();\n            DispErrorMsg(&#8220;Err:DoWork&#8221;);\n            m_pConInfo-&gt;pCMySyncObject-&gt;UnLock();\n            fRet = FALSE;\n            break;\n        }\n        if (fds[0].revents &amp; POLLIN)            \/\/ \u53d7\u4fe1\u30c7\u30fc\u30bf\u30a4\u30d9\u30f3\u30c8\n        {\n            memset(szRecvBuffer, 0, sizeof(szRecvBuffer));\n            if ((iRecvSize = recv(m_pConInfo-&gt;fdClient, szRecvBuffer, RCVBUFSIZE, 0)) &lt;= 0)\n            {\n                m_pConInfo-&gt;pCMySyncObject-&gt;Lock();\n                if (iRecvSize == 0)\n                    DispErrorMsg(&#8220;Disconnected recv&#8221;);\n                else\n                    DispErrorMsg(&#8220;Err:recv&#8221;);\n                m_pConInfo-&gt;pCMySyncObject-&gt;UnLock();\n                fRet = FALSE;\n                break;\n            }\n            else\n            {\n                \/\/=========================================================\n                \/\/ \u2605\u53d7\u4fe1\u30c7\u30fc\u30bf\u3092\u89e3\u6790\u95a2\u6570\u306b\u6e21\u3059\n                if (AnalyzeDataRecv((BYTE *)szRecvBuffer, iRecvSize) == FALSE)\n                {\n                    m_pConInfo-&gt;pCMySyncObject-&gt;Lock();\n                    DispErrorMsg(&#8220;Err:Packet format&#8221;);\n                    m_pConInfo-&gt;pCMySyncObject-&gt;UnLock();\n                    fRet = FALSE;\n                    break;\n                }\n                \/\/=========================================================\n            }\n        }\n        if (fds[0].revents &amp; POLLOUT)           \/\/ \u9001\u4fe1\u53ef\u80fd\u306a\u3089send\u5b9f\u65bd\n        {\n            if (send(m_pConInfo-&gt;fdClient, pcData, iSendSize, 0) != iSendSize)\n            {\n                DispErrorMsg(&#8220;Err:send&#8221;);\n                fRet = FALSE;\n                break;\n            }\n            SAFE_FREE(pcData)                   \/\/ \u672a\u9001\u4fe1\u30c7\u30fc\u30bf\u306a\u3057\u306b\u30bb\u30c3\u30c8\n            iSendSize = 0;\n        }\n    }\n    m_pConInfo-&gt;pCMySyncObject-&gt;Lock();\n    m_fIamZombie = TRUE;\n    m_pConInfo-&gt;pCMySyncObject-&gt;UnLock();\n    SAFE_FREE(pcData)                           \/\/ \u672a\u9001\u4fe1\u30c7\u30fc\u30bf\u306a\u3057\u306b\u30bb\u30c3\u30c8\n    iSendSize = 0;\n    return((fRet == TRUE) ? 0 : -1);\n}\n\n\/\/==============================================\n\/\/ function\n\/\/      \u2605\u65b0\u898f\u8ffd\u52a0 \u53d7\u4fe1\u30c7\u30fc\u30bf\u306e\u89e3\u6790\n\/\/ parameter\n\/\/      BYTE    *pbData     [in]\u53d7\u4fe1\u30c7\u30fc\u30bf\n\/\/      int     iSize       [in]\u53d7\u4fe1\u30c7\u30fc\u30bf\u30b5\u30a4\u30ba\n\/\/ retun\n\/\/      TRUE\/FALSE\n\/\/==============================================\nBOOL CSendRecvThread::AnalyzeDataRecv(BYTE *pbData, int iSize)\n{\n    BOOL        fRet = FALSE;\n    HeaderRec   *pHeader;\n    WORD        wCmd;\n\n    if (iSize &lt; sizeof(HeaderRec))        \/\/ \u30d8\u30c3\u30c0\u30b5\u30a4\u30ba\u306b\u6e80\u305f\u306a\u3044\u3068\u304d\u306f\u30a8\u30e9\u30fc\n        goto L_END;\n\n    pHeader = (HeaderRec *)pbData;        \/\/ \u30d8\u30c3\u30c0\u90e8\u306e\u89e3\u6790\n    \/\/ \u8b58\u5225\u5b50\u304c\u4e00\u81f4\u3057\u306a\u3044\u3068\u304d\u306f\u30a8\u30e9\u30fc\n    if (memcmp(pHeader-&gt;bMagicData, MAGIC_STRING, strlen(MAGIC_STRING)) != 0)\n        goto L_END;\n\n    \/\/ \u30b3\u30de\u30f3\u30c9\u3092\u53d6\u308a\u51fa\u3057\u51e6\u7406\u306e\u5206\u5c90\u3092\u884c\u3046\n    wCmd = ntohs(pHeader-&gt;wCommand);\n    fprintf(stderr, &#8220;CMD:%d\\n&#8221;, wCmd);\n\n    switch (wCmd)\n    {\n        case CMD_MSG_DATA:\n            fRet = RecvMessagePacket(pbData, iSize);\n            break;\n        default:                          \/\/ \u77e5\u3089\u306a\u3044\u30b3\u30de\u30f3\u30c9\u306f\u30a8\u30e9\u30fc\n            break;\n    }\nL_END:\n    return(fRet);\n}\n\n\/\/==============================================\n\/\/ function\n\/\/      \u2605\u65b0\u898f\u8ffd\u52a0 \u30e1\u30c3\u30bb\u30fc\u30b8\u30b3\u30de\u30f3\u30c9\u306e\u53d7\u4fe1\n\/\/ parameter\n\/\/      char    *pcData     [in]\u30e1\u30c3\u30bb\u30fc\u30b8\u30b3\u30de\u30f3\u30c9\u30d1\u30b1\u30c3\u30c8\n\/\/      int     iSize       [in]\u30c7\u30fc\u30bf\u30b5\u30a4\u30ba\n\/\/ retun\n\/\/        \u306a\u3057\n\/\/==============================================\nBOOL CSendRecvThread::RecvMessagePacket(BYTE *pbData, int iSize)\n{\n    BOOL        fRet = FALSE;\n    HeaderRec   *pHeader;\n    MsgDataRec  *pMsgData;\n    int         iMsgSize;\n    char        *pszMsg = NULL;\n\n    pHeader = (HeaderRec *)pbData;\n    iMsgSize = ntohs(pHeader-&gt;wDataLen);\n    \/\/ \u30c7\u30fc\u30bf\u304c\u8db3\u308a\u306a\u3044\u3068\u304d\u306f\u30a8\u30e9\u30fc\n    if (iSize &lt; iMsgSize + sizeof(HeaderRec))\n        goto L_END;\n\n    \/\/ \u30e1\u30c3\u30bb\u30fc\u30b8\u30c7\u30fc\u30bf\u306e\u53d6\u308a\u51fa\u3057\n    pMsgData = (MsgDataRec *)pbData;\n    \/\/ NULL\u30bf\u30fc\u30df\u30cd\u30fc\u30c8\u5206\u3092\u8ffd\u52a0\u3057\u3066\u78ba\u4fdd\n    pszMsg = (char *)calloc(iMsgSize + 1, sizeof(char));\n    memcpy(pszMsg, pMsgData-&gt;bMsgData, iMsgSize);\n\n    m_pConInfo-&gt;pCMySyncObject-&gt;Lock();\n    fprintf(stderr, &#8220;Msg:recv %s\\n&#8221;, pszMsg);\n    m_pConInfo-&gt;pCMySyncObject-&gt;UnLock();\n\n    \/\/ \u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306b\u5206\u914d\u3059\u308b\u305f\u3081\u306b\u30c7\u30fc\u30bf\u3092\u30bb\u30c3\u30c8\n    \/\/ \u307e\u3060\u30d1\u30b1\u30c3\u30c8\u5316\u3057\u3066\u3044\u306a\u3044\n    SetSendData(pszMsg, iMsgSize);\n    SAFE_FREE(pszMsg)\n    fRet = TRUE;\nL_END:\n    return(fRet);\n}<\/p>\n\n\n\n<p class=\"program_discription\">SendRecvThread.h\u306b\u65b0\u898f\u8ffd\u52a0\u3057\u305f\u95a2\u6570\u306e\u5ba3\u8a00\u3092\u8a18\u8ff0\u3059\u308c\u3070\u3001\u5b8c\u4e86\u3067\u3059\u3002<\/p>\n\n\n\n<p class=\"source_code\">\u3010SendRecvThread.h\u3011\n#pragma once\n#include &#8220;ThreadJob.h&#8221;\n#include &#8220;define.h&#8221;         \/\/ \u2605\n\nclass CMySyncObject;        \/\/ \u3053\u306e\u30af\u30e9\u30b9\u306e\u4f7f\u7528\u3059\u308b\u3053\u3068\u3092\u5ba3\u8a00\n\ntypedef struct\n{\n    SOCKET          fdClient;           \/\/ \u63a5\u7d9a\u6e08\u307f\u30bd\u30b1\u30c3\u30c8(accept\u306e\u7d50\u679c)\n    CMySyncObject   *pCMySyncObject;    \/\/ \u540c\u671f\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\n} ConnectionInfoRec;\n\n\nclass CSendRecvThread :\n    public CThreadJob\n{\npublic:\n    CSendRecvThread(ConnectionInfoRec *pConInfo);   \/\/ \u30d1\u30e9\u30e1\u30fc\u30bf\u3092\u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\u3067\u6e21\u3059\n    ~CSendRecvThread();\n\n    \/\/ \u57fa\u5e95\u30af\u30e9\u30b9\u306e\u95a2\u6570\u3092\u30aa\u30fc\u30d0\u30fc\u30e9\u30a4\u30c9\u3059\u308b\n    \/\/ C++11\u3067\u660e\u793a\u7684\u306boverride\u3092\u66f8\u304f\u3053\u3068\u304c\u51fa\u6765\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3057\u305f\n    \/\/ \u57fa\u5e95\u30af\u30e9\u30b9\u306e\u5f53\u8a72\u95a2\u6570\u306bvirtual\u304c\u66f8\u3044\u3066\u3044\u306a\u3044\u3068\u30a8\u30e9\u30fc\u3092\u51fa\u3057\u3066\u304f\u308c\u307e\u3059\n    UINT DoWork() override;                         \/\/ DoRecv\u3067\u5b9f\u65bd\u3057\u3066\u3044\u308b\u5185\u5bb9\u3092\u8a18\u8ff0\n    BOOL SetSendData(char *pcData, int iSize);      \/\/ \u9001\u4fe1\u30c7\u30fc\u30bf\u306e\u8a2d\u5b9a            \n    int GetRecvData(char **ppcData);                \/\/ \u53d7\u4fe1\u30c7\u30fc\u30bf\u306e\u53d6\u5f97\n\n    BOOL IsZombie();                                \/\/ \u3053\u306e\u30b9\u30ec\u30c3\u30c9\u306f\u30be\u30f3\u30d3\u72b6\u614b\u304b\n\nprivate:\n    ConnectionInfoRec   *m_pConInfo;            \/\/ \u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\u3067\u6e21\u3055\u308c\u308b\u30d1\u30e9\u30e1\u30fc\u30bf\u3092\u683c\u7d0d\n                                                \/\/ \u3053\u306e\u30b9\u30ec\u30c3\u30c9\u5b9f\u884c\u4e2d\u9818\u57df\u304c\u78ba\u4fdd\u3055\u308c\u3066\u3044\u308b\u3053\u3068\n    BOOL m_fIamZombie;                          \/\/ \u30be\u30f3\u30d3\u72b6\u614b\u304b\u3069\u3046\u304b\u3092\u4fdd\u6301\n    char *m_pSendData;                          \/\/ \u9001\u4fe1\u30c7\u30fc\u30bf\u683c\u7d0d\u7528\u30a8\u30ea\u30a2\n    int m_iSendDataSize;                        \/\/ \u9001\u4fe1\u30c7\u30fc\u30bf\u683c\u7d0d\u7528\u30a8\u30ea\u30a2\u306e\u30c7\u30fc\u30bf\u30b5\u30a4\u30ba\n    char *m_pRecvData;                          \/\/ \u53d7\u4fe1\u30c7\u30fc\u30bf\u683c\u7d0d\u7528\u30a8\u30ea\u30a2\n    int m_iRecvDataSize;                        \/\/ \u53d7\u4fe1\u30c7\u30fc\u30bf\u683c\u7d0d\u7528\u30a8\u30ea\u30a2\u306e\u30c7\u30fc\u30bf\u30b5\u30a4\u30ba\n\n    int GetSendData(char **ppcData);            \/\/ \u9001\u4fe1\u30c7\u30fc\u30bf\u306e\u53d6\u5f97\n    BOOL SetRecvData(char *pcData, int iSize);  \/\/ \u53d7\u4fe1\u30c7\u30fc\u30bf\u306e\u8a2d\u5b9a\n\n    BOOL AnalyzeDataRecv(BYTE *pbData, int iSize);      \/\/ \u2605\u53d7\u4fe1\u30c7\u30fc\u30bf\u306e\u89e3\u6790\n    BOOL RecvMessagePacket(BYTE *pbData, int iSize);    \/\/ \u2605\u30e1\u30c3\u30bb\u30fc\u30b8\u30b3\u30de\u30f3\u30c9\u306e\u53d7\u4fe1\n};<\/p>\n\n\n\n<p class=\"program_discription\">SimpleServerTransFile(Linux)\u306e\u9001\u4fe1\u90e8\u5206\u306e\u30d1\u30b1\u30c3\u30c8\u5316\u3001<br>SimpleClientTransFile(Windows)\u306e\u53d7\u4fe1\u90e8\u5206\u306e\u30d1\u30b1\u30c3\u30c8\u5316\u3092\u884c\u3044\u3001\u4e0b\u56f3\u306e\u3088\u3046\u306a<br>\u52d5\u4f5c\u306b\u3059\u308b\u306e\u3067\u3059\u304c\u3001\u3053\u308c\u306b\u3064\u3044\u3066\u306f\u3001\u6b21\u56de\u306b\u884c\u3046\u3053\u3068\u306b\u3057\u307e\u3057\u3087\u3046\u3002<\/p>\n\n\n\n<figure class=\"wp-block-image is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.oji-koji.com\/wp-content\/uploads\/2019\/10\/Packet2-1024x334.png\" alt=\"\" class=\"wp-image-1663\" width=\"768\" height=\"251\" srcset=\"https:\/\/www.oji-koji.com\/wp-content\/uploads\/2019\/10\/Packet2-1024x334.png 1024w, https:\/\/www.oji-koji.com\/wp-content\/uploads\/2019\/10\/Packet2-300x98.png 300w, https:\/\/www.oji-koji.com\/wp-content\/uploads\/2019\/10\/Packet2-768x251.png 768w, https:\/\/www.oji-koji.com\/wp-content\/uploads\/2019\/10\/Packet2.png 1051w\" sizes=\"auto, (max-width: 768px) 100vw, 768px\" \/><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>\u524d\u534a\u306b\u4f5c\u6210\u3057\u305fSimpleClientMEcho(Windows\u7248\u3001Linux\u7248)\u3068SimpleServerMChat(Windows\u7248, Linux\u7248)\u9593\u306b\u30d5\u30a1\u30a4\u30eb\u9001\u53d7\u4fe1\u6a5f\u80fd\u3092\u8ffd\u52a0\u3059\u308b\u3053\u3068\u306b\u3057\u307e\u3057\u3087\u3046\u3002 \u9001\u53d7\u4fe1\u3055\u308c\u308b\u30c7 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":129,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_locale":"ja","_original_post":"https:\/\/www.oji-koji.com\/?p=1627","footnotes":""},"categories":[9],"tags":[],"class_list":["post-1627","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-networkprograming2","ja"],"_links":{"self":[{"href":"https:\/\/www.oji-koji.com\/index.php?rest_route=\/wp\/v2\/posts\/1627","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=1627"}],"version-history":[{"count":33,"href":"https:\/\/www.oji-koji.com\/index.php?rest_route=\/wp\/v2\/posts\/1627\/revisions"}],"predecessor-version":[{"id":3114,"href":"https:\/\/www.oji-koji.com\/index.php?rest_route=\/wp\/v2\/posts\/1627\/revisions\/3114"}],"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=1627"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.oji-koji.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1627"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.oji-koji.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1627"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}