dedecms织梦内容管理系统    
首页 | java | C/C++ | PHP | 操作系统 | ajax | 脚本编程 | 安全技术 | 本站下载页 | flex | CRM | 专题 | QQ群 | 测试中心 | 会员中心 | 积分规则
  当前位置:主页>C/C++>C/C++技术资料>文章内容
用Sockets接收和转换数字和字符串数据
来源:vchelp.net     作者:    
多时候远程系统在执行并发任务的时候,会把它接收到数据的长度以数字的形式发送出去。但用socket发送和接收数字型数据的时候,要考虑到一个问题:要根据网络另一端机器的类型转换数据。尤其需要知道怎样把要发送的数据格式(网络格式)从本地机器的格式(主机格式)转换成为行业标准格式。

  使用IPAddress.NetworkToHostOrder可以把数据从网络规则转换为主机格式,下面的ReceiveHeader函数说明了它的用法,ReceiveHeader实现过程如下:

1 用Socket.Receive从远程机器接收数据。
2 验证接收到的字节数是4。
3 Socket.Receive返回一个字节型数组,BitConvert.ToInt32把它转换成数字型数值。
4 最后,IPAddress.NetworkToHostOrder把长数值转换为主机格式。

public int ReceiveHeader(Socket socket)
{
  int dataSize = -1;  // error
  byte [] buffer = new byte[4];
  int bytesRead = socket.Receive(buffer, 4,
          System.Net.Sockets.SocketFlags.None);
  if (4 == bytesRead)
  {
   dataSize = BitConverter.ToInt32(buffer, 0);
   dataSize = IPAddress.NetworkToHostOrder(dataSize);
  }
  else  // error condition

  return dataSize;
}

  下面再来看一下怎样用多线程读取的方法为每个字符串都建立连接,从远程机器接收字符串型数据。在这种情况下,要把字节型数据转换成String型对象。你可以根据需要用ASCIIEncoding或UnicodeEncoding类进行转换。ReceiveDetail函数按以下步骤实现(此必须在ReceiveHeader后调用,因为datasize的值是从ReceiveHeader中得到的。)

1 在while循环中调用Socket.Receive,直到无返回值为止。数据被读入一个字节型数组。
2 建立一个ASCIIEncoding对象。
3 调用ASCIIEncoding.GetString把字节型数组转换成String对象,然后把它和先前读入的数据连接。

public string ReceiveDetail(Socket socket, byte[] buffer,
              int dataSize)
{
  string response = "";

  int bytesReceived     = 0;
  int totalBytesReceived  = 0;
  while (0 < (bytesReceived =
     socket.Receive(buffer, (dataSize - totalBytesReceived),
                 SocketFlags.None)))
  {
   totalBytesReceived += bytesReceived;
   ASCIIEncoding encoding = new ASCIIEncoding();
   response += encoding.GetString(buffer, 0, bytesReceived);
  }

  return response;
}

 

 

上一篇:利用模板技术简化VC中的代码   下一篇:用VC存取数据库中的大对象
[收藏] [推荐] [评论(0条)] [返回顶部] [打印本页] [关闭窗口]  
用户名: 新注册) 密码: 匿名评论
评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
 §最新评论
  热点文章
·C语言数组排序小结
·Python 与 C++ 程序的简单实例对
·c++ 数组与指针
·C++中的内存管理(new、delete、
·如何用C语言开发DSP嵌入式系统
·如何用C语言开发DSP嵌入式系统
·Linux下C语言编程
·学习arm的话先看哪本书?
·C++初学者应该关心的优秀图书一
·利用C语言小程序来解决大问题
·用C语言写PHP扩展的步骤
·用C语言扩展PHP功能
  相关文章
·利用模板技术简化VC中的代码
·用VC存取数据库中的大对象
·如何自动截获输出到打印机的文本
·VC编程实现文本语音转换
·如何用VC++和Visual Foxpro进行A
·利用WebBrowser控件创建自己的浏
·如何获取某个进程的主窗口以及创
·Windows下实时行式打印系统设计
·如何编写控制面板程序
·VC下打印机的使用
·在MFC扩展DLL中输出对话框
·获取有关显示器、鼠标及系统的配
  相关信息
copy right @ 百家拳软件项目研究室 2007 辽ICP备07011763