22. oktober 2013 - 22:08Der er
3 kommentarer og 1 løsning
Hjælp til konverting fra TCPClient til DataWriter.
Hej,
Jeg har fået til opgave og konvertere et ældre program jeg har lavet til et Windows Store/WinRT/Win8 app. Og i den forbindelse har jeg lidt udfordringer da mit problem var lavet med TCPClient. Og denne klasse ikke eksistere i disse apps. Jeg er derfor nød til at skifte dem ud til DataWriter/Reader (SocketStream) og det er desværre ikke helt uden problemer.
Gammel Kode: Public Function SendReceive(ByVal SendCommand As String) Dim returnCode As String = Nothing
Try Dim TcpClient As New TcpClient TcpClient.Connect(strIPAddress, strPort) Dim NetworkStream As NetworkStream = TcpClient.GetStream
Dim outNumBytes As Byte() = Encoding.ASCII.GetBytes(SendCommand)
Ja og jeg fik ikke lige smidt det ind som jeg har fået lavet. Da jeg sad ved en tablet og ikke havde materielet som jeg var i gang med. men her er mit nuværende:
Så virker den kun nogen gange og andre gange laver den en fejl med "En oprettet forbindelse blev afbrudt af softwaren på værtscomputeren." andre gange dropper den helt socketen og skal resette den igen.
Jeg har også lavet den med FlushAsync uden held. Try If SendCommand IsNot Nothing Then status.Text = "Forsøger at sende data ..."
Efter noget tids tænken og prøven frem kom jeg jo til at se at den gamle kode jo også åbner og lukker TCPClient Streamen ved hver Write/Read cyklus. Det har jeg efterlignet med StreamSocket også virker det også.
Men er der er en måde man kunne gøre det på så den ikke hele tiden skal connecte -> sende og modtage -> Disconnecte og forfra hver gang. men at man holder streamen åben så man blot skal sende og modtage sålænge der er forbindelse.
koden: Private Async Function SendReceive(SendCommand As String) As Task(Of String) Dim srvTimeout As New CancellationTokenSource() ClientSocket = New StreamSocket() Dim returnData As String = Nothing
'status.Text = "Tilsluttet til " & srvHost Catch ex As Exception Select Case ex.HResult Case -2146233029 returnData = "Forbindelse mislykkedes: Timeout" Case Else returnData = "Forbindelse mislykkedes: " & ex.Message End Select
ClientSocket.Dispose() ClientSocket = Nothing
Return returnData Exit Function End Try
Try If SendCommand IsNot Nothing Then 'status.Text = "Forsøger at sende data ..."
Dim StreamWriter As New DataWriter(ClientSocket.OutputStream)
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.