• 为Socket写的附加方法


     自己封装了一个.Net的异步socket
     在Server端写了一个对象池来提供服务.

     然后为在网络中传递的数据写了一个Pack和Unpack方法.
     打算放到Socket类中

     基本的思路是:在Send以前调用PackMessage
     在Message(以Byte数组的方式存在)前面加上一些附加信息.
     例如发送的消息字节数.

     然后在Receive端接收打了包的字节流,解析出Pack在前面的大小信息.
     再根据这个大小判断是否接收到完整的数据.

     还可以写得更复杂,加上一些别的东西.
     但暂时就是这样,也觉得代码写得不好...最近好象没有什么状态.

     测试代码如下:

     

     1#include "stdafx.h"
     2
     3#using <mscorlib.dll>
     4
     5using namespace System;
     6const int ADDITIONINFO=10;
     7
     8Byte PackMessage(String * message) []
     9{
    10    Byte btRealMessage[]=Text::Encoding::ASCII->GetBytes(message);
    11    int iSize=btRealMessage->Length;
    12    String *strSize=iSize.ToString();
    13    Console::WriteLine("RealMessage Length:{0}",strSize);
    14
    15    Byte btSizeBuffer[]=Text::Encoding::ASCII->GetBytes(strSize);
    16
    17    Byte btAdditionInfo[]=new Byte[ADDITIONINFO];
    18    Array::Copy(btSizeBuffer,0,btAdditionInfo,0,btSizeBuffer->Length);
    19    Byte btPackedMessage[]=new Byte[ADDITIONINFO+iSize];
    20    Array::Copy(btAdditionInfo,0,btPackedMessage,0,ADDITIONINFO);
    21    Array::Copy(btRealMessage,0,btPackedMessage,ADDITIONINFO,iSize);
    22    return btPackedMessage;
    23}
    ;
    24
    25
    26Byte UnPackMessage(Byte btPackedMessage[])[]
    27{
    28    Byte btSize[]=new Byte[ADDITIONINFO];
    29    Array::Copy(btPackedMessage,0,btSize,0,ADDITIONINFO);
    30    String *strSize=Text::Encoding::ASCII->GetString(btSize);
    31    Console::WriteLine("The message Length is {0}",strSize);
    32
    33    Byte btRealMessage[]=new Byte[Convert::ToInt32(strSize)];
    34    Array::Copy(btPackedMessage,ADDITIONINFO,btRealMessage,0,Convert::ToInt32(strSize));
    35    
    36    return btRealMessage;
    37}

    38
    39int _tmain()
    40{
    41    // TODO: 请用您自己的代码替换下面的示例代码。
    42    Console::WriteLine("Please input Message:");
    43    String *buffer=Console::ReadLine();
    44    Byte btResult[]=PackMessage(buffer);
    45    Console::WriteLine("The message after pack is:");
    46
    47    System::Collections::IEnumerator* myEnumerator = btResult->GetEnumerator();
    48     while ( myEnumerator->MoveNext() )
    49    {
    50        Console::Write( "-{0}", myEnumerator->Current );
    51    }

    52    Console::WriteLine();
    53 
    54    Byte realMessage[]=UnPackMessage(btResult);
    55    
    56    Console::WriteLine("The Message after unpack is:");
    57    System::Collections::IEnumerator* myEnumerator1 = realMessage->GetEnumerator();
    58     while ( myEnumerator1->MoveNext() )
    59    {
    60        Console::Write( "-{0}", myEnumerator1->Current );
    61    }

    62    Console::WriteLine();
    63
    64
    65    return 0;
    66}

    67

    这个是用C++Managed写的.
  • 相关阅读:
    【组合数学】 03
    【组合数学】 02
    【微积分】 10
    马未都说收藏:陶瓷篇(18、19)五彩瓷、斗彩
    马未都说收藏:陶瓷篇(1)历史朝代、陶器
    maven pom.xml常用标签 Exclusions plugins是什么意思
    Java日志记录工具SLF4J介绍
    Spring Context及ApplicationContext
    RabbitMQ中Queue详细介绍
    收藏专家马未都简介
  • 原文地址:https://www.cnblogs.com/BearOcean/p/313317.html
Copyright © 2020-2023  润新知