刚刚学会用Winsock做简单的聊天程序,但只能在两台机器上实现,怎样实现多台机的数据传送?
以及如何用Winsock传图片?
刚刚学会用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 方法的第二个参数是不一样的。
两台机器上要用Winsock实现简单的聊天程序,那个端口怎么设置????
我也做了一个,有三个输入格
对方主机IP地址:( )
本机端口:( )
远程端口:( )
可无论怎么输入都连不上,我用的是校园网,
请问这是怎么回事??????????
本机端口要和远程端口一致,连接才能成功。
楼上的,你的方法是在 C++ 里用的,VB 要让服务器一直监听哪个客户端发信息,然后转发到其他的客户端,否则无法实现多人聊天。
你可以把本地的文件(图形、声音等可以先存成临时文件)以二进制文件的方式来打开它,将其内容全部读入一个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