Socket发送图片失真
做了个用服务端用来接收图片,功能是有了,但是图片失真的厉害,请高手帮忙看下
监听到以后,新线程中的处理方式如下:
Private Sub GetInfomation(ByVal ob As Object)
'接收并处理信息
'信息从OBJECT中还原
Dim cl As st = CType(ob, st)
Dim cn As Socket = cl.sk
'Dim ipee As IPEndPoint = cl.ipe
'Dim ip As String = ipee.Address.ToString
Dim buffer(1024) As Byte
cn.Receive(buffer, buffer.Length, SocketFlags.None)
Dim sd() As String = System.Text.Encoding.ASCII.GetString(buffer).Split("-")
'第一次接受获取文件的相关信息
Dim fname As String = sd(0) '文件名
Dim flen_ As String = sd(1)
Dim blen As Integer = Convert.ToInt32(flen_) '文件体长度
Dim fhead As String = fname + "-" + flen_ + "-"
Dim tem() As Byte = Encoding.ASCII.GetBytes(fhead)
Dim hlen As Integer = tem.Length
Dim tlen As Integer = blen + hlen '信息总长
'定义新数组接收图片文件
Dim fbuffer(tlen) As Byte
'汇总第一次接收的信息
For i As Integer = 0 To (1024 - hlen - 1)
fbuffer(i) = buffer(i + hlen)
Next
'汇总后续接收的信息,每次1024个长度
Dim reclen As Integer = 1024
Dim stapoint As Integer = 1024 - hlen
'Dim reslen As Integer = tlen - reclen
Dim _gon As Boolean = True
While (_gon)
If (tlen - reclen) > 1024 Then
'接收过程中
Dim temm(1024) As Byte
cn.Receive(temm, temm.Length, SocketFlags.None)
For i As Integer = 0 To temm.Length - 1
fbuffer(i + stapoint) = temm(i)
Next
reclen += 1024
stapoint += 1024
Else
'最后一次接收
Dim temm(tlen - reclen) As Byte
cn.Receive(temm, temm.Length, SocketFlags.None)
For i As Integer = 0 To temm.Length - 1
fbuffer(i + stapoint) = temm(i)
Next
_gon = False
End If
End While
'接收到信息传入公共数组
Me.pb = fbuffer
Me.run = True
End Sub