王朝百科
分享
 
 
 

飞鸽传书

王朝百科·作者佚名  2009-12-19  
宽屏版  字体: |||超大  

飞鸽传书

一. 古代通讯方式飞鸽传书与鸿雁传书是一个意思,就是古人之间联系的一种方法,将信件系在鸽子的脚上然后传递给要传递的人.

古代通信不方便,所以聪明的人利用鸽子会飞且飞得比较快、会辨认方向等多方面优点,驯化了鸽子,用以提高送信的速度。通常来讲,鸟类本身会认回家的路,就像倦鸟归巢一样,古人所用的飞鸽传书是,例如我跟你是朋友,我跟你当然住在同一个地方,后来我要去别的地方了,我就带着家乡的鸽子离乡背井,有天我有事情要联络你,我就把字条放在鸽子脚上一种专门放信的东西的里面,再把鸽子放出去,鸽子就会飞到家乡去,你就会发现那只鸽子和我的信,雁子也是,她们都是利用鸟类的习性。

公元前3000年左右,埃及人就开始用鸽子传递书信了。我国也是养鸽古国,有着悠久的历史,隋唐时期,在我国南方广州等地,已开始用鸽子通信。

二. 软件飞鸽传书(IP Messenger)

飞鸽传书

,是由日本人Shirouzu Hiroaki (白水 启章)所发明的免费软件, 是一款局域网内即时通信软件,基于 TCP/IP(UDP)。可运行于多种操作平台(Win/Mac/UNIX/Java),并实现跨平台信息交流。不需要服务器支持, 支持文件/文件夹的传送 (2.00版以上),通讯数据采用 RSA/Blofish 加密 (2.00版以上),十分小巧,简单易用,而且你可以完全免费使用它。目前已有的版本包括: Win32, Win16, MacOS, MacOSX, X11, GTK, GNOME,Java 等, 并且公开源代码.

--------------------------------------------------------------------------------

许可协议(BSD License)

Copyright (c) 1996-2004 SHIROUZU Hiroaki All rights reserved.

Redistribution and use in source and binary forms, with or without

modification, are permitted provided that the following conditions

are met:

飞鸽传书

Redistributions of source code must retain the above copyright

notice, this list of conditions and the following disclaimer.

Redistributions in binary form must reproduce the above copyright

notice, this list of conditions and the following disclaimer in

the documentation and/or other materials provided with the

distribution.

Neither the name of the SHIROUZU Hiroaki nor the names of its

contributors may be used to endorse or promote products derived

from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS

FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE

COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,

INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,

BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;

LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER

CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT

LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN

ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE

POSSIBILITY OF SUCH DAMAGE.

--------------------------------------------------------------------------------

3. 系统要求

Microsoft Windows 95/98/Me/NT4.0/2000/XP/2003

95/98/NT4.0 ... 要求 comctl32.dll(公共控件) 的版本为 5.x 或更高.

(如果你安装的 IE 是 5.x 或更高版本, 那么就不必担心这个问题了)

注意: Windows 3.1(和 NT3.5x), 请使用 IP Messenger for Win16.

--------------------------------------------------------------------------------

4. 使用说明

< 安装/卸载 >

执行 setup.exe 你可以将 IPMsg 安装到指定目录, 或者重新注册到启动组.

如果需要删除 IPMsg, 请先从控制面板中卸载, 再手动删除 IPMsg 目录.

< 系统托盘区图标 >

左键双击图标, 即可打开发送消息窗口.

右键点击图标, 可进入 [服务设置], [离开] 等.

< 发送消息窗口 >

- 发送消息时, 若勾选了 [封装], 则接收者要先打开信封才能看到消息,

如果你还勾选了 [上锁], 则接收者在打开信封时还需要输入密码.

(密码是由接收者自己在 [服务设置] 中设置的)

- 若要发送文件/文件夹, 可直接将文件/文件夹拖入发送消息窗口

或在发送消息窗口上点击右键, 再选择发送文件或发送文件夹

- 传送文件/文件夹时, 当接收者还没有保存(下载)文件/文件夹时,

若发送者关闭或重启了 IPMsg, 则附带的文件信息将被清除,

接收者将不能继续接收(下载)到此文件.

- 用户列表前缀符号说明

":" 表示用户处于离开模式.

"|" 表示用户使用的不是 2.0 以上版本的 IPMsg,

将不支持文件/文件夹的传送, 并且不支持通信数据加密.

"|"(短线) 表示只支持文件/文件夹的传送.

