为Socket写的附加方法
来源:互联网 发布:网络音乐提供商潘多拉 编辑:程序博客网 时间:2024/05/30 04:27
自己封装了一个.Net的异步socket
在Server端写了一个对象池来提供服务.
然后为在网络中传递的数据写了一个Pack和Unpack方法.
打算放到Socket类中
基本的思路是:在Send以前调用PackMessage
在Message(以Byte数组的方式存在)前面加上一些附加信息.
例如发送的消息字节数.
然后在Receive端接收打了包的字节流,解析出Pack在前面的大小信息.
再根据这个大小判断是否接收到完整的数据.
还可以写得更复杂,加上一些别的东西.
但暂时就是这样,也觉得代码写得不好...最近好象没有什么状态.
测试代码如下:
#include "stdafx.h" 2 3#using4 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);1415 Byte btSizeBuffer[]=Text::Encoding::ASCII->GetBytes(strSize);1617 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};242526Byte 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);3233 Byte btRealMessage[]=new Byte[Convert::ToInt32(strSize)];34 Array::Copy(btPackedMessage,ADDITIONINFO,btRealMessage,0,Convert::ToInt32(strSize));35 36 return btRealMessage;37}3839int _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:");4647 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();636465 return 0;66}
这个是用C++Managed写的.
- 为Socket写的附加方法
- 为jquery的ajaxfileupload增加附加参数的方法
- CE+OD无法附加游戏进程的破解方法-不再为不能附加而烦恼了
- javascript写的简单的计算器,附加界面、代码,方法实用
- 附加MySQL数据库的方法
- 利用AJAX生成自动添加tr的table,并且为添加的tr附加上方法
- 被覆写的方法不能为private
- Sqlserver2005附加数据库为只读的解决方法
- Sqlserver2005附加数据库为只读的解决方法
- socket协议的java实现(附加代码)
- C++ 程序 附加 进程调试 方法 本文基于VS2010为例, 其他版本的编译器也可以
- android中include使用提高复用性(自定义title为例(附加取消title的方法))
- C#附加SQL2005数据库的方法
- 附加的CICS命令和编程方法
- 购物车到订单的附加方法
- 利用javabean+jsp写的简单计算器(附加图片)
- MySQL笔试题附加自己写的答案
- 为Django Admin后台写对应页面的方法
- 什么是WSDL?(转)
- 一个桌面取色器--基于C SDK
- XULRunner——Web桌面开发的创新者
- DB2跨数据库访问表的方法
- .Net 事件
- 为Socket写的附加方法
- 内网聊天工具FreeChat Beta
- 局域网聊天工具FreeChat 1.0 开发日志
- FreeChat 2.0 ...大改 模型和架构
- 内网聊天工具FreeChat 2.0
- .Net 标准控件与自定义控件
- .Net标准控件与自定义控件(2) ToolTipButton
- Command 模式
- 软件开发中的需求分析