GET/POST mu yoksa FTP mi ?

Başlatan kimlenbu, 01 Ağustos 2014, 14:36:45

kimlenbu

Selamlar,

Üstünde çalıştığım cihazın araç takip kısmını şekillendirmem gerekiyor. Cihaz GSM/GPRS modülle internete bağlanabiliyor, GPS'den verileri alıp ayrıştırabiliyor, FTP ile sunucudaki dosyaya bu verileri yazıp okuyabiliyor.

Geçenlerde bir başlıkta okuduğum yazı beni ikeleme düşürdü. php kullanarak get/post ile veri yazmaktan bahsediliyordu. GPS ve bir takım verilerinin sunucuya kaydedilmesi gerekiyor. Ben şimdiki sistemde ftp ile sunucuda bir text dosyası oluşturup bunun içine yazıyorum verileri.

1) Yalnız bunun yerine sunucuda bir database oluşturup get/post ile çalışmak bana esneklik sağlar mı ?

2) Text dosyalarının sıkıntısı ne olur ? maksimum boyut, satır vs sınırlaması var mı ?

3) Henüz pc'den takip programını yazmadım, bir sunucudaki text dosyasına hem cihaz hem de pc'den aynı anda erişim yapılmak istendiğinde sıkıntı olur mu ?

Henüz geri dönülebilecek bir noktada olduğum için tavsiyelerinize açığım. php bilgim başlangıç seviyesinde olduğu için eğer text dosyası ilerde sıkıntı çıkarmayacaksa bu şekilde devam etmek istiyorum.

Teşekkürler.

baran123

Sunucuda text olsa da sorun olmaz diye düşünüyorum tabi projenin boyutunu bilmek lazım, text de bir sınırlama yok ne kadarlık bir veri yazıyorsun ?,Evet aynı anda erişmen mümkün tabi kullandığın yönteme bağlı.

kimlenbu

şimdilik her 20sn'de bir yaklaşık 200byte veri yazıyor. Saatte 35kb yapıyor, öyle büyük boyutlu bir veri trafiği yok.

muhittin_kaplan

hiç böyle bir gps gsm çalışması yapmadım. ama veri tutulacaksa SQLserver/mysql/oracle gibi bir ortamda tutardım.

X-Fi

Veritabanı herzaman daha hızlıdır ve şişme olmaz ilerisi için her dilde esnek bir yapınız olur buna benzer bir proje yapmıştım çok zor bişey değil önce bir mysql database kur sonra aşağıdaki php kodu ile post yükleme yapabilirsin.

<?php 
$sunucu=    "localhost";
$kullanici= "coskun_takip";
$sifre=     "xxx";
$veritabani="coskun_takip";
 
$CON= $_GET["CON"];
$X = $_GET["X"];
$Y = $_GET["Y"];
$Temp = $_GET["Temp"];
$Press = $_GET["Press"];
$Height = $_GET["Height"];
$Deg = $_GET["Deg"];

if (@!mysql_connect($sunucu, $kullanici, $sifre)){
   $mesaj="Not Connection!<br>";
   $mesaj.="ERR: ".mysql_error();
   die($mesaj);
}
if(@!mysql_select_db($veritabani)){
   $mesaj="Not Found $veritabani!<br>";
   $mesaj.="ERR: ".mysql_error();
   die($mesaj);
}
if($X == '0' && $Y == '0' )
{
$Komut=mysql_query("TRUNCATE TABLE takip");
}
else
{
$Komut=mysql_query("insert into takip values('$CON',NOW(),'$X','$Y','$Temp Cd','$Press Pa','$Height m','$Deg d')");
}

if($Komut){
   echo "OK"; 
} else{ 
   $mesaj="Not write for $veritabani!<br>";
}
?>                           


Mysql databaseden verileri php ile okumak için ise şu kodu kullandım;

<?php
$conn = mysql_connect("localhost", "coskun_takip", "xxx") or die(mysql_error());
mysql_select_db("coskun_takip") or die(mysql_error());

$query = mysql_query("SELECT * FROM takip")or die(mysql_error());

$X=" ";
$Y=" ";

while($row = mysql_fetch_array($query))
{

  $Con = $row['Connect'];
  $Date = $row['Date'];
  $X.= $row['X'].":";
  $Y.= $row['Y'].":";
  $Temp   = $row['Temp'];
  $Press  = $row['Press'];
  $Height = $row['Height'];
  $Deg= $row['Compass'];

}
?>
http://www.coskunergan.dev/    (Yürümekle varılmaz, lakin varanlar yürüyenlerdir.)

kimlenbu

@muhittin_kaplan ve @X-Fi hocam teşekkür ederim.

@X-Fi sadece tablo adlarını değiştirip kullabileceğim kod olması da ayrı bir güzellik oldu :) text dosyasından vazgeçiyorum haydi hayırlısı...

armsistem

@kimlenbu hocam merhaba ;

- http post metodu ile veri kaybın söz konusu. ++
- sql server oldukça hızlı problemsiz. +++
- ama yerinde olsam tcp socket ile yapardım.

Gökhan BEKEN

Güvenlik konusunu unutmayınız, yetkisiz kişiler çok rahat bir şekilde get/post ile her türlü veriyi gönderebilirler yani veritabanına komutlar yollayıp zarar verebilirler, tabi engellemezseniz...
Özel mesaj okumuyorum, lütfen göndermeyin.

kimlenbu

#8
Alıntı yapılan: armsistem - 01 Ağustos 2014, 19:31:05
@kimlenbu hocam merhaba ;

