Связь ServerSocket / AndroidClient иногда работает, но иногда терпит неудачу - PullRequest
0 голосов
/ 09 апреля 2019

У меня есть Socket Server PHP и клиентское приложение для Android.Связь и общение, кажется, работают хорошо.Но я сделал клиент, чтобы получать все обновления, которые сделаны в базе данных.Иногда проблема возникает, когда я устанавливаю соединение (нажав на кнопку Android-приложения) и когда я вставляю новую запись в таблицу базы данных, она работает отлично, но иногда (случайно) не удается и перестает показывать новую запись.Иногда мне нужно нажать на кнопку, чтобы показать последнее записанное (с socket_write) значение.Что-то вроде этого соединения не удается, или это цикл, который создает проблемы.Я не понимаюИли, может быть, приложение для Android не работает хорошо.Я не знаю Java так много.:)

require "init.php";
$sql = "SELECT * FROM `info` where sent = 0 order by id desc";

error_reporting(E_ALL);

set_time_limit(0);

ob_implicit_flush();

$address = '***.***.**.***';
$port = 3003;
if(($sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) === false) {
    echo "socket_create() failed: reason: " . socket_strerror(socket_last_error()) . "\n";
}

if(socket_bind($sock, $address, $port) === false) {
    echo "socket_bind() failed: reason: " . socket_strerror(socket_last_error($sock)) . "\n";
}

if(socket_listen($sock, 5) === false) {
    echo "socket_listen() failed: reason: " . socket_strerror(socket_last_error($sock)) . "\n";
}

do {
    if (($msgsock = socket_accept($sock)) === false) {
        echo "socket_accept() failed: reason: " . socket_strerror(socket_last_error($sock)) . "\n";
        break;
    }

    do {

        $result = $con->query($sql);
        $row = $result->fetch_assoc();

        if(!empty($row["Token"])){
            $msg = $row["Token"]. chr(0);

            socket_write($msgsock, utf8_encode($msg), strlen($msg));
            $result = $con->query("update info set sent = 1 where id = ".$row["id"]);
        }

    } while (true);
    socket_close($msgsock);
} while (true);

socket_close($sock);
?>

MainActivity.java - кнопка для подключения и отображения написанного сообщения.

            @Override
            public void onClick(View view) {

                if(netUtils.isNetworkAvailable(getBaseContext())) {
                    try {
                        iSocketInterface.connectOrResetConn();
                    }
                    catch(RemoteException e) {
                        e.printStackTrace();
                    }
                }
                else {
                    Toast.makeText(getBaseContext(), getString(R.string.toast_no_internet), Toast.LENGTH_SHORT).show();
                }

                if(netUtils.isNetworkAvailable(getBaseContext())) {
                    try {
                        iSocketInterface.sendMessageToServer("");
                    }
                    catch(RemoteException e) {
                        e.printStackTrace();
                    }
                }
                else {
                    Toast.makeText(getBaseContext(), getString(R.string.toast_no_internet), Toast.LENGTH_SHORT).show();
                }
            }

        });

Далее мне нужно реализовать, когда внесено изменение в db, Сервер отправил push-уведомлениев приложение, но в локальной сети без подключения к интернету.Правильный ли я путь до сих пор?И что порекомендует использовать для связи с push-уведомлениями.

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