Imam problema sa socketima u VB.NET-u. Ovako:
Radim projekt na kojem imam 2 aplikacije, jedna se izvodi na kompjuteru(WinXP,2k) a druga se izvodi na ručnom terminalu (WIN CE). Moja pitanja će biti uz kod:
Glavni dio za primanje na WIN CE djelu:
Code:
If listener.Pending Then
Application.DoEvents()
RaiseEvent status("Pending OK")
Application.DoEvents()
Try
Dim socket As Socket = listener.AcceptSocket
RaiseEvent status("SOCKET prihvacen")
Dim rBuffer(socket.Available) As Byte ' U velikom frameworku, ima jedno svojstvo (receivedBufferSize) u ovom Compact frameworku tog svojstva nema, pa ja nemogu otkrit veličinu buffera, ideje?
Do
socket.Receive(rBuffer) 'Za ovaj dio treba dinamički mijenjat veličinu polja (redim preserve) ali kod većih fajlova to je extremno sporo, ima koji bolji način?
Loop While socket.Available > 0
RaiseEvent status("Velicina fajla :" & rBuffer.Length)
Application.DoEvents()
spremiFile(rBuffer) ' U ovoj funkciju uzimam cijeli array bytova i spremam u neki fajl
uspjeh = True
Catch ex As Exception
Application.DoEvents()
RaiseEvent status("ERR:" & ex.Message)
Application.DoEvents()
abort = True
End Try
End If
Dio za slanje fajlova (WinXP, cijeli framework) :
Dim tcp As New TcpClient
Dim repeatCounter As Integer
Dim i As Integer
For i = 0 To repeatCounter
Try
tcp.Connect(ipAdresa, port.ToString)
Dim nStream As NetworkStream = tcp.GetStream
If nStream.CanWrite Then
nStream.Write(data, 0, data.Length) ' Data su podatci koje šaljem... znam da i tu ima bolji na koji se to slanje izvodi... Ideje
Else
RaiseEvent greskaPriDownloadu("Greška pri downloadu")
tcp.Close()
End If
tcp.Close()
Return True
Catch ex As System.Net.Sockets.SocketException
repeatCounter += 1 ' Ako se ne uspije spojit trebalo bi 3 puta ponavljat, ali na ovj način neradi. (jer kad se ne uspije spojit on izaci socket exception i kaže da ciljni uređaj nije odgovorio u tih nekoliko sekundi...
Catch ex As Exception
errHandler(ex)
tcp.Close()
Return False
End Try
If repeatCounter = 2 Then Return False
Next
End Function
If listener.Pending Then
Application.DoEvents()
RaiseEvent status("Pending OK")
Application.DoEvents()
Try
Dim socket As Socket = listener.AcceptSocket
RaiseEvent status("SOCKET prihvacen")
Dim rBuffer(socket.Available) As Byte ' U velikom frameworku, ima jedno svojstvo (receivedBufferSize) u ovom Compact frameworku tog svojstva nema, pa ja nemogu otkrit veličinu buffera, ideje?
Do
socket.Receive(rBuffer) 'Za ovaj dio treba dinamički mijenjat veličinu polja (redim preserve) ali kod većih fajlova to je extremno sporo, ima koji bolji način?
Loop While socket.Available > 0
RaiseEvent status("Velicina fajla :" & rBuffer.Length)
Application.DoEvents()
spremiFile(rBuffer) ' U ovoj funkciju uzimam cijeli array bytova i spremam u neki fajl
uspjeh = True
Catch ex As Exception
Application.DoEvents()
RaiseEvent status("ERR:" & ex.Message)
Application.DoEvents()
abort = True
End Try
End If
Dio za slanje fajlova (WinXP, cijeli framework) :
Dim tcp As New TcpClient
Dim repeatCounter As Integer
Dim i As Integer
For i = 0 To repeatCounter
Try
tcp.Connect(ipAdresa, port.ToString)
Dim nStream As NetworkStream = tcp.GetStream
If nStream.CanWrite Then
nStream.Write(data, 0, data.Length) ' Data su podatci koje šaljem... znam da i tu ima bolji na koji se to slanje izvodi... Ideje
Else
RaiseEvent greskaPriDownloadu("Greška pri downloadu")
tcp.Close()
End If
tcp.Close()
Return True
Catch ex As System.Net.Sockets.SocketException
repeatCounter += 1 ' Ako se ne uspije spojit trebalo bi 3 puta ponavljat, ali na ovj način neradi. (jer kad se ne uspije spojit on izaci socket exception i kaže da ciljni uređaj nije odgovorio u tih nekoliko sekundi...
Catch ex As Exception
errHandler(ex)
tcp.Close()
Return False
End Try
If repeatCounter = 2 Then Return False
Next
End Function
U biti treba mi neki bolji način za primanje fajlova i slanje, jel ovo je i sporo i nesigurno...
Bilo kakve ideje, sugestije dobrodošle.
Hvala!!
[Shadowed: dodati code tagovi.]
[Ovu poruku je menjao Shadowed dana 23.01.2008. u 10:35 GMT+1]