数据编码和解码——网络编程入门(三)

常见的字符集编码方式

  1. ASCAII(American Standard Code for Information Interchange)
    ASCAII由128个字符集组成,包括大小写字母、单个数字、标点符号等字符和一些控制字符。每个字符占用 1 个字节。

  2. Unicode
    Unicode 是国际通用的编码方式,这种编码每个字符都占用两个字节。中英文字符都是占用两个字节。C#中的字符和字符串默认采用的都是Unicode编码。

  3. UTF-8(8-bit Unicode Transformation Format)
    UTF-8的范围0 到 1,114,111(涵盖整个Unicode字符集,是Unicode的一种变长字符编码,用1~4个字节表示一个Unicode字符。中文字符占用3个字节,特殊情况下占用4个字节。

  4. GB2312
    GB2312 是中国国家标准的字符集,用于编码简体中文汉字,一个汉字占用两个字节。

Encoding类实现编码和解码

 private void EncodeDecode(string str,Encoding encoding)
 {
      //将字符串编码为数组
      byte[] bytes= encoding.GetBytes(str);

      //将字节数组解码为字符串
      string s = encoding.GetString(bytes);
  }
private void EncodingConvert()
{
    string str = "unicode,utf-8";
    Encoding unicode = Encoding.Unicode;
    Encoding utf8 = Encoding.UTF8;
    //Convert将字节数组从一种编码转换为另一种编码,unicode编码转utf-8编码
    byte[] bytes = Encoding.Convert(unicode,utf8,unicode.GetBytes(str));
    string str2 = utf8.GetString(bytes);
}

网络流(NetworkStream )

NetworkStream 主要用于处理网络通信中的数据流,通过网络发送或接收数据,仅支持面向连接的套接字。
在这里插入图片描述
Write方法负责将字节数组从进程缓冲区发送到本机的TCP发送缓冲区,然后TCP/IP协议栈再通过网络适配器把数据真正发送到网络上,最终到达接收方的TCP接收缓冲区。

获取NetworkStream对象
1、利用TcpClient对象的GetStream方法得到网络流对象。

NetworkStream networkStream= myTcpClient.GetStream();

2、利用Socket得到网络流对象。

NetworkStream networkStream = new NetworkStream(mySocket);

发送数据
Write方法为同步方法,在将数据写入到网络流之前,Write方法一直处于阻塞状态,直到发送成功或返回异常为止。

 if (networkStream.CanWrite)
 {
      byte[] writeBuffer = Encoding.UTF8.GetBytes("abcd");
      networkStream.Write(writeBuffer,0,writeBuffer.Length);
  }

接收数据
接收方法通过调用Read方法将数据从接收缓冲区读到进程缓冲区,完成读操作。

 if (networkStream.CanRead)
 {
       byte[] readBuffer = new byte[1024];
       int readBytesCount = 0;
       do
       {
           readBytesCount = networkStream.Read(readBuffer,0,readBuffer.Length);
       } while (networkStream.DataAvailable);
   }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值