Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Pristup bazi servera sa uređaja preko mrežnog kabla u C#

[es] :: .NET :: .NET Desktop razvoj :: Pristup bazi servera sa uređaja preko mrežnog kabla u C#

[ Pregleda: 2540 | Odgovora: 10 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

dvoglaviorao
Komp
KoTkuće, ono što volim

Član broj: 233319
Poruke: 179



+9 Profil

icon Pristup bazi servera sa uređaja preko mrežnog kabla u C#14.08.2012. u 11:16 - pre 141 meseci
Pozdrav svima!

Radim neku aplikaciju u C#, nisam baš poznavalac C#-a, još uvek učim tako da bilo kakva pomoć bi mi dobrosošla, makar i na logičkom nivou.

Situacija je sledeća: imam razvojnu ploču sa display-om. Taj uređaj se preko mrežnog UTP kabla povezuje na server (kompjuter) i njegovu bazu podataka. Znači ja treba da razvijem aplikaciju na uređaju (na kojem je ubačen Windows CE) koja ce omogućiti logovanje korisnika, dodavanje novog, razmenu poruka između 2 korisnika i tako dalje. Baza sa podacima korisnika kao i svi zahtevi se nalaze i ispunjavaju na serveru, odnosno sa uređaja svaka komanda se šalje serveru gde je on obrađuje i reaguje na odgovarajući način.

Moje pitanje je kako da to uradim u C# a radim u VS 2008 preko smart device? Nemam predstavu kako ni logički to ispratiti... Pomoglo bi mi i usmeravanje na neke stranice ili uopšte način na koji se to može uraditi.

Hvala svima unapred na pomoći!
 
Odgovor na temu

Dusan Kondic
Programer
ZR "Parametar" Ljubovija
Ljubovija

Član broj: 49961
Poruke: 225
*.adsl-a-5.sezampro.rs.

Sajt: www.drinacoding.com


+14 Profil

icon Re: Pristup bazi servera sa uređaja preko mrežnog kabla u C#15.08.2012. u 10:05 - pre 141 meseci
Taj uređaj verovatno ima neke drajvere koje možeš da referenciraš u svom projektu i da koristiš komande koje se nalaze u tom drajveru.
Prvo bi trebao da potražiš komandu za inicijalizaciju komunikacije sa uređajem. Uređaj sigurno ima neku podrazumevanu mrežnu adresu koju je moguće izmeniti.
Proveri ovo pa da vidimo šta dalje.
Pozdrav
 
Odgovor na temu

dvoglaviorao
Komp
KoTkuće, ono što volim

Član broj: 233319
Poruke: 179



+9 Profil

icon Re: Pristup bazi servera sa uređaja preko mrežnog kabla u C#08.11.2012. u 15:58 - pre 138 meseci
Javljam se posle dužeg vremena sa konkretnim problemom. A pre svega hvala Dušane što ste se javili!

Sve vreme sam bunario po internetu i pokušavao svašta. Uspeo sam da razmenjujem poruke između servera i klijenta, što je i deo zadatka koji moram da uradim. Da ne dužim dalje, moja aplikacija treba da obezbedi razmenu poruka (sada) i glasa (kasnije) između 2 korisnika i to sve treba da ide preko servera. Ja sam za sada uspeo da napravim aplikaciju koja to radi, ali server salje poruke svim korisnicima, što trenutno zadovoljava, bitno mi je da radi. Posebno imam program koji ubacuje klijente u bazu, i tamo sve radi, a njega ću implementirati u program trenutnog servera.

Aplikacija klijenta ima 2 forme, jednu za logovanje i drugu za chat-ovanje. Sada hoću da na formi logovanja upišem ime i lozinku (a bilo je ime i ip servera) i to proveravam u bazi servera.

Aplikaciju koju sam napravio sam našao na netu, i modifikovao je za moje potrebe. Ona je u sebi imala sve što mi je trebalo, što se tiče razmenjivanja podataka. Ja sada hoći da ubacim i još jedan podatak, a to je šifra, i tu je problem. Pokušao sam sve analogijom u odnosu na izvorni program da uradim, međutim nikako da uspem.

Postovaću delove koda koji mislim da se odnose na definisanje podatka koji želim da šaljem.

Ovo je deo koda aplikacije klijenta u formi logovanja

Code:
private void btnOK_Click(object sender, EventArgs e)
        {
            strime = txtime.Text;
            strsifra = txtsifra.Text;
            try
            {
                //Using UDP sockets
                clientSocket = new Socket(AddressFamily.InterNetwork,
                    SocketType.Dgram, ProtocolType.Udp);

                //IP address of the server machine
                IPAddress ipAddress = IPAddress.Parse("127.0.0.1");
                //Server is listening on port 1000
                IPEndPoint ipEndPoint = new IPEndPoint(ipAddress, 1000);

                epServer = (EndPoint)ipEndPoint;

                Data msgSlanje = new Data();
                msgSlanje.cmdKomanda = Command.Logovanje;
                msgSlanje.strPoruka = null;
                msgSlanje.strIme = strime;
                msgSlanje.strSifra = strsifra;

                byte[] byteData = msgSlanje.ToByte();

                //Login to the server
                clientSocket.BeginSendTo(byteData, 0, byteData.Length,
                    SocketFlags.None, epServer, new AsyncCallback(OnSend), null);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "SGSclient",
                    MessageBoxButtons.OK, MessageBoxIcon.Error);
            }

        }


