飛鴿傳書(IP Messenger,簡為IPMsg)是一個小巧方便的即時通信軟件,它適合用于局域網內甚至廣域網間進行實時通信和文檔共享。特別是在局域網內傳送文件/文件夾的速度非常快!
- IPMsg 是一款局域網內即時通信軟件, 基于 TCP/IP(UDP).
- 可運行于多種操作平臺(Win/Mac/UNIX/Java), 并實現跨平臺信息交流.
- 不需要服務器支持.
- 支持文件/文件夾的傳送 (2.00版以上)
- 通訊數據采用 RSA/Blofish 加密 (2.00版以上)
- 十分小巧, 簡單易用, 而且你可以完全免費使用它
- 目前已有的版本包括: Win32, Win16, MacOS, MacOSX, X11, GTK, GNOME,Java 等, 并且公開源代碼。
本文演示了如何使用
Java的net包,向
IPMSG客戶端發送消息。
IPMSG Command 常量定義如下:
1 /*==========?Constant?Value?==========*/
?2 public static final long IPMSG_COMMASK?= 0x000000ff;
?3 public static final long IPMSG_OPTMASK?= 0xffffff00;
?4 public static final long IPMSG_NOOPERATION?= 0x00000000;
?5 public static final long IPMSG_BR_ENTRY?= 0x00000001;
?6 public static final long IPMSG_BR_EXIT?= 0x00000002;
?7 public static final long IPMSG_ANSENTRY?= 0x00000003;
?8 public static final long IPMSG_BR_ABSENCE?= 0x00000004;
?9
10
11
12 public static final long IPMSG_BR_ISGETLIST?= 0x00000018;
13 public static final long IPMSG_OKGETLIST?= 0x00000015;
14 public static final long IPMSG_GETLIST?= 0x00000016;
15 public static final long IPMSG_ANSLIST?= 0x00000017;
16
17 public static final long IPMSG_SENDMSG?= 0x00000020;
18 public static final long IPMSG_RECVMSG?= 0x00000021;
19
20 public static final long IPMSG_READMSG?= 0x00000030;
21 public static final long IPMSG_DELMSG?= 0x00000031;
22
23 public static final long IPMSG_GETINFO?= 0x00000040;
24 public static final long IPMSG_SENDINFO?= 0x00000041;
25
26 //?other?opt
27 public static final long IPMSG_ABSENCEOPT?= 0x00000100;
28 public static final long IPMSG_SERVEROPT?= 0x00000200;
29 public static final long IPMSG_DIALUPOPT?= 0x00010000;
30
31 //?send?opt
32 public static final long IPMSG_SENDCHECKOPT?= 0x00000100;
33 public static final long IPMSG_SECRETOPT?= 0x00000200;
34 public static final long IPMSG_BROADCASTOPT?= 0x00000400;
35 public static final long IPMSG_MULTICASTOPT?= 0x00000800;
36 public static final long IPMSG_NOPOPUPOPT?= 0x00001000;
37 public static final long IPMSG_AUTORETOPT?= 0x00002000;
38 public static final long IPMSG_RETRYOPT?= 0x00004000;
39 public static final long IPMSG_PASSWORDOPT?= 0x00008000;
40 public static final long IPMSG_NOLOGOPT?= 0x00020000;
41 public static final long IPMSG_NEWMUTIOPT?= 0x00040000;
42
43 public static final int?MAXBUF?= 8192;
44 /*==========?end?==========*/
IPMSG收發數據包的格式(一行):
1 version(IPMSG版本):no(消息編號,可以用系統時間):user(發送消息的用戶名):host(發送消息的主機名):command(上述?Command?常量,可以用?|?組合多個值):msg(消息內容)
示例(向IPMSG發送消息,需要先打開對方的IPMSG):
1 import java.io.IOException;
?2 import java.net.DatagramPacket;
?3 import java.net.DatagramSocket;
?4 import java.net.InetAddress;
?5 import java.net.SocketException;
?6 import java.net.UnknownHostException;
?7 import java.util.Date;
?8
?9 /**
10 ?*?@author?亂?7?8?糟?http://blog.csdn.net/comstep
11 */
12 public class?TestIPMSG
13 {
14 public static void?main(String[]?args)
15 ??{
16 ????DatagramSocket?socket;
17 ????InetAddress?address;
18
19 long IPMSG_SENDMSG?= 0x00000020;
20
21 ????String?SENDER?= "亂?7?8?糟";
22 ????String?HOST?= "Localhost";
23 ????String?MSG_CONTENT?= "Hello?World!";
24
25 try
26 ????{
27 ??????socket?= new?DatagramSocket();
28 ??????address?=?InetAddress.getByName("192.168.1.20");// 發送給消息的地址
29
30 /**
31 ???????*?IPMSG收發數據包的格式(一行):
32 ???????*?
33 ???????*?version(IPMSG版本):no(消息編號,可以用系統時間):user(發送消息的用戶名):
34 ???????*?host(發送消息的主機名):command(上述?Command?常量,可以用?|?組合多個值):
35 ???????*?msg(消息內容)
36 ???????*?
37 */
38 byte[]?buffer?=?("1:" + new?Date().getTime()?+ ":" +?SENDER?+ ":" +?HOST
39 + ":" + IPMSG_SENDMSG?+ ":" +?MSG_CONTENT).getBytes();
40
41 ??????DatagramPacket?packet?= new?DatagramPacket(buffer,?buffer.length,
42 ??????????address,?2425);
43 ??????socket.send(packet);?//?發送報文
44
45 ??????packet?= new?DatagramPacket(buffer,?buffer.length);
46 ??????socket.receive(packet);//?接收回應
47
48 ??????String?message?= new?String(packet.getData());?//?得到報文信息
49
50 ??????System.out.println(message);?//?顯示對方返回的信息
51 ????}
52 catch?(UnknownHostException?e)
53 ????{
54 ??????e.printStackTrace();
55 ????}
56 catch?(SocketException?e)
57 ????{
58 ??????e.printStackTrace();
59 ????}
60
61 catch?(IOException?e)
62 ????{
63 ??????e.printStackTrace();
64 ????}
65
66 ??}
67
68 }
69
你可以在 SourceForge 找到開源的 IP MSG for Java
http://blog.csdn.net/comstep
文章來源:
http://x-spirit.spaces.live.com/Blog/cns!CC0B04AE126337C0!278.entry