Red de conocimiento informático - Problemas con los teléfonos móviles - ¿Cómo conectarse a la base de datos SQLite de forma remota?

¿Cómo conectarse a la base de datos SQLite de forma remota?

Ejemplo de conexión remota de SQLite

Sqlite es una excelente base de datos integrada con un tamaño de sólo unos pocos cientos de kilobytes y no tiene la función de conexión remota en sí. Debido a su pequeño tamaño, alta velocidad y soporte para muchos idiomas, se ha utilizado ampliamente en el campo independiente. Sin embargo, dado que no soporta naturalmente el modelo servicio/cliente, tiene que recurrir a programación adicional cuando encuentra conexiones remotas a bases de datos de pequeña escala.

Hay más de 300 personas en la unidad. Como administrador de red, tengo que recibir muchas llamadas todos los días, muchas de las cuales no puedo recordar los nombres correspondientes por un tiempo. la libreta de direcciones no sólo es lenta sino que también es fácil pasarla por alto. Para mayor comodidad, creé una tabla de datos de la libreta de direcciones en sqlite y luego escribí un script de consulta usando perl. Aunque el efecto es bueno, algunos colegas también esperan conseguir una copia. Pero en este momento nos encontramos con un problema: cómo garantizar que la libreta de direcciones permanezca coherente en manos de diferentes personas. La mejor manera es establecer un modelo de servicio/cliente, mantener una base de datos en la máquina local y otros pueden obtener resultados de consultas relevantes conectándose a la base de datos.

La solución específica es la siguiente: mantener una conexión a la base de datos SQLite en la máquina local y establecer un monitoreo de socket desde el cliente, aceptar las condiciones de consulta remota y responder a los resultados de la consulta es responsabilidad del cliente; para Enviar y recibir estas tareas más simples.

Código de cliente: uso?strict;

mi?$in_buffer?=?undef;

mi?$PF_INET?=?2;

¿mi?$port?=?2345;

mi?$remote_addr?=?pack('SnC4x8',$PF_INET,$port,192,168,138,228);

mi? $SOCK_DGRAM?=?2;

socket(UDP_CLIENT,?$PF_INET,?$SOCK_DGRAM,?getprotobyname('udp'));

mientras(1){

print("?Ingrese nombre o número:?");

my?$out_buffer=;

chomp($out_buffer);

if($out_buffer?eq?"exit"){last;}

enviar(UDP_CLIENT,?$out_buffer,?0,?$remote_addr);

imprimir ( "esperando?respuesta...\n");

recv(UDP_CLIENT,?$in_buffer,?100,?0);

chomp($in_buffer); /p>

print("$in_buffer\n");

}

close(UDP_CLIENT);

Código del lado del servidor:

p>

COMENZAR{

if(?$^O?eq?'MSWin32'?){ require?Win32::Consola::Consola::Gratis(); ;

}

}

uso?estricto;

uso?DBI;

#base de datos?parámetros

mi?$db_path?=?'d:/src/cc/phones.db';

mi?$dbh?=?DBI->connect("dbi:SQLite :$db_path", ?{PrintError?=>?0})?o?die?$DBI::errstr;

mi?$sth?=?undef;

# socket?server?parámetros

mi?$in_buffer?=?undef;

mi?$out_buffer?=?undef;

mi?$PF_INET?= ?2;

p>

mi?$puerto?=?2345;

mi?$local_addr?=?pack('SnC4x8',$PF_INET,$puerto, 192,168,138,228);

my?$SOCK_DGRAM?=?2;

socket(UDP_SERVER,?$PF_INET,$SOCK_DGRAM,?getprotobyname('udp'))?o?die( "$!");

bind(UDP_SERVER,?$local_addr)?o?die("$!");

escuchar(UDP_SERVER,?10);

mientras(1){

#recibir?consulta?luego?enviar?resultado

¿último?a menos que?mi?$remote_addr?=?recv(UDP_SERVER,$in_buffer ,

100,0);

chomp($in_buffer);

if($in_buffer?=~?/^[0-9]{6}$/){ $algo? =?$dbh->prepare("select?*?from?phones?where?number?=?$in_buffer"); PROCEDIMIENTO: $sth->execute(); my?@items?=?$sth->fetchrow_array (); if(scalar(@items)){ $out_buffer?=?$items[0].'?El número de red virtual es?'.$items[1]; ¿No existe esa persona?'; }

}else{ $sth?=?$dbh->prepare("select?*?from?phones?where?name?=?'$in_buffer'"); ir a?PROCEDIMIENTO;

}

enviar(UDP_SERVER,$out_buffer,0,$remote_addr);

}

#desconectar? desde?sqlite

$dbh->desconectar();