局域网发送广播控件
1. 飞鸽传书的现代通讯
MicrosoftWindows95/98/Me/NT4.0/2000/XP/2003
95/98/NT4.0;要求comctl32.dll(公共控件)的版本为5.x或更高。
(如果用户安装的IE是5.x或更高版本,那么就不必担心这个问题了)
注意:Windows3.1(和NT3.5x),请使用IPMessengerforWin16。 安装/卸载执行setup.exe用户可以将IPMsg安装到指定目录,或者重新注册到启动组,
如果需要删除IPMsg,请先从控制面板中卸载,再手动删除IPMsg目录。
系统托盘区图标
左键双击图标,即可打开发送消息窗口.右键点击图标,可进入[服务设置],[离开]等。
发送消息窗口
发送消息时,若勾选了[封装],则接收者要先打开信封才能看到消息,
如果用户还勾选了[上锁],则接收者在打开信封时还需要输入密码。
(密码是由接收者自己在[服务设置]中设置的)
若要发送文件、文件夹,可直接将文件/文件夹拖入发送消息窗口,
或在发送消息窗口上点击右键,再选择发送文件或发送文件夹。
传送文件、文件夹时,当接收者还没有保存(下载)文件/文件夹时,若发送者关闭或重启了IPMsg,则附带的文件信息将被清除,
接收者将不能继续接收(下载)到此文件.用户列表前缀符号说明
“”表示用户处于离开模式.
“|”表示用户使用的不是2.0以上版本的IPMsg,
将不支持文件/文件夹的传送,并且不支持通信数据加密。
“|”(短线)表示只支持文件/文件夹的传送。
拖动列表表头标题项可改变其顺序,并可点击右键选择保存列表顺序-在消息输入窗口中,可使用Ctrl+Tab输入制表符Tab。
在发送消息窗口上点击右键,可以进入设置显示优先级,选择工作组,
搜索用户(Ctrl+F),传送文件,传送文件夹,保存列表顺序,字体设置,
窗口大小设置,固定窗口位置,列表显示设置。
在用户名上点击右键,可设置其显示优先级,
优先级按由小到大的顺序排序。
通过设置显示优先级,可将经常联系的用户至于列表顶端,
或者隐藏不需要联系的用户。
接收消息窗口
-在接收消息窗口上点击右键,可以进入字体设置,
窗口大小设置,固定窗口位置。.
接收消息窗口标题栏中的“+”或“—”表示通信数据使用了加密算法。
“+”表示RSA/1024位,blowfish/128位加密。
“—”表示RSA/512位,RC2/40位加密。
如果用户收到的消息附带了文件,将会显示出附件按钮。
点击按钮即可保存文件.
其他
如果需要(通过路由器)连接到广域网,则需要设置广播地址。
详见广域网设置(广播设置)
其它功能都很容易理解,用户试一试就明白。 1.隐藏/显示窗口Ctrl+D;
2.按住Ctrl键再点[刷新]可保持现有用户,搜索新上线的用户;
3.打开发送/接收消息窗口Ctrl+Alt+S/R(需要进行详细设置);
4.打开搜索窗口Ctrl+F;
5.接收到多个文件,保存时可勾选(全部)。 局域网聊天软件飞鸽传书是比较流行的局域网即时通讯软件,由于历史悠久,它具有比较多的用户。因为FreeEIM的实现原理和飞鸽传书差不多,希望广大用户了解其原理后,在使用时更加得心应手。
开发多年的飞鸽,在他的基础上增加了些许功能,例如语音对话,这里继续讨论FreeEIM(飞鸽传书),前几天,详细的了解了FreeEIM(飞鸽传书)的网络协议,详细分析并且实现了FreeEIM(飞鸽传书)的消息传递过程,这里就FreeEIM(飞鸽传书)中的文件和文件夹的传输做详细的说明。
在FreeEIM(飞鸽传书)中,如果要进行文件或者文件夹的传输,首先需要做的就是消息的应答,通过UDP发送文件传输报文,另外的FreeEIM(飞鸽传书)客户端收到报文后,使用TCP协议发送应答报文,这样就开始进行文件的传输了。
这里开启两个线程,线程1负责文件的传送,线程2负责文件的接受,下边做一一说明。
首先,我们知道,可以发送多个文件,这些文件需要建立链表保存信息。
typedefstructfile_info
structfile_info*next;//双向链表
structfile_info*forward;
char*file;//文件名
inttype;//文件类型:文件或者文件夹
intsize;//文件大小
structsockaddr_inaddr,//目标网络信息
}FILE_INFO;
文件传送链表由专门的线程维护,这样,线程1就可以专心进行处理文件传输队列就可以了,线程1始终查询这个链表,如果表头为NULL,就说明没有要传输的文件,表头非空,就开始发送报文,获得正确的应答后,就可以开始文件的传输了,文件传输结束,将相应的链表节点删除。这里借鉴了很多程序中使用非常广泛的“命名池”相关的概念,只不过这里我们使用的是“文件池”,可以这么认为,如果有文件要传输,可以不用考虑是否有文件正在传输,只要把要传输的文件放入“文件池”就可以了,同时,不用考虑“文件池”的大小,线程1是文件池的服务线程,它检测文件池的大小,如果非空,就会逐次传输文件。
这里需要特别注意的就是关于文件夹的传输,这个FreeEIM(飞鸽传书)一个难点,因为对于文件夹的内容是没有显示的,需要我们逐次的判断,在飞鸽传书中是这么处理的,如果是一个文件夹,就发送文件属性为IPMSG_FILE_DIR的信息包,FreeEIM(飞鸽传书)客户端收到这个信息包后,就创建这个文件夹,然后发起发送的FreeEIM(飞鸽传书)客户端,进入文件夹,传送文件夹内的文件,如果该文件夹下,还有文件夹,使用相同的方法,在文件夹内的文件传送结束后,就发送FREEEIM_FILE_RETPARENT信息包,接受的FREEEI_FILE_RETP报文的FreeEIM(飞鸽传书)客户端,执行返回上一级目录,FreeEIM(飞鸽传书)发送端,就需发送目录下的文件。这样循环操作,最终完成文件的传输,这个过程比较难以理解。
有了上边的知识,开发文件传输功能就变得简单多了,文件的接受也可以类推了,同样开启一个线程维护接受文件链表,逐次接受身下的文件,链表为空时。文件传输会遇到文件读写问题,有的文件发送是被打开了,这样会造成访问违规,所以要有相应的处理,才能让程序更加稳健。
程序启动时先读取用户配置文件,一般是*.ini格式,然后,使用Winsock的广播消息给整个局域网发送一个数据包,这时候,如果其他电脑已经运行了飞鸽传书,那么他收到这个包后,会将包的信息读取出来,当然,这个包里有用户的IP,用户名,性别等等。这样,在用户列表里就多了一个用户了。他的用户检查方式就如此简单而已。至于跨网段的实现,只需简单地修改一下广播地址就行了,如果不考虑速度,用户可以给整个internet发广播消息。消息发送,文件传输这些功能,都比较简单,如果用户会网络编程,给用户对方IP地址,这些功能实现起来再简单不过了。语音、视屏等,只需编写一些语音视频采集代码,传书的话,就像传文件一样;这里给段广播消息的实现代码吧:
//发送广播登陆消息 所有的设置信息都保存在注册表的以下位置:
\HKEY_CURRENT_USERSoftwareHSTools
用户密码以不可逆加密方式存储
*如果用户忘记了密码,可以在注册表中将此键值删除*
*\HKEY_CURRENT_*
-本软件使用的默认端口为2425
若仅使用UDP协议的端口,将不能传送文件/文件夹
(如果安装了防火墙,则必须打开相应的TCP和UDP端口)
-本软件为自由软件,用户可以随意传播,但源码使用请参见许可协议。
-只有在启动或退出程序,使用离开模式,刷新在线用户时IPMsg才会进行消息广播。
-本软件由MicrosoftVisualC++6.0编译 -主机号全部为1的IP地址,即广播地址
例如,连接到一个C类子网(即24位网络号,8位主机号),IP地址为
aaa.bbb.ccc.ddd,其广播地址即为:aaa.bbb.ccc.255
若对方处于另一个私有子网中,广播可能无效。
-更多问题,请参阅相关资料或咨询用户的网络管理员.
-若两台主机的连接经过了多个路由器,请直接指定对方IP地址
-拨号上网用户请勾选[拨号连接]
当刷新在线用户列表时,列表不会被清空。 启动飞鸽传书前,用户可以指定其运行时使用的端口,
且可以使用不同的端口打开多个窗口.用法如下:
ipmsg.exe2426(用户可在快捷方式上设置)
但是用户只能与同时也使用该端口的用户通信.
-所以用户尽可选用用户喜欢的端口运行本软件.
介于10000至60000可能更安全些.
用户也可以咨询用户的网络管理员.
如果有多个网卡(IP),用户可以将飞鸽传书与指定的网卡(IP)进行绑定。
命令格式如下(用户可以在快捷方式上设置):
ipmsg.exe[端口]/NICIP地址
例如:C:>ipmsg.exe/NIC192.168.10.100;支持命令方式发送消息
命令格式如下
ipmsg.exe[端口]/MSG[/LOG][/SEAL]<主机名或IP地址><消息>
例如:C:>ipmsg.exe/MSG/SEALlocalhostHello。 -IPMsg的技术讨论区是开放的.
如果用户想订阅相关邮件,请联系
-欢迎报告bug,以及提出建议
-如果用户有任何疑问,请E-mail联系.
中文版可联系阿志
-发送错误报告,请勿必记录以下信息:
软件版本,操作系统,故障描述,以及故障重现方法等。 ver1.00——日文版(1996/08/19)
ver1.31——英文版/日文版(1997/09/01)
ver2.00——英文版/日文版(2002/11/19)
支持文件/文件夹传送
支持通信数据加密
ver2.03——Bug修正(文件传送引起缓冲溢出)
广播设置支持主机地址(FQDN)解析
ver2.04——增加绑定网卡(IP)功能
ver2.05——Bug修正(2.04版当激活发送/接收消息窗口时,无法注销/关闭系统)
ver2.06——很小的调整
ver2007——全面调整软件的界面可用性、性能稳定性。
ver2014——全新界面和用户体验,高效文件传输
2. 求vb代码,vb实现以广播的形式发送信息到局域网内部,另外加一个接收的程序。
这代码发送和接收的MSDN6.0中有,在索引中键入winscok 控件,点使用 Winsock 控件
其中关于UDP
协议是一种无连接协议,两台计算机之间的传输类似于传递邮件:消息从一台计算机发送到另一台计算机,但是两者之间没有明确的连接。另外,单次传输的最大数据量取决于具体的网络。
要创建一个 UDP 伙伴,请按照以下步骤执行:
创建一个新的 Standard EXE 工程。
将缺省的窗体的名称修改为 frmPeerA。
将窗体的标题修改为“Peer A”。
在窗体中放入一个 Winsock 控件,并将其命名为 udpPeerA。
在“属性”页上,单击“协议”并将协议修改为 UDPProtocol。
在窗体中添加两个 TextBox 控件。将第一个命名为 txtSend,第二个命名为 txtOutput。
为窗体增加如下的代码。
PrivateSubForm_Load()
'控件的名字为udpPeerA
WithudpPeerA
'重点:必须将RemoteHost的值
'修改为计算机的名字。
.RemoteHost="PeerB"
.RemotePort=1001'连接的端口号。
.Bind1002'绑定到本地的端口。
EndWith
frmPeerB.Show'显示第二个窗体。
EndSub
PrivateSubtxtSend_Change()
'在键入文本时,立即将其发送出去。
udpPeerA.SendDatatxtSend.Text
EndSub
PrivateSubudpPeerA_DataArrival_
(ByValbytesTotalAsLong)
DimstrDataAsString
udpPeerA.GetDatastrData
txtOutput.Text=strData
EndSub
要创建第二个 UDP 伙伴,请按照以下步骤执行:
在工程中添加一个标准窗体。
将窗体的名字修改为 frmPeerB。
将窗体的标题修改为“Peer B”。
在窗体中放入一个 Winsock 控件,并将其命名为 udpPeerB。
在“属性”页上,单击“协议”并将协议修改为“UDPProtocol”。
在窗体上添加两个 TextBox 控件。将第一个命名为 txtSend,第二个命名为 txtOutput。
在窗体中添加如下的代码。
PrivateSubForm_Load()
'控件的名字为udpPeerB。
WithudpPeerB
'重点:必须将RemoteHost的值改为
'计算机的名字。
.RemoteHost="PeerA"
.RemotePort=1002'要连接的端口。
.Bind1001'绑定到本地的端口上。
EndWith
EndSub
PrivateSubtxtSend_Change()
'在键入后立即发送文本。
udpPeerB.SendDatatxtSend.Text
EndSub
PrivateSubudpPeerB_DataArrival_
(ByValbytesTotalAsLong)
DimstrDataAsString
udpPeerB.GetDatastrData
txtOutput.Text=strData
EndSub
3. VB6.0的winsock控件用UDP局域网广播数据,当数据很大时接收方报10040--数据包太大,请问怎么处理。
虽然很久没用复这控件了,不过原理制还是懂的,给你点思路吧
解决你的问题,大概有几个方法:
一.控制发送速度,简单但是效率有点低
二.技术方加大数据缓冲,优先接收,读了就放内存里,接收完或是空闲时再处理,这在处理过程复杂时比较有效
三.出错的数据丢掉----没错,就是不要了!
既然你选择了UDP,就无法避免丢包的事情发生,肯定要有相关的容错处理.网络可以"自动"丢包,我们写的程序为什么不能"人为"丢包呢?
其实,多数情况下,要根据所处理数据的特点 当前网络特点 机器现状来制定策略,综合上述办法,甚至创造更新的办法
以上,希望对你有帮助,还有问题欢迎探讨