189 8069 5689

vb.net传递结构体 c语言函数传递结构体

关于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 两个窗体之间传递参数

新窗体中写

构造函数

,然后调用。

比如你要调用的新窗体是From1.cs这个窗体,

public

Form1(要传入的参数)

{

//把传入的参数传入窗体中

//执行窗体标准内容

}

然后在需要调用的地方调用

Form1

f

=

new

Form1(传出的参数);

'--------Form1--------

Dim

f2

As

Form2

Private

Sub

Command1_Click()

Set

f2

=

New

Form2

f2.Show

vbModal

End

Sub

'--------Form1

End--------

'--------Form2--------

Dim

WithEvents

f3

As

Form3

Private

Sub

Command1_Click()

Set

f3

=

New

Form3

f3.Show

End

Sub

Public

Sub

f3_f2W()

Me.Command1.Caption

=

"f2W"

End

Sub

'--------Form2

End--------

'--------Form3--------

Public

Event

f2W()

Private

Sub

Command1_Click()

RaiseEvent

f2W

End

Sub

'--------Form3

End--------

f.Show();

如此就能实现调用了。

VB.net的结构体怎么一次性赋值,结构数组怎么一次性赋值?

一个简单的例子:

Dim a(3) As Integer = { 0, 1, 2 }**修改**既然有界数组不能初始化,就还缺(省)界数组试试嘛:

Dim a() As Integer = { 0, 1, 2 }

类型不匹配的错误估计是你的结构体缺少构造函数造成的。在你的quality_i结构体定义里面加一个构造函数,如下所示

Public Structure quality_i

Public nub As Integer

Public nae As String

Public Sub New(ub As Integer, ae As String)nub = ubnae = aeEnd SubEnd Structure然后以如下方式初始化:

在vb.net中如何使用结构体

1、先定义一个结构体

2、初始化并定义一个结构体的变量

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)

Print r.Left

Print r.Right

Print r.Top

Print r.Bottom

End Sub

看出问题了没有,就在GetClientRect的第二个参数上:

一个是按地址传递,另一个是按值传递:

ByRef lpRect As RECT 用 GetClientRect Me.hwnd, r

ByVal lpRect As Long 用 GetClientRect Me.hwnd, VarPtr(r)

据我所知vb.net按值传递的比较多,应该用VarPtr获取RECT类型

(结构体)的指针,然后传递。

希望能对你有所帮助。

vb.net如何发送结构体数据

序列化发出然后反序列化

序列化成文本就行,Json和Xml都是可以的

如果是Vb.net与C++交换数据的话,百度都能直接搜到的


新闻标题:vb.net传递结构体 c语言函数传递结构体
网址分享:http://jkwzsj.com/article/hghpch.html

其他资讯