Ovo je deo na serveru gde sam stavio da ispiše šifru samo pored imena, da znam da je poslata

Code:
 msgSlanje .cmdKomanda = msgPrimljena .cmdKomanda ;
                msgSlanje .strIme = msgPrimljena .strIme;
                msgSlanje.strSifra = msgPrimljena.strSifra;

                switch (msgPrimljena .cmdKomanda)
                {
                    case Command .Logovanje :
                        //Kada se korisnik loguje dodajemo ga na listu klijenata

                        KlijentInfo klijentInfo = new KlijentInfo ();
                        klijentInfo.endpoint  = epPosaljilac ;
                        klijentInfo .strIme = msgPrimljena .strIme;
                        klijentInfo.strSifra = msgPrimljena.strSifra;

                        klijentiLista.Add (klijentInfo );

                        //textBox1.Text = msgPrimljena.strSifra;

                        msgSlanje .strPoruka = "<<<" + msgPrimljena .strIme + msgPrimljena .strSifra  + " se logovao >>>";
                        break ;


A ovde mislim da je možda i problem, kod ove klase za formiranje poruke za slanje i primanje, koja je naravno ista i kod servera i kod klijenta

Code:
class Data
    {
        public string strIme;       //Ime logovanog korisnika
        public string strPoruka;    //Poruka korisnka
        public string strSifra;
        public Command cmdKomanda;  //Tip komande (definisano u enum na pocetku)

        public Data()
        {
            this.cmdKomanda = Command .Null ;
            this .strIme = null ;
            this .strPoruka = null ;
            this.strSifra = null;
        }

        public Data(byte [] data)  //Konvertovanje bajta u objekat tipa bajt 
        {
            //Prva 4 bajta su za komandu
            this.cmdKomanda  = (Command)BitConverter.ToInt32(data, 0);

            //Sledeca 4 su za cuvanje duzine imena
            int imeDuzina = BitConverter.ToInt32(data, 4);

            //Sledeca 4 su za cuvanje duzine poruke
            int msgDuzina = BitConverter.ToInt32(data, 8);

            //Sledeca 4 za sifru
            int sifraDuzina = BitConverter.ToInt32(data, 12);

            //Provera da li je i me prebaceno u niz
            if (imeDuzina > 0)
                this.strIme  = Encoding.UTF8.GetString(data, 16, imeDuzina );
            else
                this.strIme = null;

            //Provera da poruke nije null
            if (msgDuzina > 0)
                this.strPoruka  = Encoding.UTF8.GetString(data, 16 + imeDuzina , msgDuzina );
            else
                this.strPoruka = null;

            if (sifraDuzina  > 0)
                this.strPoruka = Encoding.UTF8.GetString(data, 16 + imeDuzina + msgDuzina  , sifraDuzina );
            else
                this.strSifra  = null;
        }


        public byte[] ToByte() //Konvertovanje Data strukture u niz bajtova
        {
            List<byte> rezultat = new List<byte>();

            //Prva 4 za komandu
            rezultat.AddRange(BitConverter.GetBytes((int)cmdKomanda ));

            //Dodavanje duzine imena
            if (strIme  != null)
                rezultat.AddRange(BitConverter.GetBytes(strIme.Length));
            else
                rezultat.AddRange(BitConverter.GetBytes(0));

            //Duzina poruke
            if (strPoruka  != null)
                rezultat.AddRange(BitConverter.GetBytes(strPoruka.Length));
            else
                rezultat.AddRange(BitConverter.GetBytes(0));

            //Duzina sifre
            if (strSifra != null)
                rezultat.AddRange(BitConverter.GetBytes(strSifra.Length));
            else
                rezultat.AddRange(BitConverter .GetBytes (0));

            //Dodavanje imena
            if (strIme != null)
                rezultat.AddRange(Encoding.UTF8.GetBytes(strIme));

            //Dodavanje poruke u obliku niya bajtova
            if (strPoruka != null)
                rezultat.AddRange(Encoding.UTF8.GetBytes(strPoruka));

            if (strSifra != null)
                rezultat.AddRange(Encoding .UTF8 .GetBytes (strSifra ));

            return rezultat.ToArray();
        }



    }


Hvala svima puno unapred na pomoći i nadam se da nisam bio predugačak...
 
Odgovor na temu

dvoglaviorao
Komp
KoTkuće, ono što volim

Član broj: 233319
Poruke: 179



+9 Profil

icon Re: Pristup bazi servera sa uređaja preko mrežnog kabla u C#09.11.2012. u 19:34 - pre 138 meseci
Definitivno milslim da je problem u poslednjem delu koda koji sam postavio :(

Da li može neko ukratko da mi objasni kako funkcioniše "BitConverter.ToInt32(data, brojNeki);" a kako "Encoding.UTF8.GetString(data, brojNeki, nekaDuzina);". Znam da ti brojevi služe za indeksiranje u nizi, i da ide na svakih 4 bita, ali nije mi skroz jasno a ne mogu da se snađem na netu da pogledam konkretan primer... ToInt32 pretvara data u bajte i stavlja u niz na indeks brojNeki, a GetString od data pravi string čija je dužina nekaDužina i počinje na BrojNeki mestu u nizu, tako? :(

Hvala unapred.....
 
Odgovor na temu

dvoglaviorao
Komp
KoTkuće, ono što volim

Član broj: 233319
Poruke: 179



+9 Profil

icon Re: Pristup bazi servera sa uređaja preko mrežnog kabla u C#17.11.2012. u 16:19 - pre 138 meseci
Našao sam grešku, posle više od 10 dana, neverovatno kako čovek ne vidi... Vama hvala na pomoći ;) Nadam se da u buduće bar neko postuje "nemam pojma" čisto da znam da ima nekoga na forumu ;)

Code:

public Data(byte [] data)  //Konvertovanje bajta u objekat tipa bajt 
        {
            //Prva 4 bajta su za komandu
            this.cmdKomanda  = (Command)BitConverter.ToInt32(data, 0);

            //Sledeca 4 su za cuvanje duzine imena
            int imeDuzina = BitConverter.ToInt32(data, 4);

            //Sledeca 4 su za cuvanje duzine poruke
            int msgDuzina = BitConverter.ToInt32(data, 8);

            //Sledeca 4 za sifru
            int sifraDuzina = BitConverter.ToInt32(data, 12);

            //Provera da li je i me prebaceno u niz
            if (imeDuzina > 0)
                this.strIme  = Encoding.UTF8.GetString(data, 16, imeDuzina );
            else
                this.strIme = null;

            //Provera da poruke nije null
            if (msgDuzina > 0)
                this.strPoruka  = Encoding.UTF8.GetString(data, 16 + imeDuzina , msgDuzina );
            else
                this.strPoruka = null;

            if (sifraDuzina  > 0)


                Ovde ne ide strPoruka nego strSifra :D :D :D


                this.strPoruka = Encoding.UTF8.GetString(data, 16 + imeDuzina + msgDuzina  , sifraDuzina );
            else
                this.strSifra  = null;
        }
 
Odgovor na temu

dvoglaviorao
Komp
KoTkuće, ono što volim

Član broj: 233319
Poruke: 179



+9 Profil

icon Re: Pristup bazi servera sa uređaja preko mrežnog kabla u C#11.12.2012. u 16:28 - pre 137 meseci
Trema mi pomoć :(

Imam 3 forme, i na svakoj button. Klikom na svaki sam odrađuje se sledeće

Code:

            DialogResult = DialogResult.OK;
            Close();


U program.cs stoji sledeće

Code:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;

namespace WindowsFormsApplication5
{
    static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            //Application.Run(new Form1());

            Form1 f1 = new Form1();
            Form2 f2 = new Form2 ();
            Form3 f3 = new Form3 ();

            Application.Run(f1);

            if (f1.DialogResult == DialogResult.OK)

                f2.ShowDialog();
            if (f2.DialogResult == DialogResult.OK)

                f3.ShowDialog();
            if (f3.DialogResult == DialogResult.OK)
                f2.ShowDialog();
        }
    }
}