- http post metodu ile veri kaybın söz konusu. ++
- sql server oldukça hızlı problemsiz. +++
- ama yerinde olsam tcp socket ile yapardım.

@armsistem hocam ilk denediğim soket oldu. c# ile yapılmış chat uygulamaları vardı onlarla deneme yaptım. Eğer aynı ağda değilsek iletişim kuramadım. Sadece yerel ip'ler birbiriyle iletişim kurabildi. Baktım vakit kaybettirecek uğraşmadım hiç.

Eğer soket kullanabilirsem statik ip alıp bir makinayı server yaparak bütün cihazların bu makinaya bağlarım. Yalnız dediğim gibi modül gprs üzerinden bağlanınca landaki makinalarla iletişim kuramıyor.

armsistem

Alıntı yapılan: kimlenbu - 02 Ağustos 2014, 10:57:01
@armsistem hocam ilk denediğim soket oldu. c# ile yapılmış chat uygulamaları vardı onlarla deneme yaptım. Eğer aynı ağda değilsek iletişim kuramadım. Sadece yerel ip'ler birbiriyle iletişim kurabildi. Baktım vakit kaybettirecek uğraşmadım hiç.

Eğer soket kullanabilirsem statik ip alıp bir makinayı server yaparak bütün cihazların bu makinaya bağlarım. Yalnız dediğim gibi modül gprs üzerinden bağlanınca landaki makinalarla iletişim kuramıyor.

Hocam merhaba , sistemlerde genelde tcp/socket uygulaması kullanılıyor. Sabit bir ip alıyorsun , modemden port yönlendiriyorsun ve daha sonra iç bacak ip si yazar gibi dış bacak ip sini yazıyorsun.

kimlenbu

Tekrar başlık açmak istemedim. FTP veya GET/POST yerine TCP/IP Socket kullandım.

C#'da yazılmış temel server ve client uygulaması buldum, GPRS modülde aşağıdaki komutları kullanarak PC'deki server'a veri gönderdim, server'dan PC'deki client'a ve GPRS modüle veri aktardım.

AT+CIPSSHUT (Baglanti koparsa bunu kullan ve proseduru bastan baslat)

AT+CIPMUX=0 (Single IP Connection Başlat)
OK CR LF

AT+CIPSTATUS
OK CR LF
STATE: IP INITIAL CR LF

AT+CSTT="wap","grps","grps"
OK CR LF

AT+CIPSTATUS
OK CR LF CR LF
STATE: IP START CR LF (Bu cevap gelene kadar beklenecek)

AT+CIICR 
OK CR LF

AT+CIPSTATUS
OK CR LF CR LF
STATE: IP GPRSACT

AT+CIFSR
10.92.7.24 CR LF

AT+CIPSTATUS
OK CR LF CR LF
STATE: IP STATUS CR LF

AT+CIPSTART="TCP","91.93.14.187","8002"
AT+CIPSEND=13
ilhan ozcelik


Bunları yaparken

1) PC'nin ip'sinin sabit olması veya bilinmesi gerekiyor (server bizde olacağından sabit ip alırız, en kötü noip kullanırız)
2) PC'nin yerel ip'sini sabit yaptık (yoksa windows her açıldığında yerel ip değişiyor)
3) Modemden bu yerel ip için port yönlendirme yaptık

Diyelim ki ben kurumsal bir yere gittim, burada karmaşık bir ağ yapısı var, ben nasıl ağın arkasındaki makinaya ulaşacağım ? Kurumsal firmalardaki ağ yapısı nasıldır ? Evdeki veya ufak ofislerdeki gibi direkt modeme bağlı değiller.

Kabil ATICI

Serve'ler ile yetkilendirme yapılmakta. Siz doğrudan ulaşamayacaksınız. Bunun için demo için veya kurulum için gittiğinizde iletişim kurduğunuz kişiden ne tür bağlantı istediğinizi belirtirseniz, size kurumun bilgi işlem ile ilgili birimi yardımcı olmaya çalışacaktır. Gerekli yönlendirme ve yetkilendirmeleri (güvenlik sınırları içinde) yapacaklardır. Bazı durumlarda kurumsal yapı içinde güvenlik sıkıntısı olması durumunda harici açılmış internet yapıları da olabilir.

Ama ne istediğinizi iyi bilmeniz ve nasıl bağlantı kurduğunuzu iyi anlamanız gerekir.

Kurumlar arasında farklılık gösterebilir.
ambar7

kimlenbu

Veri iletişimi dersi alalı yıllar geçti, hocam şu sorularımı görse ağlardı :) topu direkt bilgi işleme atıyoruz o zaman

Kabil ATICI

Evet, çünkü senin istediğin port üzerinden giriş ip ile bilgisayarın ip arasında bir tünel açıyorlar (NAT). Bu işlemi senin yapmana güvenlik açısından izin vermezler ve vermemeleri gerekir. Aslında senin normalde modem üzerinde yaptığın işi onlar server üzerinde gerçekleştiriyor.
İşin nasıl olduğunu bil , çok ender de olsa amcasının oğlu çalışıyor olabiliyor.
ambar7

Seckin ALAN

#14
sual 1: internet kota sorunun var mı ?
eğer yok ise bir framework ve dinamik dil ile veritabanına kayıt işlemini gerçekleştirebilirsin. yazılımca authentication yapabilirsin device id gibi

Ayrıca hizmeti SAS verebilirsi n
Kar taneleri ne güzel anlatıyor, birbirlerine zarar vermeden de yol almanın mümkün olduğunu.. Mevlana