vb.net 2010 传输文件大小不能超过64K,求教!

jsyc12365 2016-07-06 11:23:59
本人不是程序员,只是用十几年前在大学里选修课学的VB6偶尔编个小程序方便工作。后来别的同事也用起来,但是更新麻烦了,要一个一个的跑。就增加了程序的更新功能。

以前是用VB6,程序里采用FTP上传、HTTP下载,集合数据库进行程序的更新。
最近想弄VB.NET2010修改程序(也没学过,边看书,边结合程序修改来学习)
上传功能不想再用FTP上传了,想编个程序安装在服务器端,上传更新内容时自动接收并存放,这样更自由。

网上下了个例子(我没有修改,主要是还不会改。),
但是实验后存在无法传送大小64K以上的文件。
真心请教如何修改这个64K限制。
程序代码如下(感谢网上发例码的大神):

'-------------------------------------Server发送端代码------------------------------------

Imports System.Threading.Thread
Imports System.Net
Imports System.Net.Sockets
Imports System.IO
Public Class Form1
Dim s As New UdpClient '这里注意发送文件不再使用Socket,而是用UdpClient
'====================================
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

End Sub

Private Sub txtFile_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtFile.Click
Dim FD As New OpenFileDialog
Try
FD.ShowDialog()
txtFile.Text = FD.FileName '选择文件
Catch ex As Exception
MessageBox.Show(ex.ToString)
End Try
End Sub

Private Sub btnSend_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSend.Click
'发送文件
If txtIP.Text = "" Or txtPort.Text = "" Then Exit Sub
Try
Dim IPEndPoin As New IPEndPoint(Net.IPAddress.Parse(Trim(txtIP.Text)), CInt(txtPort.Text))
Sleep(1000)
MessageBox.Show("连接成功!")
Dim fs As New FileStream(txtFile.Text, FileMode.OpenOrCreate, FileAccess.Read) ''要传输的文件
Dim File(fs.Length - 1) As Byte '定义File()数组
Dim strread As New BinaryReader(fs)
strread.Read(File, 0, File.Length) '读取要传输的文件数据
s.Send(File, File.Length, IPEndPoin) '发送文件
lblLen.Text = "已发送字节数:" & fs.Length()
fs.Close()
Catch ex As Exception
MessageBox.Show(ex.ToString)
End Try
End Sub
End Class

'-------------------------------End------------------------------------

'-------------------------------Client接收端代码--------------------

Imports System.IO
Imports System.Net.Sockets
Imports System.Net
Imports System.Threading

Public Class Form1
Public listener As New Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp) '初始化
Public T As Thread
Public IPEndPoin As IPEndPoint

Private Sub Listen()
Try
Dim bytes(MB_to_Bytes(NumericUpDown1.Value)) As Byte
'这里解释一下,bytes()是一个Byte型数组,括号里的数字表示该数组的上限(最大值),如果定义太小了,比如bytes(1024)不管远程发来多少数据,只能接受1kb
Dim NumGet As Integer '用于存放接受字节数

While True '当其有数据到达时触发

NumGet = listener.Receive(bytes) '接收,返回长度
Dim recfs As New FileStream(txtSavePath.Text, FileMode.OpenOrCreate)
'接收数据并将其保存到一个新的文件中
Dim newfilestr As New BinaryWriter(recfs)
'这里很关键,下面的意思是:把接受的bytes中的数据,按照NumGet的固定长度写入到:recfs指向的文件中
' NumGet才是文件真正大小,若改为 1024,则将收到数据中前1024字节写入文件
newfilestr.Write(bytes, 0, NumGet)
recfs.Close()
'listener.Shutdown(SocketShutdown.Receive)
'listener.Close()
'如果关闭将不能再次接收文件
MessageBox.Show("接收数据成功.共计:" & NumGet)
End While
Catch ex As Exception
MessageBox.Show(ex.ToString)
End Try
End Sub

''' <summary>
''' 将MB转换为字节
''' </summary>
''' <param name="MB">MB的值</param>
''' <returns></returns>
''' <remarks></remarks>
Public Function MB_to_Bytes(ByVal MB As Integer) As Integer
Dim intBytes As Integer
intBytes = MB * 1024 * 1024
Return intBytes
End Function

Private Sub btnListen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnListen.Click
If txtIP.Text = "" Or txtPort.Text = "" Or txtSavePath.Text = "" Then Exit Sub
Try
IPEndPoin = New Net.IPEndPoint(Net.IPAddress.Parse(Trim(txtIP.Text)), CInt(txtPort.Text))
listener.Bind(IPEndPoin)
T = New Thread(AddressOf Listen)
T.Start()
MessageBox.Show("已成功启动监听。")
Catch ex As Exception

End Try
End Sub
End Class

'--------------------------------------End---------------------------------
提示出错信息如下:
...全文
274 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
jsyc12365 2016-07-07
  • 打赏
  • 举报
回复
没有热心人帮忙啊! 经查找原因,UDP数据报不能超过64K。需要分包。

16,553

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