找回密码
 加入我们

QQ登录

只需一步,快速开始

搜索
查看: 11531|回复: 9

[求助] winsock图片发送问题

 火.. [复制链接]

2

主题

4

回帖

0

精华

铜牌会员

积分
57
发表于 2011-6-28 11:46:35 | 显示全部楼层 |阅读模式
     现在用vb编写一个程序,想通过winsock将picturebox中已有的图片通过winsock发送到另一个程序界面中,程序是
Private Sub Command1_Click()  ‘发送
Dim pbag As New PropertyBag
Dim pictureByt() As Byte

pbag.WriteProperty "Picture", Picture21.Picture
pictureByt = pbag.Contents '获得容器byte到pictureByt()中

Winsockserver.SendData pictureByt
end sub
现在有个问题就是winsock每次发送的字节大小好像有限制只有8k,而我的图片至少400k,只能分块发送,现在想着是能把数组中的内容安1k的大小分块,有没有什么函数可以直接将数组分块的,我现在想到的就是利用for循环一点点取出,但感觉很麻烦,大家有没有比较好的办法,我菜鸟一个,想听听专家们得意见呵呵,谢谢啦
天道酬勤

275

主题

3019

回帖

1

精华

管理员

嗷嗷叫的老马

积分
17066

论坛牛人贡献奖关注奖最佳版主进步奖人气王疯狂作品奖精英奖赞助论坛勋章乐于助人勋章

QQ
发表于 2011-6-28 13:07:46 | 显示全部楼层
只有8K,谁告诉你的啊,哈哈.

http://blog.m5home.com/default.asp?id=169

这里有个代码,注意看客户端的实现.
我就是嗷嗷叫的老马了......

2

主题

4

回帖

0

精华

铜牌会员

积分
57
 楼主| 发表于 2011-6-28 15:00:59 | 显示全部楼层
马大哈 发表于 2011-6-28 13:07
只有8K,谁告诉你的啊,哈哈.

http://blog.m5home.com/default.asp?id=169

谢谢斑竹回复,但我做实验了传送小于8k的就能传送成功,接收端也能接收并显示(当然大的也显示发送成功成功,但在接收时就无法显示)8k也是网上查的嘿嘿http://topic.csdn.net/t/20031201/11/2513451.html,其实自己也不很明白
天道酬勤

275

主题

3019

回帖

1

精华

管理员

嗷嗷叫的老马

积分
17066

论坛牛人贡献奖关注奖最佳版主进步奖人气王疯狂作品奖精英奖赞助论坛勋章乐于助人勋章

QQ
发表于 2011-6-30 16:09:00 | 显示全部楼层
子岩 发表于 2011-6-28 15:00
谢谢斑竹回复,但我做实验了传送小于8k的就能传送成功,接收端也能接收并显示(当然大的也显示发送成功成 ...

那里所谓的几K,是指一次传输中封包的大小,就像运东西时你车的大小,与运多少东西无关.

车大,一次就能运完,车小,要分N次才能运完.

因此在需要分的情况下要有个机制管理整个过程.

但这个过程WINSOCK是已经做了管理的,直接用就行了.
我就是嗷嗷叫的老马了......

2

主题

4

回帖

0

精华

铜牌会员

积分
57
 楼主| 发表于 2011-7-7 19:23:54 | 显示全部楼层
马大哈 发表于 2011-6-30 16:09
那里所谓的几K,是指一次传输中封包的大小,就像运东西时你车的大小,与运多少东西无关.

车大,一次就能运 ...

谢谢老马的帮助,你说的没错,但现在还有个问题请教一下,我修改了一下程序用数组可以接受到发送的图片数据,但接收完成之后,想要picturebox控件将其显示出来,我采用的是将字节数组赋值给propertyBag对象,然后再通过propertyBag读出相应的数据,这个我在同一个窗口已经试过是没问题的,但通过winsock发送的数据(就是几次接收完成之后)却不能存放到propertyBag中,想了解一下原因,自己是第一次编这样的程序,有些地方还是很糊涂,希望能解答一二。程序是这样的
Private Sub Winsockserver_DataArrival(Index As Integer,ByVal bytestTotal As Long)
Dim pbag As New PropertyBag  '得到图片信息
Dim bytImage() As Byte  ' 保存图片信息
Dim pictureByt() As Byte     '接收图像信息
Dim j,k as Long
Static i as Long
Winsockserver(Index) .GetData pictureByt,vbByte
j=UBound(pictureByte)
if i>0 Then
ReDim Preserve bytImage(i+j+1)
For k=0 To i
bytImage(k)=byteImage(k)
Next
For k=i To i+j
bytImage(k+1)=pictureByt(k-i)
Next
i=UBound(bytImage)
if i=307311 Then '307311是我测试的图片的字节
pbag.contents=bytImage ‘发送数据完成后此处就会显示无效的过程调用或参数Set Picture1.picture=pbag.ReadProperty("picture")
End if
else
bytImage=pictureByt
i=UBound(bytImage)
End if
End Sub

天道酬勤

2

主题

4

回帖

0

精华

铜牌会员

积分
57
 楼主| 发表于 2011-7-8 15:26:48 | 显示全部楼层
没人回答吗,我这样接收有问题吗?winsock是按吧b[0]-b[x]这样顺序分包发送吧,还是propertybag使用有错误,高手们说句话:'(
天道酬勤

275

主题

3019

回帖

1

精华

管理员

嗷嗷叫的老马

积分
17066

论坛牛人贡献奖关注奖最佳版主进步奖人气王疯狂作品奖精英奖赞助论坛勋章乐于助人勋章

QQ
发表于 2011-7-14 16:47:52 | 显示全部楼层
你可以看看2楼的代码,里面好象是保存到文件.

如果不想保存到文件,那可以试试这个代码:

【原创】马大哈系列功能模块----根据字节数组直接得到IPicture对象
http://www.m5home.com/bbs/thread-2688-1-1.html
我就是嗷嗷叫的老马了......

275

主题

3019

回帖

1

精华

管理员

嗷嗷叫的老马

积分
17066

论坛牛人贡献奖关注奖最佳版主进步奖人气王疯狂作品奖精英奖赞助论坛勋章乐于助人勋章

QQ
发表于 2011-7-14 16:48:25 | 显示全部楼层
这几天挺忙,刚从东莞回来,马上又要去大连了.......
我就是嗷嗷叫的老马了......

2

主题

4

回帖

0

精华

铜牌会员

积分
57
 楼主| 发表于 2011-7-15 11:18:25 | 显示全部楼层
马大哈 发表于 2011-7-14 16:48
这几天挺忙,刚从东莞回来,马上又要去大连了.......

那真是太感谢老马了,辛苦啦
天道酬勤

0

主题

8

回帖

0

精华

初来乍到

积分
21
发表于 2011-12-8 01:13:41 | 显示全部楼层
学习了.
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

快速回复 返回顶部 返回列表