局域网通信软件_第1页
局域网通信软件_第2页
局域网通信软件_第3页
局域网通信软件_第4页
局域网通信软件_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、目 录1 绪论. 11.1本程序的开发背景. 11.2开发环境. 11.3 Java语言.11.4 关于Eclipse. 22 程序结构和设计思想. 42.1本文解决的主要技术问题. 42.2程序设计结构. 42.3程序设计思想. 53 程序分析和具体实现. 73.1目录选择器. 73.2重要图形界面模块的实现. 103.3任务栏托盘图标和任务栏弹出对话框. 173.4信息收发和文件传输的实现. 213.5使用外部程序包. 283.6发布程序. 331 绪论1.1 本软件的开发背景当今,是一个信息高度发达的时代,计算机无疑已经成为网络通信的主角,生活节奏的加快,使得人们对通信速度的要求越来越高

2、。对于在局域网内的计算机之间的数据交互,尤其是文件传输,通常,人们习惯于通过借助于移动存储介质,采取重复拷贝的方式来实现。这种传统文件传输方式存在诸多缺点,比如:1.消耗时间长,反复拔插存储介质过程繁琐;2.文件交互频繁,加速了计算机病毒的传播;3.虽然可以通过操作系统实现在局域网内的数据共享,但终因操作困难而使人们望而却步。在如此多困难之下,人们不禁会考虑,能不能通过软件来实现计算机之间的数据交互?答案是肯定的。本程序将针对这些问题进行设计。1.2 开发环境操作系统:Microsoft Windows XP程序语言:Java 2开 发 包:Java(TM) 2 Standard Editio

3、n (6.0)开发平台:Eclipse 3.0+Swing Designer+JRE6.01.3 Java语言Java平台演进到Java2后,分别针对不同领域的需求被分成三个版本,亦即J2EE、J2SE、J2ME。本程序使用J2SE。J2SE是Java的标准版本 (Java2 Standard Edition), 定位在客户端,主要用于桌面应用软件的编程。J2SE 包含那些构成Java语言核心类库。Java语言区别于其它编程语言的特点主要有: (1)平台无关性(2)安全性 (3)面向对象(4)分布式(5)键壮性本程序中,突出体现了Java语言的面向对象编程的特点,将对象实例化的模式贯穿到了程序

4、设计的始终,而且严格按照Java语言的跨平台特性设计程序,完全摆脱了windows操作系统的束缚。1.4 关于EclipseEclipse 是一个开放源代码的、基于 Java 的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括 Java 开发工具JDK。虽然大多数用户很乐于将 Eclipse 当作 Java IDE 来使用,但 Eclipse 的目标不仅限于此。Eclipse 还包括插件开发环境(Plug-in Development Environment,PDE),这个组件主要针对希望扩展 Ecli

5、pse 的软件开发人员,因为它允许他们构建与 Eclipse 环境无缝集成的工具。由于 Eclipse 中的每样东西都是插件,对于给 Eclipse 提供插件,以及给用户提供一致和统一的集成开发环境而言,所有工具开发人员都具有同等的发挥场所。这种平等和一致性并不仅限于 Java 开发工具。尽管 Eclipse 是使用 Java 语言开发的,但它的用途并不限于 Java 语言;例如,支持诸如 C/C+、COBOL 和 Eiffel 等编程语言的插件已经可用,或预计会推出。Eclipse 框架还可用来作为与软件开发无关的其他应用程序类型的基础,比如内容管理系统。Eclipse 是一个开放源代码的、

6、基于 Java 的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。图1-1为Eclipse3.0的编程界面。图1-1 Eclipse3.0的编程界面2 程序结构和设计思想2.1 本程序需要解决的主要技术问题1.提供友好的用户界面2.实现信息收发3.实现文件传输和文件夹传输4.为程序添加系统托盘图标5.保存用户设置信息2.2 程序设计结构本程序按照功能可分为两个层:界面层和网络通信层。其中界面层主要采用Java Swing编程技术编写用户界面,网络通信层采用Java Socket技术编写数据交互程序。随程序的容量不断扩大,在同一个目录下存放所有的代码和执行文

7、件,显得十分混乱,加大了不必要的工作量。因此,为了方便代码和其他资源文件的管理,本程序将所有的代码文件按功能分为一下几个功能包,它们实现的功能分别为:networker包:构建本程序的主窗体和系统托盘图标networker.about包: 提供用户帮助信息,介绍程序设计的相关信息ponent包: 包含程序设计中几个重要的自定义功能组件networker.directorychooser包: 实现目录选取对话框networker.panels包: 包含了主面板设计中需要用到的区域面板包: 用于创建主面板中的文件发送区networker.system包:完成本程序网络通信networker.tas

8、kbardialog包:构建任务栏弹出对话框2.3 程序设计思想网络编程的基本模型就是客户机到服务器模型,简单的说就是两个进程之间相互通讯,然后其中一个必须提供一个固定的位置,而另一个则只需要知道这个固定的位置。并去建立两者之间的联系,然后完成数据的通讯。这里提供固定位置的通常称为服务器,而建立联系的通常叫做客户端。目前,在互联网上比较常见的聊天软件通常都将程序分成两个部分使用,即客户机程序和服务器程序。客户机程序在网上发布供用户使用而服务器程序则只供服务器使用,一般不公开。采用这种模式可以方便管理员对所有用户进行管理,但它必须单独提供一台计算机作为服务器。而对于在局域网内使用的聊天软件,由于

9、计算机的数量有限,而且计算机之间的服务关系经常变化或者根本没有服务关系,采用这种模式就显得力不从心了。所以,综合考虑上述因素,本程序在服务关系上做了作了一个新的设计,就是将客户机程序和服务器程序绑定在同一个软件上。当程序启动时,服务器程序监听各自端口,只负责接受来自客户机的信息并向客户机发送文件,客户机程序只负责向服务器发送信息并接受来自服务器的文件。Java对C/S模型的支持有很多种API,本程序中运用的Java Socket编程包含两个方面:一是基于UDP协议的Java DatagramSocket和Java DatagramPacket,二是基于TCP/IP协议的Java Socket和

10、Java ServerSocket。Java DatagramSocket/DatagramPacket是包中用于UDP通信协议的类,其中DatagramSocket称为报文套接字,主要用于创建UDP通信中的报文套接字并发送报文,DatagramPacket称为数据报,主要用于装载用户即将发送的报文。Java中运用这两个类进行UDP通信,实现快速的不可靠的简单数据传输。本程序中收发用户消息和系统消息的工作都由它们来完成。Java Socket/ServerSocket是包中用于TCP/IP通信协议的类,其中Socket称为客户机套接字,用于创建客户机程序,ServerSocket称为服务器套接

11、字,用于创建服务器。Java中运用这两个类进行TCP/IP通信,实现面向数据链接的可靠数据传输,本程序中收发文件(文件夹)都是由这两个类来完成的。由于计算机之间利用Java Socket进行的信息收发和文件传输事先是没有约定,要完成这些工作必须在程序中制定一个协议。本程序采用发送命令字的方式通知计算机完成相应工作,具体实现本文将在后面的章节中作具体介绍。3 程序分析和具体实现3.1 目录选择器在当前所有版本的JDK中,都没有实现过windows风格的目录选取对话框,本程序考虑到保存文件的需要,重新定义了一个类似功能的目录选取对话框,并具有跨平台特性。其效果图如图3-1:图3-1 目录选择器实现

12、目录选择器的类文件配置在networker.directorychooser包中,其中包含3个类:(1)TreeCell类public TreeCell(File f)(2)DCTreeCellRenderer类DCTreeCellRendererTreeCellRenderer接口,重写方法:public Component getTreeCellRendererComponent(JTree tree,Object o,boolean sel,boolean ex,boolean leaf, int row,boolean focus)(3)DirectoryChooser类Directo

13、ryChooser类,并实现了接口ActionListener,TreeExpansionListener,其中最重要的组件是树形组件,它把文件系统所有目录以树形结构转化为节点显示出来,用户可以很方便的在树形组件中浏览到文件系统中的所有目录。在DirectoryChooser中有几个方法是十分重要的,它们分别是:树选择事件:public void valueChanged(TreeSelectionEvent tse)树展开事件:public void treeExpanded(TreeExpansionEvent ee)初始化桌面:public void initDesk()为父节点添加子节

