刚刚学会用Winsock做简单的聊天程序,但只能在两台机器上实现,怎样实现多台机的数据传送?
以及如何用Winsock传图片?
 
										
					
	多台机发送信息需要通过一个信息中转站,也就是服务器,它负责将信息类似广播地发送到其他主机上。
发送图片的过程:
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 方法的第二个参数是不一样的。
   你可以把本地的文件(图形、声音等可以先存成临时文件)以二进制文件的方式来打开它,将其内容全部读入一个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