- 拖动列表表头标题项可改变其顺序, 并可点击右键选择"保存列表顺序"

- 在消息输入窗口中, 可使用 Ctrl+Tab 输入制表符 Tab.

- 在发送消息窗口上点击右键, 可以进入设置显示优先级, 选择工作组,

搜索用户(Ctrl+F), 传送文件, 传送文件夹, 保存列表顺序, 字体设置,

窗口大小设置, 固定窗口位置, 列表显示设置.

- 在用户名上点击右键, 可设置其显示优先级

优先级按由小到大的顺序排序

- 通过设置显示优先级, 可将经常联系的用户至于列表顶端,

或者隐藏不需要联系的用户

< 接收消息窗口 >

- 在接收消息窗口上点击右键, 可以进入字体设置,

窗口大小设置, 固定窗口位置.

- 接收消息窗口标题栏中的 "+" 或 "-" 表示通信数据使用了加密算法

"+" 表示 RSA/1024 位, blowfish/128 位加密

"-" 表示 RSA/512 位, RC2/40 位加密

- 如果你收到的消息附带了文件, 将会显示出附件按钮.

点击按钮即可保存文件.

< 其他 >

- 如果需要(通过路由器)连接到广域网, 则需要设置广播地址.

详见广域网设置(广播设置)

- 其它功能都很容易理解, 你试一试就明白了

--------------------------------------------------------------------------------

5. 相关信息

- 所有的设置信息都保存在注册表的以下位置:

\HKEY_CURRENT_USERSoftwareHSTools

用户密码以不可逆加密方式存储.

*******************************************************************

* 如果你忘记了密码, 可以在注册表中将此键值删除 *

* \HKEY_CURRENT_USERSoftwareHSToolsIPMsgEngPasswordStr *

*******************************************************************

- 本软件使用的默认端口为 2425

若仅使用 UDP 协议的端口, 将不能传送文件/文件夹

(如果安装了防火墙, 则必须打开相应的 TCP 和 UDP 端口)

- 本软件为自由软件, 你可以随意传播, 但源码使用请参见许可协议.

- 只有在启动或退出程序, 使用离开模式, 刷新在线用户时 IPMsg 才会进行消息广播.

- 本软件由 Microsoft Visual C++ 6.0 编译

--------------------------------------------------------------------------------

6. 广域网设置(广播设置)

- 主机号全部为 1 的 IP 地址, 即广播地址

例如, 连接到一个 C 类子网(即 24 位网络号, 8 位主机号), IP 地址为

aaa.bbb.ccc.ddd, 其广播地址即为: aaa.bbb.ccc.255

若对方处于另一个私有子网中, 广播可能无效.

- 更多问题, 请参阅相关资料或咨询你的网络管理员.

- 若两台主机的连接经过了多个路由器, 请直接指定对方IP地址

- 拨号上网用户请勾选 [拨号连接]

当刷新在线用户列表时, 列表不会被清空

--------------------------------------------------------------------------------

7. 补充

- 启动飞鸽传书前, 你可以指定其运行时使用的端口,

且可以使用不同的端口打开多个窗口. 用法如下:

ipmsg.exe 2426 (你可在快捷方式上设置)

但是你只能与同时也使用该端口的用户通信.

- 所以你尽可选用你喜欢的端口运行本软件.

介于 10000 至 60000 可能更安全些.

你也可以咨询你的网络管理员.

- 如果有多个网卡(IP), 你可以将飞鸽传书与指定的网卡(IP)进行绑定.

命令格式如下(你可以在快捷方式上设置):

ipmsg.exe [端口] /NIC IP地址

例如:

C:>ipmsg.exe /NIC 192.168.10.100

- 支持命令方式发送消息

命令格式如下:

ipmsg.exe [端口] /MSG [/LOG][/SEAL] <主机名或IP地址> <消息>

例如:

C:>ipmsg.exe /MSG /SEAL localhost Hello.

- 操作技巧.

1. 隐藏/显示 窗口 Ctrl + D

2. 按住 Ctrl 键再点 [刷新] 可保持现有用户, 搜索新上线的用户

3. 打开发送/接收消息窗口 Ctrl + Alt + S / R (需要进行详细设置)

4. 打开搜索窗口 Ctrl + F

5. 接收到多个文件, 保存时可勾选 [全部]

--------------------------------------------------------------------------------

8. 支持

- IPMsg 的技术讨论区是开放的.

如果你想订阅相关邮件, 请联系 ipmsg-subscribe@ring.gr.jp

