• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            隨筆-341  評(píng)論-2670  文章-0  trackbacks-0
                為了建立一個(gè)remote object access system我不得不封裝了socket、pipe以及synchronize objects。不過我還不知道如何實(shí)現(xiàn)穿透,這個(gè)就暫時(shí)算了。今晚用了兩個(gè)小時(shí)封裝了socket的一些必要操作,并寫了人生中第一個(gè)socket程序。

                這個(gè)程序同時(shí)作為server和client。第一次啟動(dòng)的為server。接下來server進(jìn)行監(jiān)聽,client則往server發(fā)信息并接受返回的信息。server會(huì)將接受到的信息進(jìn)行反轉(zhuǎn)發(fā)回去,除非收到了exit結(jié)束線程,last結(jié)束線程并結(jié)束監(jiān)聽。

                明天繼續(xù)寫腳本引擎的教程。
              1 #include "..\..\..\..\VL++\Library\Data\VL_Comm.h"
              2 #include "..\..\..\..\VL++\Library\Platform\VL_Console.h"
              3 #include "..\..\..\..\VL++\Library\Data\VL_System.h"
              4 
              5 using namespace vl;
              6 using namespace vl::platform;
              7 using namespace vl::system;
              8 using namespace vl::system::synchronization;
              9 using namespace vl::communication;
             10 
             11 volatile VBool LastSocketClient=false;
             12 
             13 class SocketThread : public VL_Thread
             14 {
             15 protected:
             16     VL_ServerSocket* FSocket;
             17 public:
             18     SocketThread(VL_ServerSocket* Socket):VL_Thread(false,true)
             19     {
             20         FSocket=Socket;
             21     }
             22 
             23     ~SocketThread()
             24     {
             25         delete FSocket;
             26     }
             27 
             28     void Run()
             29     {
             30         VWChar Buffer[1024];
             31         while(true)
             32         {
             33             memset(Buffer,0,sizeof(Buffer));
             34             if(FSocket->ReadData((VBuffer)Buffer,sizeof(Buffer),false)>0)
             35             {
             36                 if(wcscmp(Buffer,L"exit")==0)
             37                 {
             38                     return;
             39                 }
             40                 else if(wcscmp(Buffer,L"last")==0)
             41                 {
             42                     LastSocketClient=true;
             43                     return;
             44                 }
             45                 VInt Len=wcslen(Buffer);
             46                 for(VInt i=0;i<Len/2;i++)
             47                 {
             48                     VWChar First=Buffer[i];
             49                     Buffer[i]=Buffer[Len-1-i];
             50                     Buffer[Len-1-i]=First;
             51                 }
             52                 FSocket->WriteData((VBuffer)Buffer,Len*sizeof(VWChar));
             53             }
             54             else
             55             {
             56                 return;
             57             }
             58         }
             59     }
             60 };
             61 
             62 void vlmain(VL_Console& Con)
             63 {
             64     Con.SetTitle(L"Vczh Socket");
             65     Con.SetTestMemoryLeaks(true);
             66     Con.SetPauseOnExit(false);
             67 
             68     VBool ServerProcess=false;
             69     VL_SynEvent Event;
             70     switch(Event.Create(false,true,L"VCZH_EVENT"))
             71     {
             72     case VL_SynObject::arSucceed:
             73         ServerProcess=true;
             74         break;
             75     case VL_SynObject::arAlreadyExists:
             76         break;
             77     case VL_SynObject::arFail:
             78         Con.Write(L"Fail\r\n");
             79         return;
             80     }
             81 
             82     if(ServerProcess)
             83     {
             84         VL_SocketServer Server(vspTCP,L"8000",false);
             85         if(Server.IsSuccess())
             86         {
             87             Con.Write(L"Setup server success.\r\n");
             88             while(!LastSocketClient)
             89             {
             90                 VL_ServerSocket* Socket=Server.WaitForConnection();
             91                 if(Socket==0)
             92                 {
             93                     LastSocketClient=true;
             94                 }
             95                 else
             96                 {
             97                     Con.Write(L"Get a client.\r\n");
             98                     new SocketThread(Socket);
             99                 }
            100             }
            101             Con.Write(L"Server stops.\r\n");
            102             Con.SetPauseOnExit(true);
            103         }
            104         else
            105         {
            106             Con.Write(L"Setup server fails.\r\n");
            107             Con.SetPauseOnExit(true);
            108         }
            109     }
            110     else
            111     {
            112         VL_ClientSocket Socket(vspTCP,L"127.0.0.1",L"8000");
            113         if(Socket.Connect())
            114         {
            115             VUnicodeString Input;
            116             VWChar Buffer[1024];
            117             while(true)
            118             {
            119                 Con.Write(L"CLIENT>");
            120                 Con.Read(Input);
            121                 Socket.WriteData((VBuffer)Input.Buffer(),Input.Length()*sizeof(VWChar));
            122                 if(Input==L"exit" || Input==L"last")
            123                 {
            124                     break;
            125                 }
            126                 memset(Buffer,0,sizeof(Buffer));
            127                 if(Socket.ReadData((VBuffer)Buffer,sizeof(Buffer),false)>0)
            128                 {
            129                     Con.Write(Buffer);
            130                     Con.Write(L"\r\n");
            131                 }
            132                 else
            133                 {
            134                     Con.Write(L"Connection fails.\r\n");
            135                     Con.SetPauseOnExit(true);
            136                     break;
            137                 }
            138             }
            139         }
            140         else
            141         {
            142             Con.Write(L"Connect to server fails.\r\n");
            143             Con.SetPauseOnExit(true);
            144         }
            145     }
            146 }

            posted on 2008-08-01 06:23 陳梓瀚(vczh) 閱讀(1667) 評(píng)論(3)  編輯 收藏 引用

            評(píng)論:
            # re: 封裝了Socket 2008-08-01 20:09 | 空明流轉(zhuǎn)
            很好,很強(qiáng)大,我沒看懂。  回復(fù)  更多評(píng)論
              
            # re: 封裝了Socket 2008-08-01 22:43 | 李宜
            # re: 封裝了Socket 2008-08-01 23:55 | 陳梓瀚(vczh)
            樓上跟我認(rèn)識(shí)的一個(gè)人同名  回復(fù)  更多評(píng)論
              

            只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            亚洲精品乱码久久久久66| 久久久精品人妻一区二区三区四| 久久精品蜜芽亚洲国产AV| 久久亚洲私人国产精品vA| 99久久国产综合精品成人影院 | 精品久久久久久无码不卡| 伊人久久精品无码二区麻豆| 国产精品久久久久影院嫩草| 亚洲国产精品综合久久网络 | 久久综合九色综合欧美狠狠| 午夜天堂精品久久久久| 久久久久久免费一区二区三区| 观看 国产综合久久久久鬼色 欧美 亚洲 一区二区| 欧美日韩中文字幕久久久不卡 | 久久99热国产这有精品| 久久不见久久见免费视频7| 久久精品国产色蜜蜜麻豆| 亚洲狠狠综合久久| 区久久AAA片69亚洲| 精品久久久久久国产牛牛app | 国产一区二区三精品久久久无广告| 久久无码AV中文出轨人妻| 国产成人精品久久亚洲高清不卡| 国产精品99精品久久免费| 久久精品国产第一区二区三区| 久久国产午夜精品一区二区三区| 久久婷婷成人综合色综合| 亚洲?V乱码久久精品蜜桃| 欧美亚洲另类久久综合| 久久久久亚洲av无码专区喷水| 久久福利资源国产精品999| 国产精品丝袜久久久久久不卡 | 国产成人久久久精品二区三区| 99久久精品免费看国产一区二区三区| 欧美无乱码久久久免费午夜一区二区三区中文字幕 | 久久国产色AV免费观看| 亚洲精品无码久久久久久| 老男人久久青草av高清| 97精品依人久久久大香线蕉97| 久久99国产精品久久99小说 | 久久久精品人妻一区二区三区蜜桃|