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





你可能感兴趣的:(socket,java,服务器)