Znači klikom na button prve forme otvara se druga, klikom na drugoj otvara se treća, klikom na trećoj otvara se druga, i to radi. E u nastavku imam problem jer mi treba da mogu opet da kliknem na button druge foprme da otvori treću, a to se ne desi nego se zatvori aplikacija.

Da li neko zna u čemu može biti problem?

Hvala svima unapered na pomoći.
 
Odgovor na temu

miksi

Član broj: 5874
Poruke: 106
*.dynamic.sbb.rs.



+24 Profil

icon Re: Pristup bazi servera sa uređaja preko mrežnog kabla u C#11.12.2012. u 21:44 - pre 137 meseci
Da ne bude "forum prazan " ;) Program radi upravo onako kako si mu rekao. Main te vodi:pozove prvo f1, on se iscrta, a kad kliknes na Button, upravljanje se vrati na sledecu komandu u main-u. Na kraju, kad se izadje iz f3, prikaze se f2, a iz f2 možeš samo natrag u main koji se završava jer nema kud. Najkraće rešenje (ima i boljih koncepcija) je da dodaš još jedno dugme na formi f2 sa kodom: Form3 f3 = new Form3(); f3.ShowDialog(); odnosno da sve prelaze sa forme na formu rešavaš dugmadima, ali za to već postoje i elegantnije komponenete.
 
