C#做客户端Java做服务器使用Socket通信的大小端序和行结束符的问题

在项目中需要用C#做客户端,Java做服务器,直接使用Socket通信。通信过程中由于C#用的是小端序,Java使用的是大端序。C#在向服务器发送数据时,需要将字节数组的大端序》小端绪。还有在发送到Java服务器字符串需要加上”\r”,接收时去掉"\r"

在C#可以使用2中方式转换:

1>

  #region 翻转字节数组
    //因为C#和Java的byte字节的高位和地位是完全相反的,所以在接收字节数据需要翻转
    private int ReadInt32(byte[] intBytes)
    {
        return IPAddress.NetworkToHostOrder(BitConverter.ToInt32(intBytes, 0));
    }

    private short ReadShort(byte[] shortBytes)
    {
        return IPAddress.NetworkToHostOrder(BitConverter.ToInt16(shortBytes, 0));
    }
    private string ReadString(byte[] stringBytes)
    {
       string msg= Encoding.UTF8.GetString(stringBytes);
        msg.Trim();
        return msg;
    }

    private byte[] WriteInt32(int value)
    {
        value = IPAddress.HostToNetworkOrder(value);//把value转成相应的大端
        byte[] temp = BitConverter.GetBytes(value);//这样直接取到的就是大端字节序字节数组
        return temp;
    }
   
    private byte[] WriteShort(short value)
    {
        value = IPAddress.HostToNetworkOrder(value);//把value转成相应的大端
        byte[] temp = BitConverter.GetBytes(value);//这样直接取到的就是大端字节序字节数组
        return temp;
    }
    private byte[] WriteString(string msg)
    {
        byte[] temp= Encoding.UTF8.GetBytes(msg+"\r");
        return temp;
    }
    #endregion
	2>
 #region 翻转字节数组
    //因为C#和Java的byte字节的高位和地位是完全相反的,所以在接收字节数据需要翻转
    private int ReadInt32(byte[] intBytes)
    {

        return Array.Reverse(BitConverter.ToInt32(intBytes, 0));
    }

    private short ReadShort(byte[] shortBytes)
    {
        return Array.Reverse(BitConverter.ToInt16(shortBytes, 0));
    }
    private string ReadString(byte[] stringBytes)
    {
       string msg= Encoding.UTF8.GetString(stringBytes);//只用这种方式直接得到的字节数组直接就是大端序
        msg.Trim();//在从服务器接收的时候去掉"\r"
        return msg;
    }

    private byte[] WriteInt32(int value)
    {
        byte[] temp = BitConverter.GetBytes(value);
        Array.Reverse(temp);
        return temp;
    }
   
    private byte[] WriteShort(short value)
    {
        byte[] temp = BitConverter.GetBytes(value);
        Array.Reverse(temp);
        return temp;
    }
    private byte[] WriteString(string msg)
    {
        byte[] temp= Encoding.UTF8.GetBytes(msg+"\r");//因为java的字符串在后面会自动加上“\r”,在发送到服务器上时需要加上"\r"
        return temp;
    }
    #endregion





  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值