求教大神。問題如下:
程式并沒有很復雜,采用異步SCOKET收發資訊,沒有封裝訊息。只是在發送資料進行了簡單組裝
接收資料后拆解分析。這個體系在用于推送文本指令,都沒問題,包括傳輸文本,XML檔案都沒有(大的)問題。
Public Function __獲取檔案緩沖(ByVal strFileName As String, ByVal nPartLen As Integer, ByVal nPartNum As Integer, ByRef nReadLenth As Integer, ByRef nIsEof As Integer) As String
Dim strFile As String = __str軟體目錄 & "\Update\" & strFileName
Dim mbyte(nPartLen - 1) As Byte
Dim strbuff As String
nIsEof = 0
Dim nReadPosition As Integer = nPartNum * nPartLen '檔案位置為請求的 分部* 分部大小
Dim fs As FileStream = File.OpenRead(strFile)
fs.Position = nReadPosition
nReadLenth = fs.Read(mbyte, 0, nPartLen)
strbuff = Encoding.Default.GetString(mbyte)
If nReadLenth < nPartLen Then nIsEof = 1 '如果讀取長度小于分部大小,即為檔案末尾
fs.Close()
Return strbuff
End Function
Sub 發送檔案緩沖()
'檔案傳輸.@FileName@Sectorlen@part1
Dim strFileName = msg(1)
Dim nIsEof As Integer = 0
Dim nReadLenth As Integer = 0
Dim strbuff As String = __獲取檔案緩沖(strFileName, msg(2), msg(3), nReadLenth, nIsEof)
Dim strb As New StringBuilder
strb.Append("檔案傳輸.")
strb.Append(__資料分割符1)
strb.Append("-2") '此項無意義
strb.Append(__資料分割符1)
strb.Append(msg(3)) '分段索引
strb.Append(__資料分割符1)
strb.Append(nReadLenth) '讀取的長度
strb.Append(__資料分割符1)
strb.Append(strbuff)
strb.Append(__資料分割符1)
strb.Append(nIsEof)
Call 發送服務器資訊( )
Return 1
End sub
’這里是服務器發送訊息封裝程序,對資料進行簡單的組裝
Sub 發送資訊(ByVal CtlCmd As String, ByVal strParm As String, ByVal clientsocket As Socket)
Dim strMsg As New StringBuilder
'strMsg.Append(__指令開始符)
strMsg.Append(CtlCmd)
strMsg.Append(__資料分割符0)
strMsg.Append(Format(DateTime.Now, "yyyyMMdd HHmmss"))
strMsg.Append("parm:[")
strMsg.Append(strParm)
strMsg.Append(__指令結束符)
If clientsocket.Connected Then
Try
clientsocket.Send(System.Text.Encoding.Default.GetBytes(strMsg.ToString))
'SendDebugMsg(strMsg.ToString)
Catch ex As Exception
RaiseEvent OnError(ex)
End Try
Else
clientsocket.Close()
End If
End Sub
=============
SOCKET 的send 和recive緩沖區都是byte(1024) 檔案傳輸 的分部大小 最初是512
實際上在傳輸XML檔案的程序中,文本檔案會出現莫名其妙的亂碼,通常出現傳輸中的末尾,中文雙字符被切斷,在我修改“分部大小=400”后 勉強解決問題,似乎問題消失了,至少我設計目標的那幾個檔案正常。
現在我將這個功能擴展到傳輸EXE檔案或者其他功能性檔案,就不正常了。傳回的檔案大小正常,但是已經打不開了。
請教問題出在哪里?
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/111089.html
標籤:網絡通信