- 欢迎报告 bug, 以及提出建议

- 如果你有任何疑问, 请 E-mail 联系.

shirouzu@h.email.ne.jp

中文版可联系阿志: hiwyz@163.net

- 发送错误报告, 请勿必记录以下信息:

软件版本, 操作系统, 故障描述, 以及故障重现方法等.

--------------------------------------------------------------------------------

9. 更新历史

ver 1.00 ... 日文版 (1996/08/19)

ver 1.31 ... 英文版/日文版 (1997/09/01)

ver 2.00 ... 英文版/日文版 (2002/11/19)

支持文件/文件夹传送

支持通信数据加密

ver 2.03 ... Bug 修正 (文件传送引起缓冲溢出)

广播设置支持主机地址(FQDN)解析

ver 2.04 ... 增加绑定网卡(IP)功能

ver 2.05 ... Bug 修正 (2.04版当激活发送/接收消息窗口时,无法注销/关闭系统)

ver 2.06 ... 很小的调整

ver 2007 ... 全面调整软件的界面可用性、性能稳定性

--------------------------------------------------------------------------------

三. 软件原理局域网聊天软件飞鸽传书是目前比较流行的局域网即时通讯软件,由于历史悠久,它具有比较多的用户。 因为FreeEIM的实现原理和飞鸽传书差不多,希望广大用户了解其原理后,在使用时更加得心应手。

开发多年的飞鸽,在他的基础上增加了些许功能,例如语音对话,这里继续讨论FreeEIM(飞鸽传书),前几天,详细的了解了FreeEIM(飞鸽传书)的网络协议,详细分析并且实现了FreeEIM(飞鸽传书)的消息传递过程,这里就FreeEIM(飞鸽传书)中的文件和文件夹的传输做详细的说明。

在FreeEIM(飞鸽传书)中,如果要进行文件或者文件夹的传输,首先需要做的就是消息的应答,通过UDP发送文件传输报文,另外的FreeEIM(飞鸽传书)客户端收到报文后,使用TCP协议发送应答报文,这样就开始进行文件的传输了。

这里开启两个线程,线程1负责文件的传送,线程2负责文件的接受,下边做一一说明。

首先,我们知道,可以发送多个文件,这些文件需要建立链表保存信息。

typedef struct file_info

{

struct file_info *next; //双向链表

struct file_info *forward;

char *file; //文件名

int type; //文件类型:文件或者文件夹

int size; //文件大小

struct sockaddr_in addr; //目标网络信息

} FILE_INFO;

[1]文件传送链表由专门的线程维护,这样,线程1就可以专心进行处理文件传输队列就可以了,线程1始终查询这个链表,如果表头为NULL,就说明没有要传输的文件,表头非空,就开始发送报文,获得正确的应答后,就可以开始文件的传输了,文件传输结束,将相应的链表节点删除。这里借鉴了很多程序中使用非常广泛的“命名池”相关的概念,只不过这里我们使用的是“文件池”,可以这么认为,如果有文件要传输,可以不用考虑是否有文件正在传输,只要把要传输的文件放入 “文件池”就可以了 , 同时,不用考虑“文件池”的大小,线程1是文件池的服务线程,它检测文件池的大小,如果非空,就会逐次传输文件。

这里需要特别注意的就是关于文件夹的传输,这个FreeEIM(飞鸽传书)一个难点,应为对与文件夹的内容是没有显示的,需要我们逐次的判断,在飞鸽传书中是这么处理的,如果是一个文件夹,就发送文件属性为IPMSG_FILE_DIR的信息包,FreeEIM(飞鸽传书)客户端收到这个信息包后,就创建这个文件夹,然后发起发送的FreeEIM(飞鸽传书)客户端,进入文件夹,传送文件夹内的文件,如果该文件夹下,还有文件夹,使用相同的方法,在文件夹内的文件传送结束后,就发送FREEEIM_FILE_RETPARENT信息包,接受的FREEEI_FILE_RETP报文的FreeEIM(飞鸽传书)客户端,执行返回上一级目录,FreeEIM(飞鸽传书)发送端,就需发送目录下的文件。这样循环操作,最终完成文件的传输,这个过程比较难以理解。

有了上边的知识,开发文件传输功能就变得简单多了,文件的接受也可以类推了,同样开启一个线程维护接受文件链表,逐次接受身下的文件,链表为空时。文件传输会遇到文件读写问题,有的文件发送是被打开了,这样会造成访问违规,所以要有相应的处理,才能让程序更加稳健。

