C# - FTP kapcsolódás és fájl küldés

C# - FTP kapcsolódás és fájl küldés
2011-06-29T20:11:22+02:00
2011-06-30T15:00:05+02:00
2022-11-22T08:25:40+01:00
chris0117
Sziasztok!

Olyan kérdésem lenne a C# ben fejlesztő gurukhoz, hogy írtam egy Smart Device alkalmazást Windows Mobile 6ra. Egy gombra kattintva kapcsolódik egy FTP hez OpenNETCF -vel, majd kiküld egy fájlt a belső tárolójáról.

A kérdés ott van, ha meghívom az FTP kapcsolódás függvényét, akkor az elkezd kommunikálni a szerverrel, de a program tovább fut, és hibába ütközik a feltöltés, mert még nem autentikált a progi.

Próbálkoztam késleltetéssel, de az az egész működést leállította a kapcsolódást is.

Szívesen fogadok bárminemű ötlet / tanácsot? Én sajnos nem fejlesztek C-ben.

Íme a kód:
(a panel1 en van egy gomb amivel kiküldi a progi a fájlt, de várni kell amíg autentikál, mert ha nem várok, erroral megszakad a futás)

private void button2_Click(object sender, EventArgs e) { m_ftp_Connect(); System.Threading.Thread.Sleep(2000); panel1.Visible = true; } private void m_ftp_Connect() { OnResponse("Connecting"); m_ftp = new FTP("xxx"); m_ftp.ResponseReceived += new FTPResponseHandler(m_ftp_ResponseReceived); m_ftp.Connected += new FTPConnectedHandler(m_ftp_Connected); m_ftp.BeginConnect("xx", "yy"); } void m_ftp_Connected(FTP source) { OnResponse("Connected."); } void m_ftp_ResponseReceived(FTP source, FTPResponse Response) { OnResponse(Response.Text); } private void OnResponse(string response) { if (this.InvokeRequired) { this.Invoke(new StringDelegate(OnResponse), new object[] { response }); return; } }
Mutasd a teljes hozzászólást!
Vagy a m_ftp_Connected-ből indítsad el a feltöltést magát, vagy a várakoztatást ne System.Threading.Thread.Sleep(2000);-vel csináld, mert ez felfüggeszti a file futását, hanem használj időzítő komponenst. Ez esetben a m_ftp_Connected-ben állíts be egy globális változót mondjuk true-ra és az időzítőből meghívott feltöltő kód pedig ennek a változónak az értékét ellenőrizze és ha az true, akkor indítsa a feltöltést, ellenkező esetben várjon még 1 másodprecet.

Egyébként miért nem a .net sztenderd ftpwebrequest osztályát használod?
Mutasd a teljes hozzászólást!

  • A kérdés ott van, ha meghívom az FTP kapcsolódás függvényét, akkor az elkezd kommunikálni a szerverrel, de a program tovább fut, és hibába ütközik a feltöltés, mert még nem autentikált a progi.


    És hol van itt a kódban a feltöltés?
    Gondolom külön gomb lenne hozzá és csak akkor indul ha kattintasz rá.. vagy nem?


    Mutasd a teljes hozzászólást!
  • igen... külön gomb van rá


    private void button4_Click(object sender, EventArgs e) { if (m_ftp.IsConnected) { button3.Enabled = false; button4.Enabled = false; FileStream stream = File.OpenRead("Vonalkod/vonalkod.txt"); m_ftp.SendFile(stream, fileName); stream.Close(); m_ftp.Disconnect(); } else { MessageBox.Show("Nincs kapcsolat!"); } }

    így a felhasználó egész addig nem tudja elküldeni és nincs kapcsolatot kap, amíg nem autentikál. először egymás alatt volt a progi úgy tök halál volt, így legalább némiképp ki van küszöbölve, de ez csak hekk, és nem valami szép megoldás. Ezt egy lépésben kellene megtennie.

    Az lenne a legszebb, mikor rányom a gombra, kapcsolódik feltölti és zárja a kapcsolatot. (és persze bevárja egymást mindig a folyamat és csak akkor lép tovább ha kész) Az lenne a legszebb megoldás.
    Mutasd a teljes hozzászólást!
  • Vagy a m_ftp_Connected-ből indítsad el a feltöltést magát, vagy a várakoztatást ne System.Threading.Thread.Sleep(2000);-vel csináld, mert ez felfüggeszti a file futását, hanem használj időzítő komponenst. Ez esetben a m_ftp_Connected-ben állíts be egy globális változót mondjuk true-ra és az időzítőből meghívott feltöltő kód pedig ennek a változónak az értékét ellenőrizze és ha az true, akkor indítsa a feltöltést, ellenkező esetben várjon még 1 másodprecet.

    Egyébként miért nem a .net sztenderd ftpwebrequest osztályát használod?
    Mutasd a teljes hozzászólást!
  • m_ftp_Connected()-be tedd át a panel1.Visible = true;-t (gondolom ezen van button4) a Sleep-et meg dobd ki.
    Mutasd a teljes hozzászólást!

  • Egyébként miért nem a .net sztenderd ftpwebrequest osztályát használod?


    Próbálta, csak nem működik, mert Windows Mobile 6-hoz fejleszt és a .NET Compact Framework-ben nincsen meg ez az osztály sajnos.
    Mindenhol ezt az OpenNETCF -et ajánlották, ami még más lehetőség lenne az többnyire fizetős.

    Itt vannak az előzmények:
    http://prog.hu/tudastar/136462/C-FTP+fajl+feltoltes.html
    Mutasd a teljes hozzászólást!
  • Köszönöm a válaszokat előre is, viszont lenne egy kérdés.


    várjon még 1 másodprecet


    de mivel? a feltétel megvan. a kérdés mivel várakoztatok, ha nem ezzel: System.Threading.Thread.Sleep(2000);


    sajnos m_ftp_Connected() be tudok semmit sem tenni, mert kifagy. :( vélhetően ez küldi a válaszokat oda vissza az ftp és a progi között, és az nem az.
    Mutasd a teljes hozzászólást!
  • Szia, használd a Timer osztályt.
    Mutasd a teljes hozzászólást!
  • Sikerült némi utánaolvasás és egy példa script átalakítása után időzítővel megoldani.

    Külön using System.Timer osztály nem létezik, dedikálva van egy másikban a szükséges megoldás.

    Köszönöm a hozzászólásokat, viszont a pont osztással bajban vagyok...
    Mutasd a teljes hozzászólást!
  • Sikerült némi utánaolvasás és egy példa script átalakítása után időzítővel megoldani.





    Külön using System.Timer osztály nem létezik, dedikálva van egy másikban a szükséges megoldás.


    System.Windows.Forms.Timer


    Köszönöm a hozzászólásokat, viszont a pont osztással bajban vagyok...


    Ezt már Árnyék írta előbb, hogy használd a Timer komponenst.
    Amit ugye a fentebb írt osztály ír le...
    Őt illeti a pont.
    Mutasd a teljes hozzászólást!
  • Igen, én is úgy gondolom hogy Árnyéké a pont.
    Mutasd a teljes hozzászólást!
  • Köszönöm szépen Mindenkinek!
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd