标题:怎样用Winsock传送图片?
只看楼主
pilotlwg
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2005-11-2
 问题点数:0 回复次数:6 
怎样用Winsock传送图片?

刚刚学会用Winsock做简单的聊天程序,但只能在两台机器上实现,怎样实现多台机的数据传送?
以及如何用Winsock传图片?

搜索更多相关主题的帖子: Winsock 
2005-11-02 16:55
leon2
Rank: 3Rank: 3
等 级:新手上路
威 望:7
帖 子:731
专家分:0
注 册:2005-3-18
得分:0 

多台机发送信息需要通过一个信息中转站,也就是服务器,它负责将信息类似广播地发送到其他主机上。
发送图片的过程:
1、打开图片文件流;
2、一边读取文件流,一边发送图片数据,例如:
Dim byteBuffer() As Byte
Open "C:\a.jpg" For Binary As #1
Do While Not EOF(1)
DoEvents
Get #1, , byteBuffer
WinSock1.SendData byteBuffer, vbByte + vbArray '第二个参数表示发送的数据是一个字节数组,如果不填,接收方会打不开图片文件
Loop
Close #1
3、接收方打开输入文件流,并接收图片数据。代码为:
Dim byteBuffer() As Byte
Open "C:\a.jpg" For Binary As #1
WinSock1.GetData byteBuffer, vbByte + vbArray
Put #1, , byteBuffer
Close #1

注意: 文字和图片的发送与接收,SendData 和 GetData 方法的第二个参数是不一样的。

2005-11-02 22:21
shifeng2799
Rank: 1
等 级:新手上路
帖 子:83
专家分:0
注 册:2005-9-23
得分:0 

两台机器上要用Winsock实现简单的聊天程序,那个端口怎么设置????
我也做了一个,有三个输入格
对方主机IP地址:( )
本机端口:( )
远程端口:( )
可无论怎么输入都连不上,我用的是校园网,
请问这是怎么回事??????????


2005-11-05 16:54
leon2
Rank: 3Rank: 3
等 级:新手上路
威 望:7
帖 子:731
专家分:0
注 册:2005-3-18
得分:0 

本机端口要和远程端口一致,连接才能成功。

2005-11-05 17:23
icecool
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:20
帖 子:1214
专家分:1366
注 册:2005-3-14
得分:0 
多台机好像不用服器也可以,
就是每发完信息就关闭连接,收完信息就得新监听

http://toorup.3v.do
loading...
2005-11-05 18:32
leon2
Rank: 3Rank: 3
等 级:新手上路
威 望:7
帖 子:731
专家分:0
注 册:2005-3-18
得分:0 

楼上的,你的方法是在 C++ 里用的,VB 要让服务器一直监听哪个客户端发信息,然后转发到其他的客户端,否则无法实现多人聊天。

2005-11-05 19:05
zhanglibiao
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2006-3-14
得分:0 


   你可以把本地的文件(图形、声音等可以先存成临时文件)以二进制文件的方式来打开它,将其内容全部读入一个byte类型的数组中,本地机代码如下:

dim myfile () as byte
dim position as long
open "filename" for binary as #1
position=0
do while not eof(1)
position=positon+1
redim preserve myfile (1 to position)
get #1,,myfile(position)
loop
close #1

   再向远程机传送这个字节数组

   sckserver.SendData myfile

   远程机收到这个数组之后,再以二进制文件的方式打开一个新目标文件,将数组内容写入这个新打开的文件,如果是bmp图片就将其放入picture图片框中,如果是wav文件,就播放。这样,局域网中的两个人就可以通过语言、图片、文字来交流了。

   远程机代码如下:

Private sub sckconnect_DataArrival(byval bytestotal as long)
dim receivefile(1 to bytestotal)as byte
sckconnect.GetData receivefile,vbarray+vbbyte
'告诉Winsock控件收到的是字节数组类型的数据
open "c:\temp\文件名" for binary as #1
for I=1 to bytestotal
put #1,,remotearray(I)
next I
clost #1
end sub

2006-03-14 14:46



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-32346-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.711212 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved