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---------------------------------
提示出错信息如下:
...全文
353 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
jsyc12365 2016-07-07
  • 打赏
  • 举报
回复
没有热心人帮忙啊! 经查找原因,UDP数据报不能超过64K。需要分包。
打开链接下载源码: https://pan.quark.cn/s/589796089f72 C++课程设计任务列表,涵盖以下内容:1、识别并显示10至99范围内,各位数乘积超过各位数和的数值,例如数字12不满足条件,因为1乘以2小于1加2,故不输出;而数字27满足条件,因为2乘以7大于2加7,因此需要输出该数。2、开发一个功能,用于从用户输入的任意数量实数中找出最大值与最小值:首先要求用户输入一个正整数n,代表数值的个数,随后用户可输入任意n个实数,程序需找出这n个数中的最大值和最小值并将它们展示出来。3、实现两个已排序数组的合并操作:设有数组A和B,且假设这两个数组的元素均已按照降序排列。编写程序将A和B合并成一个新的数组C,并确保C中的元素同样保持降序排列。int A[10]={123, 86,80, 49,33,15,7,0,-1,-3};int B[10]={100,64,51,50,27,19,15,12,5,2};4、设计一个函数,用于计算特定分数序列前n项的总和,该序列为1/2,1/3,1/4,1/5,1/6,1/7,...。要求在主程序中提示用户输入一个整数n,并验证输入的合法性(n需大于1方为有效),若输入合法,则调用求和函数并显示计算结果。5、编写一个程序,计算两个用户输入日期之间的天数差:用户需以year1,month1,day1和year2,month2,day2的格式输入两个日期,程序随后计算这两个日期之间的天数间隔,并将结果输出到屏幕上。要求编制具有如下原型的函数difs2Date:long GetDayDifference(int y1,int m1,int d1,int y2,int m2,int d2);并在主函数中调用此函数,将计...

16,717

社区成员

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

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