14、点:public void addChild(DefaultMutableTreeNode node)这里重点指出显示对话框并获取用户选择的路径:程序为DirectoryChooser类定义了两个静态变量/判断用户是否点了“确定”按钮public static boolean CHOOSE_FLAG=false;/提取用户选取的路径public static String DIRECTORY_PATH=null;显示对话框时,界面的阻塞状态,等待用户的相关操作,当用户点击“取消”或者是对话框关闭按钮时,CHOOSE_FLAG的值设为false,除了对话框退出以外,不进行任何操作,反之当用户点击

15、“确定”按钮时,设为true,DIRECTORY_PATH的值被设定为相应的路径值,实现语句如下:显示对话框:public boolean ShowDialog()setVisible(true);return CHOOSE_FLAG;调用方法:DirectoryChooser dialog = new DirectoryChooser(frame,title);boolean f=dialog.ShowDialog();if(f) /获取选择路径else ;/什么都不做3.2 重要图形界面模块的实现面向对象编程的最大好处就在于将一个大型的程序分成若干个模块来实现,而且模块之间的实现过程一般不

16、会互相影响,哪个模块出了问题只需修改它本身,而不用改动其他模块。本程序也毫不例外的运用了面向对象编程的这种特点,下面将一一介绍本程序中用到的程序模块。3.2.1 在线用户列表在线用户列表用于显示局域网内其他在线用户,它位于主面板的左侧,如图3-2所示:图3-2 在线用户列表构建在线用户列表用到了ponents包中的UserItem类、UserList类、MyRenderer类和neworker.panels包中的UserPane类。它们的实现方法分别为:UserItem类UserItem类是为构建在线用户列表而设计的类,用来存储在线用户信息(用户名,IP地址,用户头像地址),其构造函数为:pu

17、blic UserItem (String name,String ipaddress,String imagepath) /name载入用户名,ipaddress,imagepathUserList类UserList类添加本地用户对象:public void addMe()添加用户:public void addUser(UserItem item)删除指定用户:public void removeUser(String username) 获取选中用户的用户名:public String getSelectedUserName() 获取所有在线用户的IP地址:public String g

18、etAllIPs()删除所有用户对象: public void removeAllUser() 判断用户是否已在用户列表中:public boolean exists(UserItem item) MyRenderer类 ListCellRenderer接口,重写方法:public Component getListCellRendererComponent(JList list, Object o, int index, boolean isSelected, boolean hasFocus)构建MyRenderer的意义是十分重大的,JList在默认情况下是不支持显示多行文本和图片的,只

