TCP - posílání textu   zodpovězená otázka

VB.NET

Dobrý den, chtěl bych se zeptat jak přes TCP poslat text. Konkétně mám richtextbox1 a richtextbox2. Když kliknu na mé vytvořené tlačítko "Odeslat", chci aby se mi odeslal text richtextboxu1 do richtextboxu2 připojeného počítače. Už jsem četl články o TCP spojení a posílání dat, ale bohužel jsem zmaten, jelikož potřebuji poslat text a ne grafiku. A jinak jsem taky koukal na ostatní dotazy v diskuzích a také je nechápu. Mám horší mozek pro pochopení :D Ale to založení, připojení a odpojení od TCP jak bylo v článku, už mám udělané a funguje jak má. Teď tedy potřebuji jen poradit s tím textem. Věřím, že to neni nic těžkého.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Pokud to máte podle zdejšího článku, tak jako já pak jsem to řešil následovně: (asi jen to hlavní)

Sub Pripojit(ByVal at As System.IAsyncResult)
Try
            tcp.EndConnect(at) ' dokončíme připojování
            networkStream = tcp.GetStream()    ' stream pro přenos dat

            networkStream.BeginRead(Buffer, 0, BUFFER_SIZE, AddressOf CtiData, Nothing) ' začínáme asynchronně číst 
            mame_spojeni() ' jsme připojeni - odblokujeme tlačítko "Odpojit"
        Catch e As ObjectDisposedException
            ' proběhlo stornování připojení, ne chyba
        Catch
            ' proběhla neočekávaná chyba
            mame_chybu_spojeni()
            'OdemkniPolozky() ' nakonec odemkneme znovu položky v menu na připojení a vytvoření spojení
        End Try
end Sub

Sub CtiData(ByVal at As System.IAsyncResult)
        Try
            Dim prijato As Integer = networkStream.EndRead(at) ' dokončíme čtení dat a zjistíme kolik dat přišlo 
            If prijato < 1 Then Throw New Exception() ' spojení bylo ukončeno (přichází 0B dat) 
            ' >> ZDE BUDE KOD NA ZPRACOVANI PRICHOZICH DAT << 
            data_read = data_read & System.Text.Encoding.Default.GetString(Buffer, 0, prijato)
            zapis_do_richTextBox (data_read)
            ' >> KONEC KODU NA ZPRACOVANI PRICHOZICH DAT << 
            tcp.GetStream.BeginRead(Buffer, 0, BUFFER_SIZE, AddressOf CtiData, Nothing)          ' přečetli jsme všechny příchozí data, proto budeme čekat až přijdou další 
        Catch e As ObjectDisposedException
            ' proběhlo zrušení spojení 
        Catch e As Exception
            'MsgBox(e.Message)
            ' nastala chyba, spojení je ukončeno 
            mame_odpojeni() ' nakonec odemkneme znovu položky v menu na připojení a vytvoření spojení 
        End Try
    End Sub

obráceně je to skoro stejně


Try
   Dim bfr(delka_dat_z_RichTextBoxu1.Length - 1) As Byte ' Vytvoříme pole bytu
   bfr = System.Text.Encoding.Default.GetBytes(delka_dat_z_RichTextBoxu1) ' převedeme RichTextBox1 na pole bytů 
   networkStream.Write(bfr, 0, bfr.Length) ' odeslat 
  Catch ex As Exception
   tcp.Close()
End Try

Snad to pomůže. Jinak je jedno co je to za data. V každym případě je to jen řada Bytů.

nahlásit spamnahlásit spam 2 / 2 odpovědětodpovědět

JJ díky,už jsem o krok dál, ale nechápu jak myslíš to obráceně ? A kam mám ten kod napsat ? A jinak to data_read bude v mém případě richtextbox1.text ? Sorry, že to tak nechápu, stačí mi to sem dopsat co to znamená, a já se s tím už nějak poperu. Dík

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Vždy máš server a clienta. Server i client čeká na příchozí data.

networkStream = tcp.GetStream()

Měli by čekat v samostatném vlákně, jinak se nepohneš. To je ten horní příklad.

Ale oba dva musí mít možnost ty data odeslat. A to je to obráceně a může to být třeba událost clik.

Private Sub odeslat_data(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles odesli.Click
 Try
   Dim bfr(delka_dat_z_RichTextBoxu1.Length - 1) As Byte ' Vytvoříme pole bytu
   bfr = System.Text.Encoding.Default.GetBytes(delka_dat_z_RichTextBoxu1) ' převedeme RichTextBox1 na pole bytů 
   networkStream.Write(bfr, 0, bfr.Length) ' odeslat 
  Catch ex As Exception
   tcp.Close()
End Try
End Sub

Po kliknutí na Buton "Odesli" se odešle RichTextBox1 a na drudé straně se přijme a pokračuje

networkStream.BeginRead(Buffer, 0, BUFFER_SIZE, AddressOf CtiData, Nothing) ' začínáme asynchronně číst 

a pokračujeme částí Cti_data kde to přijmuté rozeberem.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Jo super ! funguje to. Tak ještě jednou dík a sorry za otravné otázky :D

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback