Я пытаюсь отправить значения с плавающей точкой из сокета в Java и хочу получить их через сокеты в C#. Код, который я использую, можно увидеть ниже. Проблема, с которой я сталкиваюсь, заключается в том, что значение, полученное на C#, не имеет смысла. Например, если я посылаю 2.3f в виде числа с плавающей точкой из java, полученное мной значение на конце C# равно 8.96831E-44. Я не могу понять это. Будем благодарны за любую помощь.
--------- Java код ----------------
ServerSocket serverSocket = new ServerSocket(4343, 10);
Socket socket = serverSocket.accept();
OutputStream os = socket.getOutputStream();
// Receiving part which I used from another tutorial,
// Below part is just to check if send and receive are working
byte[] lenBytes = new byte[4];
is.read(lenBytes, 0, 4);
int len = (((lenBytes[3] & 0xff) << 24) | ((lenBytes[2] & 0xff) << 16) |
((lenBytes[1] & 0xff) << 8) | (lenBytes[0] & 0xff));
byte[] receivedBytes = new byte[len];
is.read(receivedBytes, 0, len);
String received = new String(receivedBytes, 0, len);
System.out.println("Server received: " + received);
// Sending, the crucial part
DataOutputStream out = new DataOutputStream(socket.getOutputStream());
out.writeFloat(2.3f);
socket.close();
serverSocket.close();
------------- C# код ------------
string toSend = "Hello!";
IPEndPoint serverAddress = new IPEndPoint(IPAddress.Parse(myIP), 4343);
Socket clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
clientSocket.Connect(serverAddress);
// Sending
int toSendLen = System.Text.Encoding.ASCII.GetByteCount(toSend);
byte[] toSendBytes = System.Text.Encoding.ASCII.GetBytes(toSend);
byte[] toSendLenBytes = System.BitConverter.GetBytes(toSendLen);
clientSocket.Send(toSendLenBytes);
clientSocket.Send(toSendBytes);
// Receiving
byte[] rcvLenBytes = new byte[32];
int k = clientSocket.Receive(rcvLenBytes);
// this line i followed from another post
float val= System.BitConverter.ToSingle(rcvLenBytes, 0);
Console.WriteLine(val);
clientSocket.Close();
Console.ReadLine();
Спасибо!
изменить: передать целые числа от java до C# с использованием сокетов работали просто отлично, я сталкиваюсь с этой проблемой, особенно с float и double.