Socket Android Java

126
28 октября 2019, 12:50

Пишу серверное приложение. У меня сервер написан на java а клиент android приложение. Код примитивного сервера и клиента. Когда я подключаюсь через андроид на сервер он видит клиента и, но не принимает от него сообщений и никак соответственно их не обрабатывает. Когда я писал и клиент на джаве таких проблем не было а вот с андроид такое. Спасибо

Server

import java.net.*;
import java.io.*;
public class Server {
public static void main(String[] ar)    {
    int port = 7777; 
    try {
        ServerSocket ss = new ServerSocket(port); // создаем сокет сервера 
        //и привязываем его к вышеуказанному порту
        System.out.println("Waiting for a client...");
        Socket socket = ss.accept(); // заставляем сервер ждать подключений 
        //и выводим сообщение когда кто-то связался с сервером
        System.out.println("Got a client :) ... Finally, someone saw me through all the cover!");
        System.out.println();
        // Берем входной и выходной потоки сокета, теперь можем получать и 
        //отсылать данные клиенту.
        InputStream sin = socket.getInputStream();
        OutputStream sout = socket.getOutputStream();
        // Конвертируем потоки в другой тип, чтоб легче обрабатывать 
        //текстовые сообщения.
        DataInputStream in = new DataInputStream(sin);
        DataOutputStream out = new DataOutputStream(sout);
        String line = null;
        while(true) {
            line = in.readUTF(); // ожидаем пока клиент пришлет строку // 
            //текста.
            System.out.println("The dumb client just sent me this line : " + line);
            System.out.println("I'm sending it back...");
            out.writeUTF(line); // отсылаем клиенту обратно ту самую строку 
           //текста.
            out.flush(); // заставляем поток закончить передачу данных.
            System.out.println("Waiting for the next line...");
            System.out.println();
        }
    } catch(Exception x) { x.printStackTrace(); }
}

}

Client

package com.example.clientandroid;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.OutputStreamWriter;
    import java.io.PrintWriter;
    import java.net.Socket;
    import java.net.SocketException;
    import java.net.UnknownHostException;
    import android.view.View;
    import android.widget.EditText;
public class MainActivity extends AppCompatActivity {
private Socket socket;
private static final int SERVERPORT = 7777;
private static final String SERVER_IP = "77.47.224.135";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    new Thread(new ClientThread()).start();

}

class ClientThread implements Runnable {
    @Override
    public void run() {
        try  {
            Socket socket = new Socket(SERVER_IP, SERVERPORT);
            socket.setSoTimeout(10000);
                PrintWriter toServer = new PrintWriter(socket.getOutputStream(), true);
                // Отправка данных на сервер
                toServer.println("Hello from TEST");
                // Ответ сервера
                BufferedReader fromServer;
                fromServer = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                String line = fromServer.readLine();
        } catch (SocketException e) {
            e.printStackTrace();
        } catch (UnknownHostException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

}

Answer 1

А сервер ошибку в консоль не выводит?
Подозрительно что сервер пишет/читает readUTF/writeUTF, а клиент readLine/println.
readUTF не сможет адекватно прочитать текст, если он записан не так же, как пишет writeUTF.
Это запись определённого формата, в первые два байта записывается количество символов этого куска текста, дальше сам текст.

READ ALSO
Сумирование значений в postgresql

Сумирование значений в postgresql

Хочу просумировать значения в JPA таким образом:

129
Парсинг строки arduino

Парсинг строки arduino

Передаю строку из андроид приложения

138
Парсинг файла с помощью Stream API

Парсинг файла с помощью Stream API

Подскажите как такое можно сделать с помощью стримов? Я в них новичок, может хотябы с помощью каких метов можно сделатьБуду рад любой помощи!

139
Не могу получить список файлов и папок google

Не могу получить список файлов и папок google

Пытаюсь получить список файлов и папок GoogleDriveВ документации написано для того, чтобы получить список нужно выполнить такой запрос:

131