vb.net传递结构体 vb数据传输

关于vb.net中Socket的问题我不给你代码了 , 我才编了SOCKET的,告诉你原理吧(我的编程经验而已)
SOCKET传输文件和接受是有大小限制的,默认是81**来则也就是8K多,你可以改?。?但改大我没试过,然后你必须把文件分成若干份,然后传过去,然后在接收端组合起来,同时接收端的接受大小要和发送大小统一 。
至于你说的文件名,文件名不属于文件数据中的一部分,它不参与数据传输的 , 你只能在接收端重新改名字 。
同时为什么要用上面的方法传呢,因为VB.NET中的SOCKET有很多问题,我就为此烦过,因为要丢包(理论上TCP不存在) , 或者粘包,或者断包 , 也就是你在接收端获取文件时数据是要出错的,比如你定长3000B,结果接收端可能先收到2000B , 当接受端接受后,处理会出错的 。
所以SOCKET的标准发送方法是建立定长的结构体(结构体必须定义为可序列化结构体),最好结构体里面至少包含有 1,文件名,2,本包序号,3,本包数据,比如每个包大小3040B , 文件名占20 , 序号占20,数据占3000 , 然后发送出去,接收端每次固定接受3040B,如果接受到的包没有这么大(比如收到2000) , 那么继续接受(1040),直到达到3040后组合成一个包,在把包分解成结构体 , 相同的文件名为一个文件,再按照序号按次组合其中的数据,这就完成了传输 。这样的方法还可以同时传送多个文件,因为结构体里面包含了文件名和序列号,不会错乱,如果是大文件,请不要接收完毕后(最后一个包的序号可以为-1,或者包里包含总长度 , 检查到序号为-1时表示完毕,或者达到总长度后表示完毕)再组合,因为这样会浪费电脑内存,最好的方法是一边接受数据,一边写入到文件中(收到第一个包时就建立文件,以后每个包的数据都往里面写) 。
回答你的问题:
1、经过上面的传输后,文件是不变化的,MD5检查都是正常的,不用担心文件大小有变化(如果有变化,那就是代码没编对)
2,、文件名问题,我前面提到了,文件名是不参与传输的 , 它不属于数据中的一部分,比如同一个文件,不管你怎么改名字MD5是不变的 。你只能通过把文件名想办法传给对方(比如我上面说的结构体方法),让对方写入文件时使用 。
3 , 代码:
还是给你找找吧,等等
不行,我的都很大,很长,你还是在网上找吧 , 有很多例子 , 我也是网上学的 。
vb.net中GetClientRect()函数的问题对不起,我没有学过vb.net,但是学过vb,希望这个可以
解决您程序的毛病 。首先您注意以下两种GetClientRect
声明的方法:
Option Explicit
Private Declare Function GetClientRect Lib "user32" ( _
ByVal hwnd As Long, _
ByRef lpRect As RECT _
) As Long
Private Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
Private Sub Form_Load()
Dim r As RECT
Me.AutoRedraw = True
GetClientRect Me.hwnd, r
Print r.Left
Print r.Right
Print r.Top
Print r.Bottom
End Sub
----------------------------------------------------------------------------
Option Explicit
Private Declare Function GetClientRect Lib "user32" ( _
ByVal hwnd As Long, _
ByVal lpRect As Long _
) As Long
Private Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
Private Sub Form_Load()
Dim r As RECT
Me.AutoRedraw = True
GetClientRect Me.hwnd, VarPtr(r)

推荐阅读