用Sockets接收和转换数字和字符串数据

原创 2004年04月28日 00:06:00
多时候远程系统在执行并发任务的时候,会把它接收到数据的长度以数字的形式发送出去。但用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;
}

相关文章推荐

Oracle数据删除恢复和数字与字符串之间的转换

Oracle数据删除恢复和数字与字符串之间的转换 1. 如何删除标准临时表? 举例: ------创建临时表 CREATE GLOBAL TEMPORARY TABLE t1 ON COMMIT PR...

C# 的数据类型转换 c#字符串转换格式 c#日期数字字符串整形格式转换

C# 的类型转换做了一些研究,其内容涉及 C# 的装箱/拆箱/别名、数值类型间相互转换、字符的 ASCII 码和 Unicode 码、数值字符串和数值之间的转换、字符串和字符数组/字节数组之...

c语言字符串_数字转换函数大全

  • 2013年06月01日 16:59
  • 42KB
  • 下载

5.单行函数,多行函数,字符函数,数字函数,日期函数,数据类型转换,数字和字符串转换,通用函数(case和decode)

 1  多行函数(理解:有多个输入,但只输出1个结果)          SQL>select count(*) from emp;          COUNT(*) ...

字符串和数字转换 C++ vs2008

  • 2014年09月30日 20:25
  • 564KB
  • 下载

数字转换为字符串

  • 2013年05月18日 12:04
  • 243KB
  • 下载

C#.net读取Excel表中的数据时,有些字段内容(字符串、数字)读取不到的解决办法

导入Excel时,会丢失一些手机号,或者固定电话号 问题出在于,他们将数据填入Excel时,有些格式是数值类型,有些是文本类型 当用OLEDB读取Excel的时候,在Extended P...

数字转换为字符串函数

  • 2014年05月07日 17:10
  • 323B
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:用Sockets接收和转换数字和字符串数据
举报原因:
原因补充:

(最多只允许输入30个字)