程序启动时先读取用户配置文件,一般是"*.ini"格式,然后,使用Winsock的广播消息给整个局域网发送一个数据包,这时候,如果其他电脑已经运行了飞鸽传书,那么他收到这个包后,会将包的信息读取出来,当然,这个包里有用户的IP,用户名,性别等等。这样,在用户列表里就多了一个用户了。他的用户检查方式就如此简单而已。至于跨网段的实现,只需简单地修改一下广播地址就行了,如果不考虑速度,你可以给整个internet发广播消息。 消息发送,文件传输这些功能,都比较简单,如果你会网络编程,给你对方IP地址,这些功能实现起来再简单不过了。语音、视屏等,只需编写一些语音视频采集代码,传书的话,就像传文件一样。这里给段广播消息的实现代码吧:

// 发送广播登陆消息

void EM_UserLogin::SendLogin_BC(LPEM_DATA msg)

{

SOCKET m_socket;

m_socket = socket(AF_INET, SOCK_DGRAM, IPPROTO_IP);

if (INVALID_SOCKET == m_socket)

{

MessageBox(0, "socket failed.", NULL, MB_OK);

}

SOCKADDR_IN sin;sin.sin_addr.s_addr = htonl(INADDR_BROADCAST);

sin.sin_family = AF_INET;

sin.sin_port = htons(BROADCAST_SEND_PORT);BOOL bOpt = TRUE;

if (SOCKET_ERROR == setsockopt(m_socket, SOL_SOCKET, SO_BROADCAST, (char*)&bOpt, sizeof(bOpt)))

{

// Error occurred

::MessageBox(0,"BC setsockopt error.",0,0);

return;

}

char *tmpBuf = msg->GetBuffer();

if (SOCKET_ERROR == sendto(m_socket, tmpBuf, msg->GetLength(), 0, (PSOCKADDR)&sin, sizeof(sin)))

{

// Error occurred

::MessageBox(0,"BC sendto error.",0,0);

return;

}closesocket(m_socket);

}

操作技巧1、隐藏/显示窗口Ctrl+D

2、按住Ctrl键再点[刷新]可保持现有用户,搜索新上线的用户

3、打开发送/接收消息窗口Ctrl+Alt+S/R(需要进行详细设置)

4、打开搜索窗口Ctrl+F

5、接收到多个文件,保存时可勾选[全部]

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
如何用java替换看不见的字符比如零宽空格&#8203;十六进制U+200B
 干货   2023-09-10
网页字号不能单数吗,网页字体大小为什么一般都是偶数
 干货   2023-09-06
java.lang.ArrayIndexOutOfBoundsException: 4096
 干货   2023-09-06
Noto Sans CJK SC字体下载地址
 干货   2023-08-30
window.navigator和navigator的区别是什么?
 干货   2023-08-23
js获取referer、useragent、浏览器语言
 干货   2023-08-23
oscache遇到404时会不会缓存?
 干货   2023-08-23
linux下用rm -rf *删除大量文件太慢怎么解决?
 干货   2023-08-08
刀郎新歌破世界纪录!
 娱乐   2023-08-01
js实现放大缩小页面
 干货   2023-07-31
生成式人工智能服务管理暂行办法
 百态   2023-07-31
英语学习:过去完成时The Past Perfect Tense举例说明
 干货   2023-07-31
Mysql常用sql命令语句整理
 干货   2023-07-30
科学家复活了46000年前的虫子
 探索   2023-07-29
英语学习:过去进行时The Past Continuous Tense举例说明
 干货   2023-07-28
meta name="applicable-device"告知页面适合哪种终端设备:PC端、移动端还是自适应
 干货   2023-07-28
只用css如何实现打字机特效?
 百态   2023-07-15
css怎么实现上下滚动
 干货   2023-06-28
canvas怎么画一个三角形?
 干货   2023-06-28
canvas怎么画一个椭圆形?
 干货   2023-06-28
canvas怎么画一个圆形?
 干货   2023-06-28
canvas怎么画一个正方形?
 干货   2023-06-28
中国河南省郑州市金水区蜘蛛爬虫ip大全
 干货   2023-06-22
javascript简易动态时间代码
 干货   2023-06-20
感谢员工的付出和激励的话怎么说?
 干货   2023-06-18
 
>>返回首页<<
 
 
静静地坐在废墟上,四周的荒凉一望无际,忽然觉得,凄凉也很美
© 2005- 王朝网络 版权所有