Отправка объектов между java-клиентом и сервером C# (с использованием TCP и BinaryFormatter)

Я пытаюсь разработать клиент-серверное приложение, которое может передавать файлы и строки с клиента на сервер. Я новичок в TCP, сокетах и ​​серверных транзакциях.

Клиентская часть написана на Java, а серверная — на C#.

что я пытаюсь сделать на сервере (C#), получить все байты и передать их объекту, потому что я отправляю все объекты со стороны клиента в типе объекта. затем я хотел привести к файлу или строке

но в этой строке кода я получаю сообщение об ошибке

Object myObject = (Object)binForm.Deserialize(memStream);

На стороне сервера:-

private void ClientHandler(object client)
    {
        int bytesRead = 0;
        byte[] buffer = new byte[32];

        tcpClient = (TcpClient)client;
        clientStream = tcpClient.GetStream();

        Console.WriteLine("Client Handler Started!");

        while (true)
        {
            bytesRead = 0;

            try
            {
                Console.WriteLine("Server waiting for commands\n");

                MemoryStream memStream = new MemoryStream();
                BinaryFormatter binForm = new BinaryFormatter();


                while ((bytesRead = tcpClient.Client.Receive(buffer)) > 0)
                {

                    Console.WriteLine("bytes received :- " + bytesRead);

                    memStream.Write(buffer, 0, bytesRead);                        

                }
                try
                {

                    memStream.Position = 0;

                    Object myObject = (Object)binForm.Deserialize(memStream);
                    // After this cast it to String or File 

                }
                catch(Exception exp)
                {                       
                    Console.WriteLine(exp.ToString());
                }

            }
            catch
            {
                //a socket error has occured
                Console.WriteLine("a socket error has occured!!!");
                break;
            }
        }

person Hasitha Weerasinghe    schedule 08.08.2014    source источник
comment
Какую ошибку вы видите?   -  person Yuval Itzchakov    schedule 08.08.2014
comment
показать внутреннее исключение catch ?   -  person shujaat siddiqui    schedule 08.08.2014
comment
Исключением является конец потока, обнаруженный до завершения синтаксического анализа.   -  person Hasitha Weerasinghe    schedule 08.08.2014
comment
На самом деле я никогда не пробовал это раньше, но я почти уверен, что вы не можете использовать .NET BinaryFormatter для десериализации объекта, который был сериализован с помощью Java. См. stackoverflow.com/questions/17801967/   -  person vesan    schedule 08.08.2014
comment
Пожалуйста, добавьте к вопросу ваш сериализуемый объект.   -  person Frank59    schedule 08.08.2014
comment
BinaryFormatter предназначен только для сценариев .NET. Почему бы не использовать SOAP между ними, поскольку его поддерживают обе платформы?   -  person John Saunders    schedule 08.08.2014


Ответы (1)


Двоичный форматировщик помещает заголовок в двоичный поток, который представляет тип .NET. Вы не можете использовать это для отправки значения «объект» клиенту, отличному от .net.

Вместо этого вам придется сериализовать в XML или Json и предоставить локальную модель и десериализацию в вашем клиенте.

person kidshaw    schedule 08.08.2014