Ошибка при получении данных в клиентском сокете C # из сокета java-сервера - PullRequest
1 голос
/ 11 января 2012

Я создаю соединение Socket с клиентским сокетом C # и сокетом Java Server. Когда я отправляю данные из клиентского сокета, серверный сокет правильно получает эти данные. Но когда я пытаюсь отправить данные обратно в сокет клиента из сокета сервера, он зависает на стороне клиента при получении данных.

Код на стороне клиента (In C # .net)

           clientSocket = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);

            string hostName = System.Net.Dns.GetHostName();
            System.Net.IPHostEntry hostEntry = System.Net.Dns.GetHostEntry(hostName);
            System.Net.IPAddress[] ipAddresses = hostEntry.AddressList;
            System.Net.IPEndPoint remoteEP =
                new System.Net.IPEndPoint(ipAddresses[ipAddresses.Length - 1], port);
            clientSocket.Connect(remoteEP);
             string sendData = inputFilePath;
                    byte[] byteDataSend = System.Text.Encoding.ASCII.GetBytes(sendData);
                    clientSocket.Send(byteDataSend);

                    int receivedBufferSize = clientSocket.ReceiveBufferSize;
                    byte[] recivedData = new Byte[receivedBufferSize];
                    int receivedDataLength = clientSocket.Receive(recivedData);
                    string stringData = Encoding.ASCII.GetString(recivedData, 0, receivedDataLength);
                    textFilePath = stringData;
                    Console.Write(stringData);
                    clientSocket.Close();

Код сокета сервера (в Java)

           Socket connection = server.accept();
            BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream())); 
            fileName = in.readLine();
            convertedFile =runConverter.convertDocumet(fileName);
            byte[] sendingData = convertedFile.getBytes("US-ASCII");
            DataOutputStream dos = new DataOutputStream(connection.getOutputStream());
            dos.write(sendingData, 0, sendingData.length);

Подскажите в чем проблема ?? Пожалуйста, помогите ...

1 Ответ

0 голосов
/ 11 января 2012

Обычная проблема с кодом C # такого рода - синхронное получение.
Я всегда рекомендую выполнять асинхронное чтение, как в этот ответ .

Я не уверен, что это источник вашей проблемы, но если вы реализовали асинхронный прием с небольшим количеством журналирования, есть хороший шанс, что это либо исправит вашу проблему, либо сделает ее намного более очевидной в отношениив чем твоя проблема

Зависание при синхронном приеме предполагает, что Java не отправляет данные в тот же сокет, который прослушивает c #, поэтому двойная проверка этих конечных точек также может быть хорошей идеей.

Надеюсь, это поможет!

...