Zdravím, narazil jsem na problém při uzavírání TCP/IP spojení. Takže: -mám jednu aplikaci která beží na PC a naslouchá na určitém portu (pouze naslouchá nic neposílá) -druhá aplikace beží na mobilu (jen posílá nic nepříjmá) Pokud se mobilem připojím k PC a spojení zavřu aniž bych předtím odeslal nějáká data, hostitelská aplikace (na PC) na to správně zareaguje. Ale pokud se připojím, odešlu nějáká data a pak chci spojení zavřít (tcp.close) hostitelská aplikace si toho nevšimne. Ale pokud na mobilu aplikaci ukončím uplně (bez odpojování) hostitelská aplikace na to zase správně zareaguje. Vůbec to nechápu... Přidávám kód, je to okopírované z kreslící tabule a lehce upravené pro moje potřeby:
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)
'============ KOD NA ZPRACOVANI PRICHOZICH DAT ============================
'text_buffer += System.Text.Encoding.ASCII.GetString(Buffer, 0, prijato) ' přidání přijatých dat
text_buffer += System.Text.Encoding.UTF8.GetString(Buffer, 0, prijato)
Do While text_buffer.Contains(";") ' dokud máme příkazy, které můžeme parsovat
Dim poziceStredniku As Integer = text_buffer.IndexOf(";") ' najdeme ukončovací znak
Dim prikaz As String = text_buffer.Substring(0, poziceStredniku) ' přečteme příkaz až ke středníku
text_buffer = text_buffer.Substring(poziceStredniku + 1) ' a prikaz odřízneme
ProvedPrikaz(prikaz) ' pošleme příkaz ke zpracování
Loop
'=========================================================================
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
lblStatus.Text = "Spojení ukončeno klientem" ' informujeme uživatele
Me.NotifyIcon1.Text = "Aplikace běží" & vbLf & "Stav aplikace: OFF LINE"
zalozitSpojeni()
End Try
End Sub
Zjistil jsem, že pokud před odpojením odešlu nějáká data, tato procedura vůbec neproběhne. Klientská část by měla být v pořádku TCP.close se zavolá v obou případech.
|