19、有通过构建一个类,也就是像MyRenderer这样的类,并让JList的对象调用方法:setCellRenderer(new MyRenderer()来实现。UserPane类UserPane类public UserPane(UserList list)3.2.2 文件发送区文件发送区用于存放即将发送的文件列表并发送文件和文件夹,它位于程序主面板的中上部,其效果图如图3-3:图3-3 文件发送区LabelRenderer、FileIcon、FileTable、MScroll和FilePane五个类。在文件发送区,用户可以通过两种方式向文件发送区添加发送对象:1.通过菜单栏或右键菜单中“传送文件

20、”、“传送文件夹”菜单项或通过工具栏中相应图标按钮打开文件或文件夹选择器;2.直接在windows资源管理器中将指定文件拖拽至文件发送区。filepaneLabelRenderer类LabelRenderer TableCellRenderer接口,从而改写了JTabel表格的单元格,实现了带图标的单元格。重写方法:public Component getTableCellRendererComponent(JTable t,Object value, boolean isSelected,boolean hasFocus,int row,int col)FileIcon类FileIconIm

21、ageIcon icon=(ImageIcon)FileSystemView.getSystemIcon(file)获取文件的系统图标。FileTable类FileTable类是filepane包中最重要的一个类,它是装载文件列表的主体。它继承了类,实现了接口DropTargetListener, DragGestureListener, DragSourceListener, ActionListener。这里重点讨论java swing的拖拽事件。实现组件的拖拽功能,必须让组件实现DropTargetListener, DragGestureListener, DragSourceList

22、ener接口,完成以下步骤:(1)创建DragSourceDragSource dragSource = new DragSource();dragSource.createDefaultDragGestureRecognizer(this, DnDConstants.ACTION_COPY_OR_MOVE, this);public void drop(DropTargetDropEvent dtde)(2)重写拖拽事件方法public void drop(DropTargetDropEvent dtde)Mscroll类:Mscroll类DropTargetListener, DragGe

23、stureListener, DragSourceListener接口,用于给FileTable添加滚动窗格,为完善FileTable的拖拽功能而设计。在初始状态下,FileTable中没有对象,这时拖拽功能不能依靠FileTable来实现,必须借助一个载体来实现拖拽功能,将发送对象添加入文件发送区,而给FileTable添加滚动窗格的JScrollPane则是最佳选择,MScroll则由此而产生。FilePane类:FilePane类将文件发送区的最终形式添加到程序主面板中,用户可以在在线用户列表中选择一个在线用户点击“发送”按钮发送文件,当欲发送对象不在在线用户列表中时,可以点击“发送至”

24、按钮,在弹出的输入框中输入对方的IP地址,即可发送文件。发送过程涉及到socket编程,本文在后面的篇幅中再作介绍。3.2.3 文本发送区文本发送区用于发送用户自己输入的信息,它位于程序主面板的中下部,由networker.panels包中的SendMsgPane类实现,其效果图如图3-4所示:图3-4 文本发送区SendMsgPane类ActionListener,ItemListener。(1)右键弹出菜单的构造函数JPopupMenu pop=new JPopupMenu();(2)添加菜单项:pop.add(new JMenuItem();(3)为使用右键菜单的组件添加鼠标事件:com

25、ponent.addMouseListener(new MouseAdapter()public void mousePressed(MouseEvent evt) if (evt.isPopupTrigger()pop.show(evt.getComponent(),evt.getX(), evt.getY();public void mouseReleased(MouseEvent evt) if (evt.isPopupTrigger() pop.show(evt.getComponent(),evt.getX(), evt.getY(););各菜单项和按钮的功能及相关函数:复制:tex

26、tarea.copy();剪切:textarea.cut();粘贴:textarea.paste();全选:textarea.selectedAll();清空:textarea.setText(“”);删除:这个操作没有给定方法,用自定义函数实现:JTextArea area=new JTextArea();int start=area.getSelectionStart(), end=area.getSelectionEnd();String all=area.getText();before=all.substring(0,start);after=all.substring(end,al

27、l.length();area.setText(before+after);area.setFocusable(true);“发送”、“发送至”按钮的功能同文件发送区类似,此外文本发送区支持群发功能,当点击“群发”按钮时,程序会给每个在线用户发送同一个信息。发送过程同样涉及到socket编程,本文在后面的章节中作进一步的介绍。3.2.4超链接标签本文在3networkerpublic void mouseEntered(MouseEvent e)public void mouseExited(MouseEvent e)public void mouseClicked(MouseEvent e)

28、利用本地浏览器打开网页是JDK6.0中提供的新功能,其基本方法为:Desktop.getDesktop().browse(new URI(new URL(url);其中url为将要打开网页的网址;3.3 任务栏托盘图标和任务栏弹出对话框3.3.1 任务栏托盘图标Java实现系统托盘图标是sun公司在JDK6.0中新添加功能,它使用的api分别是位于java.awt包中的SystemTray和TrayIcon,其实现方式如下:SystemTray tray = SystemTray.getSystemTray();TrayIcon icon=new TrayIcon(image,tooltipt

29、ext,menu);tray.add(icon);其中,image是一个装载图片的Image,menu是一个菜单类PopupMenu;而tooltiptext则是一个字符串String,当鼠标放在托盘图标上时,托盘图标会弹出一个解释框显示tooltiptext,菜单中的菜单项功能与主窗体的相应菜单项功能一致。本程序中的networker.TaskBarIcon类利用了这些api为程序添加了一个托盘图标,其效果图如图3-5:图3-5 托盘图标3.3.2 任务栏弹出对话框有经验的朋友都知道,我们在使用很多软件的过程中,经常会看到任务栏托盘的上方会弹出一些提示用户的对话框,比如:卡巴斯基在检测到计算

30、机有病毒威胁时,会弹出对话框提示用户是否清除病毒;腾讯QQ报道一些小型新闻也会从任务栏弹出对话框提示用户查看;web迅雷在下载完文件或下载失败时,都会使用相同的方式提示用户。由于它不会占用用户太多的屏幕分量,而又达到了提示用户的效果,这种方式得到了越来越多用户和程序员的认可。然而在java的世界里,考虑到程序的跨平台性,目前在所有版本JDK的类库中都没有提供实现这种效果的API,幸运的是,Java Swing的设计十分巧妙,程序员可以利用其高度的可扩展性构建符合要求的功能模块。本程序在networker.taskbardialog包中就利用Java中已有的API实现了这种功能,效果图如图3-6

31、:图3-6 任务栏弹出对话框TaskBarDialog类TaskBarDialog类是完成此功能的基类,它继承自javax.swing.Jdialog类,并实现了Runnable接口,程序启动时开通一个线程,通过dialog.setBounds方法不断改变窗体的大小和位置,当窗体达到目标大小和位置时,并使用方法SwingUtilities.updateComponentTreeUI(this) 刷新界面,具体操作步骤如下:(1)首先获取屏幕大小Toolkit t=Toolkit.getDefaultToolkit();Dimension screen=t.getScreenSize();int

32、 w=(int)screen.getWidth();int h=(int)screen.getHeight();(2)然后获取通过构造函数传入的参数(窗体最终大小和任务栏宽度)public TaskBarDialog(int width,int height,int TaskBar)(3)开通线程while(flag) setBounds(w-width,h-(TaskBar+i),width,i); i+; if(i>height) flag=false;SwingUtilities.updateComponentTreeUI(this);(4)显示对话框public void sho

33、wDialog() setVisible(true);Thread t=new Thread(this);t.start(); ShowFileDialog类和DefaultSavaPath类ShowFileDialog类继承了TaskBarDialog ActionListener。它最终实现了从任务栏托盘弹出提示对话框的动态效果,对话框弹出后,用户可以根据提示进行保存文件的操作,从效果图上,可以清楚的看到,收到文件的文件名和文件大小,以及供用户操作的3个按钮“保存到”、“确定”、“拒绝”,当用户点击“拒绝”时,对话框退出,程序自动发送拒绝消息至文件发送方,通知对方取消操作;当用户点击“保存

34、到”按钮时,会弹出目录选择对话框,供用户选择一个保存目录,并通知发送方打开服务器准备发送文件;当用户点击“确定”按钮时,程序直接将文件保存在用户设定的默认保存目录,其中文件默认保存目录可以通过在主面板“设置”菜单中的“设置默认存取目录”菜单项来设置,taskbardialog包中的DefaultSavaPath类就是用来完成这个功能的。3.4 信息收发和文件传输的实现networker.system包是完成本程序网络通信的中心包,它工作在计算机后台,不与用户进行交互,但计算机之间的数据交互都是由它来完成的,是一个功能巨大默默无闻的net worker。3.4.1 自定义的Sys和SystemI

35、nfo类networker.system包的基本功能都是由Sys和SystemInfo类提供的,这两个类中的方法都是静态的,程序调用这些方法只需直接利用类名而不用构造它们的对象,大大简化了本程序网络通信设计的过程。Sys类中提供的方法有:获取系统时间public static String getDate()获取文件大小常规表达public static String getFileLengthExpress(File f)获取相对目录public static String getRelativePath(String a,String p)获取文件或文件夹总大小public static

36、long getLength(File f)获取局域网所有用户的IP地址public static String getUserIPs()SystemInfo类主要用于保存程序在使用过程中的配置信息,其中大量使用了外部程序包jdom.jar中java操作xml文档的api,调用过程在后面的章节中再作详细介绍。SystemInfo类中提供的方法有:设置和获取图像路径public static void setImagePath(String imagepath)public static String getImagePath()设置和获取用户名public static void setMyN

37、ame(String name)public static String getMyName()设置和获取皮肤public static void setLookAndFeel(String laf)public static String getLookAndFeel()设置默认存取路径public static void setDefaultSavePath(String savepath)public static String getDefaultSavePath()添加和获取好友列表public static void setUserList(String list)public s

38、tatic String getUserList()读取帮助文档public static String getHelpDoc(String str)3.4.2 数据交互基本思想和工作原理1.使用网络通信协议考虑到局域网发生错误的可能性很低,本程序中的所有的信息收发工作都采用UDP通信协议,原因是UDP通信速度快,弥补了java程序运行速度的不足;而所有的文件传输工作都采用TCP/IP协议,因为文件传输要考虑到安全性,必须保证计算机之间建立连接之后才能进行文件传输。2.客户端和服务器模式(C/S)由于本程序工作在局域网内数量有限的若干台计算机之间,像目前比较流行的网络软件(比如QQ,MSN等)

39、一样使用特定服务器的可能性不大,所以本程序必须考虑各终端的C/S通信机制。既然不能使用特定服务器,就要实现网络通信,那么每台计算机终端都必须有C/S程序,也就是说必须在同一台计算机上同时运行C/S程序。为了保证计算机之间通信不致混乱,本程序合理的安排了C/S程序的任务,即:程序启动时,服务器程序监听各自端口,只负责接受来自客户机的信息并向客户机发送文件,客户机程序只负责向服务器发送信息并接受来自服务器的文件,如此一来,客户机和服务器各司其职,各尽其责,使网络通信有条不紊,并且大大简化了程序设计的过程。3.使用命令字由于计算机之间进行互操作,不可避免的要使用到各种各样的操作命令,为了区分它们以用

40、户信息,程序中设定了一系列的命令字,如下:首先定义一系列静态整形数字和分隔符:private static int NETWORKER_CONNECT=0, NETWORKER_EXIT=1, NETWORKER_MESSAGE=2, NETWORKER_FILE=3, NETWORKER_DIRECTORY=4, NETWORKER_FILE_YES=5, NETWORKER_FILE_NO=6, NETWORKER_DIRECTORY_YES=7, NETWORKER_DIRECTORY_NO=8, NETWORKER_JUMP=10;public static String SEP=&q

41、uot;|"然后设定命令字:(1)扫描用户NETWORKER_CONNECT|本地用户名|本地IP|本地用户头像地址 (2)退出连接 NETWORKER_EXIT|本地用户名|本地IP (3)发送消息 NETWORKER_MESSAGE|本地用户名|本地IP|当前时间|消息内容(4)发送文件提示 NETWORKER_FILE|本地用户名|本地IP|当前时间|文件名|文件大小描述|文件大小|文件本地路径(5)发送文件夹提示 NETWORKER_FILE|本地用户名|本地IP|当前时间|文件夹名|文件夹大小描述|文件夹大|总文件数 (6)回复命令 YES_OR_NO|本地用户名|本地IP

42、|文件外地路径(7)振动对话框 NETWORKER_JUMP|本地用户名|本地IP3.4.3 数据交互过程在了解数据交互基本思想和工作原理之后,再来看看java是如何将这些数据发送出去的。networker.system包中提供了UDPClient、UDPServer、TCPClient、TCPServer四个类来实现数据交互,从类名可以看出它们分别用于UDP和TCP/IP协议中的c/s模式。它们的实现过程分别为:UDPClient类UDPClient类主要完成程序的UDP通信的客户端工作,系统信息和用户发送的消息都是由它实现的,其中使用最频繁的函数是java UDP通信函数,这里重点提出利用

43、.DatagramSocket类进行报文发送的方法:(1)首先创建一个报文套接字DatagramSocket ds=new DatagramSocket();(2)然后获取发送对象的IP地址InetAddress ia=InetAddress.getByName(ip);(3)创建报文DatagramPacket dp=new DatagramPacket(byte d,int len,ia,int port);(4)最后发送报文并关闭套接字ds.send(dp);ds.close();UDPServer类 UDPServer类负责接收其他客户机发送的命令字,对所接收的命令字进行处理,并通知本

44、地终端完成相应动作。接收并处理命令字步骤是:(1)首先开通一个线程监听某一固定端口DatagramSocket ds=new DatagramSocket(port);(2)然后接收命令字:DatagramPacket dp=new DatagramPacket(data,data.length);ds.receive(dp);String str=new String(dp.getData(),0,data.length).trim();(3)最后处理命令字。本程序中自定义了一个函数专门用来处理命令字,即: public void ManageMsg(String msg)以接收的命令字为参数,以分隔符“|”为界限,将这个参数中的信息一一分离出来,程序可以根据获取的有用信息作出相关动作。比如:当其他用户给本地用户发送消息时,本地用户的计算机终端会受到命令字:NETWORKER_MESSAGE|本地用户名|本地IP|当前时间|消息内容“|” 为界限进行拆分可以得到如表3-1所示信息:表3-1拆分命令字NETWORKER_MESSAGE通知计算机收到的时外地用户发送的消息本地用户名是那一台计算机给本地用户发送了消息本地IP获取对方的IP地址,方便回复消息当

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论