Сокет: Java-клиент для C # -Server, некоторые данные отсутствуют - PullRequest
1 голос
/ 05 января 2012

Я написал Simple Socket Server на C # и работает довольно хорошо. Я использую соединение для отправки некоторых * .xml файлов с одного устройства (мобильный телефон, ПК) на другое.У меня есть 3 разных клиента, C #, Delphi и Java.Сервер работает с C # и Delphi, но с Java-клиентом он не работает должным образом.

Проблема с Java-клиентом заключается в том, что я просто получаю около 3/4 данных ототправленный XML-файл.Я наблюдал за отладчиком, и каждый характер документа отправляется Java-клиентом, но он не получен.Неважно, насколько длинен Документ, всегда чего-то не хватает.Я искал несколько часов, чтобы найти причину, но не смог.Может быть, вы, ребята, можете мне помочь.

Сервер:

public void WaitForClient(String filepath)
        {

int bytesRcvd;
            Byte[] rcvBuffer;
            string receivedMessage = "";

            try
            {
                {
                    // Generiere eine Client Verbindung
                    //client = listener.AcceptTcpClient();
                    client = listener.AcceptSocket();
                    //netStream = client.GetStream();
                    SetTexts(powercomConsole, "Handling client - ");
                    //Console.Write("Handling client - ");
                    int z = 0;
                    //int totalBytesEchoed = 0;
                    rcvBuffer = new byte[64];
                    //while ((bytesRcvd = netStream.Read(rcvBuffer, 0, rcvBuffer.Length)) > 0)
                    do
                    {
                        bytesRcvd = client.Receive(rcvBuffer);
                        for (int i = 0; i < rcvBuffer.Length; i++)
                        {
                            receivedMessage += (rcvBuffer[i] != 0) ? Convert.ToChar(rcvBuffer[i]).ToString() : "";
                            z++;
                            if (!receivedMessage.Equals(""))
                                Console.WriteLine("hans");
                            //receivedMessage += Convert.ToChar(rcvBuffer[i]);
                        }
                        rcvBuffer = new byte[64];
                    } while (bytesRcvd != 0);
                    WriteFile(filepath, receivedMessage);
                    SetTexts(powercomConsole, "Generated File written to " + filepath);
                    //Console.WriteLine("New File written to " + filepath);

                    // Schließe den Socket. Wir haben den Clienten erfolgreich abgewickelt
                    CloseServer();
                    SetTexts(powercomConsole, "Server closed");
                    //Console.WriteLine("Server closed");
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
                //netStream.Close();
            }
        } 

Клиент:

public boolean sendByteBuffer(String profilename) {
    ByteBuffer buffer = fileToByteBuffer(profilename);
    for (int i = 0; i < fSize; i++)
    {
        char hans = (char) buffer.get();
        out.print(hans);
    }
    try {
        Thread.sleep(2000);
    } catch (InterruptedException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }
    try {
        fChan.close();
    } catch (IOException e) {
        e.printStackTrace();
        return false;
    }
    try {
        fIn.close();
    } catch (IOException e) {
        e.printStackTrace();
        return false;
    }
    return true;
}

private ByteBuffer fileToByteBuffer(String filepath) {
        ByteBuffer mBuf = null;

        try {
            fIn = new FileInputStream(filepath);
            fChan = fIn.getChannel();
            fSize = fChan.size();
            mBuf = ByteBuffer.allocate((int) fSize);
            fChan.read(mBuf);
            mBuf.rewind();
            // for (int i = 0; i < fSize; i++)
            // System.out.print((char) mBuf.get());
            // fChan.close();
            // fIn.close();
        } catch (IOException exc) {
            System.out.println(exc);
            System.exit(1);
        }

        return mBuf;
    }

Это метод fileToByteBuffer(), который я использую в методе sendByteBuffer

Спасибо за продвижение;)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...