我有Socket Server PHP和Client Android App。连接和通讯似乎工作良好。但是我让客户端获取数据库中所做的每个更新。问题有时是当我建立连接(通过单击android App按钮)并且在db表中插入新记录时效果很好,但有时(随机)失败并停止显示新记录。有时我需要单击按钮以显示最后写入的值(使用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,服务器进行更改以将推送通知发送到应用程序的操作,但是要在没有Internet连接的本地网络中执行。到目前为止,我是否正确?以及推荐用于进行推送通知通信的内容。