为什么winsock发送文件只能在10k以内。大于10k就发不出去了!怎么处理!!苦哇!!
发送代码:
Public Sub SendMail(strFrom As String, strTo As String, strSubject As String, strBody As TextBox, wsk As Winsock, Optional strAttachName As String)
Dim intcount As Integer
Wait 0.5
wsk.SendData "EHLO " & wsk.LocalIP & vbCrLf
wsk.SendData "MAIL FROM:" & strFrom & vbCrLf
Wait 0.5
If strTo <> "" Then
wsk.SendData "RCPT TO:" & strTo & vbCrLf '发送地址
End If
wsk.SendData "DATA" & vbCrLf
Wait 0.5
If strSubject = "" Then
strSubject = "no subject"
End If
wsk.SendData "MIME-Version: 1.0" & vbCrLf
wsk.SendData "From: " & ExtractArgument(1, strFrom, "@") & " <" & strFrom & ">" & vbCrLf
wsk.SendData "To: <" & strTo & ">" & vbCrLf
wsk.SendData "Subject: " & strSubject & vbCrLf
wsk.SendData "Content-Type: multipart/mixed;" & vbCrLf
wsk.SendData " boundary=Unique-Boundary" & vbCrLf & vbCrLf
wsk.SendData " [ Random garbage here ]" & vbCrLf & vbCrLf
wsk.SendData vbCrLf & "--Unique-Boundary" & vbCrLf
wsk.SendData "Content-type: text/plain" & vbCrLf & vbCrLf '; charset=US-ASCII
wsk.SendData strBody.Text & vbCrLf & vbCrLf
If LTrim(RTrim(strAttachName)) <> "" Then
Dim pth As String
pth = strAttachName
For intcount = Len(strAttachName) To 1 Step -1
If Mid(strAttachName, intcount, 1) = "\" Then
strAttachName = Mid(strAttachName, intcount + 1)
Exit For
End If
Next intcount
Dim myfile() As Byte Dim i As Long
Open pth For Binary As #1 i = 0 Do While Not EOF(1) i = i + 1 ReDim Preserve myfile(1 To i) Get #1, , myfile(i) Loop Close #1 wsk.SendData "--Unique-Boundary" & vbCrLf
wsk.SendData "Content-Type: multipart/parallel; boundary=Unique-Boundary-2" & vbCrLf & vbCrLf
wsk.SendData "--Unique-Boundary-2" & vbCrLf
wsk.SendData "Content-Type: application/octet-stream;" & vbCrLf
wsk.SendData " name=" & strAttachName & vbCrLf
'wsk.SendData "Content-Transfer-Encoding: base64" & vbCrLf
wsk.SendData "Content-Disposition: inline;" & vbCrLf
wsk.SendData " filename=" & strAttachName & vbCrLf & vbCrLf
wsk.SendData myfile
DoEvents
'Dim p
' Do While wsk.State <> 0
' p = DoEvents()
' Loop
End If
wsk.SendData vbCrLf & "." & vbCrLf '#.$
Wait 0.5
wsk.SendData "QUIT" & vbCrLf
Wait 0.5 wsk.Close
End Sub
为什么这样???怎么修改!!!:-(
发送代码:
Public Sub SendMail(strFrom As String, strTo As String, strSubject As String, strBody As TextBox, wsk As Winsock, Optional strAttachName As String)
Dim intcount As Integer
Wait 0.5
wsk.SendData "EHLO " & wsk.LocalIP & vbCrLf
wsk.SendData "MAIL FROM:" & strFrom & vbCrLf
Wait 0.5
If strTo <> "" Then
wsk.SendData "RCPT TO:" & strTo & vbCrLf '发送地址
End If
wsk.SendData "DATA" & vbCrLf
Wait 0.5
If strSubject = "" Then
strSubject = "no subject"
End If
wsk.SendData "MIME-Version: 1.0" & vbCrLf
wsk.SendData "From: " & ExtractArgument(1, strFrom, "@") & " <" & strFrom & ">" & vbCrLf
wsk.SendData "To: <" & strTo & ">" & vbCrLf
wsk.SendData "Subject: " & strSubject & vbCrLf
wsk.SendData "Content-Type: multipart/mixed;" & vbCrLf
wsk.SendData " boundary=Unique-Boundary" & vbCrLf & vbCrLf
wsk.SendData " [ Random garbage here ]" & vbCrLf & vbCrLf
wsk.SendData vbCrLf & "--Unique-Boundary" & vbCrLf
wsk.SendData "Content-type: text/plain" & vbCrLf & vbCrLf '; charset=US-ASCII
wsk.SendData strBody.Text & vbCrLf & vbCrLf
If LTrim(RTrim(strAttachName)) <> "" Then
Dim pth As String
pth = strAttachName
For intcount = Len(strAttachName) To 1 Step -1
If Mid(strAttachName, intcount, 1) = "\" Then
strAttachName = Mid(strAttachName, intcount + 1)
Exit For
End If
Next intcount
Dim myfile() As Byte Dim i As Long
Open pth For Binary As #1 i = 0 Do While Not EOF(1) i = i + 1 ReDim Preserve myfile(1 To i) Get #1, , myfile(i) Loop Close #1 wsk.SendData "--Unique-Boundary" & vbCrLf
wsk.SendData "Content-Type: multipart/parallel; boundary=Unique-Boundary-2" & vbCrLf & vbCrLf
wsk.SendData "--Unique-Boundary-2" & vbCrLf
wsk.SendData "Content-Type: application/octet-stream;" & vbCrLf
wsk.SendData " name=" & strAttachName & vbCrLf
'wsk.SendData "Content-Transfer-Encoding: base64" & vbCrLf
wsk.SendData "Content-Disposition: inline;" & vbCrLf
wsk.SendData " filename=" & strAttachName & vbCrLf & vbCrLf
wsk.SendData myfile
DoEvents
'Dim p
' Do While wsk.State <> 0
' p = DoEvents()
' Loop
End If
wsk.SendData vbCrLf & "." & vbCrLf '#.$
Wait 0.5
wsk.SendData "QUIT" & vbCrLf
Wait 0.5 wsk.Close
End Sub
为什么这样???怎么修改!!!:-(
'This is where we send the file data
Dim ChunkSize As Long
Dim Chunk() As Byte
Dim arrHash() As Byte
If wsSend.State <> sckConnected Then Exit Function
ChunkSize = FT_BUFFER_SIZE '自己定
If FileNum = 0 Then 'No data has been sent yet, open the file
FileNum = FreeFile
Open filename For Binary As #FileNum
End If
'determine chunk size
If (LOF(FileNum) - Loc(FileNum)) < FT_BUFFER_SIZE Then _
ChunkSize = (LOF(FileNum) - Loc(FileNum))
'set array size to fit chunk
ReDim Chunk(0 To ChunkSize - 1)
'read the chunk
Get #FileNum, , Chunk
'Send the data
wsSend.SendData Chunk
Sentbyt = Sentbyt + ChunkSize
ByteSec = ByteSec + ChunkSize
'See if file is sent
If Sentbyt = FileSize Then 'FileSize自己先找好
Complete = True
Close #FileNum
End If
End Function
接收端:Open Filename For Binary As #FileNumDim GotDat() As Byte
Dim Hash As String
ByteSec = ByteSec + bytesTotal
Receivedbyt = Receivedbyt + bytesTotalReDim GotDat(0 To bytesTotal - 1)
wsReceive.GetData GotDat, vbArray + vbByte
Put #FileNum, , GotDat
If Receivedbyt = FileSize Then
Close #FileNum
Complete = True
End IfFT_BUFFER_SIZE别超过8k