Odgovor na temu

dvoglaviorao
Komp
KoTkuće, ono što volim

Član broj: 233319
Poruke: 179



+9 Profil

icon Re: Pristup bazi servera sa uređaja preko mrežnog kabla u C#11.12.2012. u 22:33 - pre 137 meseci
Hvala na odgovoru!

Početnik sam u jednu ruku sa C# i generalno u programiranju, sada mi je jasno kako radi main. Mislio sam pre vašeg odgovora da se uvek vrti kod u njemu, što je totalno pogrešno, a nisam nigde ni pročitao tako nešto, ne znam odakle mi ta inf...

U prvoj formi se logujem na server, u drugoj je spisak logovanih korisnika a u trećoj private chat između 2 klijenta. Mislim da sam pokušao na način na koji ste mi vi rekli da radim, ali problem mi je pravio socket koji formiram. Nije mi nikako radilo. Ovako kako sam napisao u login formi formiram socket i samo ga u program.cs kopiram na naredne forme, recimo kada se otvori druga forma samo stavim f2.klijentSocket=f1.klijentSocket i tako radi, donekle.

Imam sada neku ideju, pokušaću pa ako bude problema eto mene opet da jadikujem.

Hvala još jednom!
 
Odgovor na temu

dvoglaviorao
Komp
KoTkuće, ono što volim

Član broj: 233319
Poruke: 179



+9 Profil

icon Re: Pristup bazi servera sa uređaja preko mrežnog kabla u C#15.12.2012. u 16:18 - pre 137 meseci
Pokušavao sam sve što je u mojoj moći ali ne mogu da rešim problem Socket-a...

Gledao sam po netu i recimo da mi ovako nešto odgovara za prelazak i vraćanje sa jedne forme na drugu.

Forme su LogIn i Klijent (recimo).

U LogIn kreiram Socket. Kada se proveri logovanje na serveru i vrati "ok" odradi se sledeće

Code:

Klijent kli = new Klijent();
kli.CopyForm = this;
kli.socket = this.socket;
this.Hide();
kli.ShowDialog();


Za sada je sve ok, lepo se prebaci socket na Klijent formu i Klijent komunicira sa serverom. Da, ovo se nalazi u Klijent formi

Code:

Private Form privform;
Public Form CopyForm
{
     get {return privform;}
     set {privform = value;}
}


I na mestu gde se vracam na LogIn formu

Code:

socket.Close(); //greška je ista i bez ovoga
copyform.visible=true;  //ili Show();
this.Close();


Ali kada se vratim na LogIn formu izbaci mi sledeće

Citat:
The Undo operation encountered a context that is different from what was applied in the corresponding Set operation. The possible cause is that a context was Set on the thread and not reverted(undone).


Polušao sam sa par verzija prelaženja sa jedne forme na drugu i svaka je izbacivala ovu grešku. Na netu sam našao da je to greška u Framework-u, ali sve je bilo vezano za (mislim) verzije pre 2.0.

Nisam jedino pokušao sa MDI jer mislim da to nije pravo što meni odgovara.

Rešenja nemam, pokušao sam na najjednostavnije načine da kreiram Socket na LogIn formi, kada se izvrši uspešno logovanje na server da zatvorim socket, pa ga opet formiram na Klijent formi (i zatvorim kada se treba vratiti na LogIn formu )ali tako neće nikako da radi, dok sa kopširanjem socket veze kao što sam gore naveo radi...

Ima li neko ideju kako da rešim ovo, bilo kako, ili sa kopiranjem socketa ili formiranjem novog svaki put...
 
Odgovor na temu

dvoglaviorao
Komp
KoTkuće, ono što volim

Član broj: 233319
Poruke: 179



+9 Profil

icon Re: Pristup bazi servera sa uređaja preko mrežnog kabla u C#24.12.2012. u 11:58 - pre 137 meseci
Ako će nekome značiti, ovo što radim mi ne donosi nikakve novčane koristi, ovo mi je za master rad... Na žalost, posla za robotičare u Srbiji nema pa nisam ni završio fax kako treba a moram da se prekvalifikujem, zato radim u C# master rad, da naučim nešto...

Hvala na razumevanju!
 
Odgovor na temu

dvoglaviorao
Komp
KoTkuće, ono što volim

Član broj: 233319
Poruke: 179



+9 Profil

icon Re: Pristup bazi servera sa uređaja preko mrežnog kabla u C#30.01.2013. u 11:07 - pre 135 meseci
Kada debagujem aplikaciju na kompu i pokrenem .exe fajl sve radi kako treba, a kada pokrenem aplikaciju na uređaju sa WinCE javlja mi sledeću grešku

Citat:
The IAsyncResult object was not returned from the corresponding asynchronous method on this class


Pokušao sam sa ovim rešenjem međutim ne pomaže

LINK

Kada umesto BeginSendTo i BeginRecieveFrom metoda iskoristim SendTo i RecieveFrom sve funkcioniše, ali ne radi kako treba jer onda ne mogu da osluškujem za nove poruke jer je u pitanju Klient-Server aplikacija.

Recimo klikom na Button1 očitam tekst sa textbox-a spremim ga za slanje i pošaljem ovako nekako

Code:
 
//spremanje text-a za slanje
Socket.BeginSendTo(byteData, 0, byteData.Length, SocketFlags.None, 
                    epServer , new AsyncCallback(SlanjePodataka ), null);

byteData = new byte[1024];

Socket.BeginReceiveFrom(byteData, 0, byteData.Length, SocketFlags.None,
                    ref epServer, new AsyncCallback(PrimanjePodataka), null);

Private void PrimanjePadataka(IAsyncResult ar)
{
Socket.EndReceive(ar);

//obrađivanje podataka

Socket.BeginReceiveFrom(byteData, 0, byteData.Length, SocketFlags.None,
                     ref epServer, new AsyncCallback(PrimanjePodataka), null); //i ovo ga vrti u krug da osluškuje
}



Da li se neko susreo sa sličnim problemom?

Hvala unapred!

[Ovu poruku je menjao dvoglaviorao dana 30.01.2013. u 12:21 GMT+1]

[Ovu poruku je menjao dvoglaviorao dana 30.01.2013. u 12:22 GMT+1]
 
Odgovor na temu

[es] :: .NET :: .NET Desktop razvoj :: Pristup bazi servera sa uređaja preko mrežnog kabla u C#

[ Pregleda: 2540 | Odgovora: 10 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.