基于java的进程通信_第1页
基于java的进程通信_第2页
基于java的进程通信_第3页
基于java的进程通信_第4页
基于java的进程通信_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

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

文档简介

1、仲恺农业工程学院实验报告纸 计算机科学与工程 (院、系) 网络工程 专业 083 班 组 操作系统学号200810224311 姓名李志冬 实验日期 2011-5-27 教师评定 实验二 进程通信一实验目的:1、 理解进程消息通信的概念,如何实现两个创建进程之间的数据传递。2、 理解进程共享变量的进程通信。二实验内容:1、 选择Window或Linux,并选择该操作系统中一种进程通信的方式。2、 查找该进程通信的API使用方式,设计出一个合适的应用程序。3、 采用高级程序语言实现该应用程序。4、 测试进程通信程序,能够满足微机操作系统中进程之间的通信。三实验步骤和过程 1、 进程通信的知识点:

2、 (1)、进程通信的概念:进程之间互相交换信息的工作称为进程通信IPC(2)、进程通信的方式:信号(signal)通信机制; 共享存储区(sharedmemory)通信机制;共享文件(shared file)通信机制;消息传递(message passing)通信机制。(3)、进程通信机制:管道通信机制,共享主存通信机制,消息传递通信机制。2、程序设计环境(1)、Widows7操作系统,eclipse平台!(2)、套接字(socket)通信套接字通信,其中一个运行在客户端,称之为ClientSocket,另一个运行于服务器端面,称为ServerSocket。根据连接启动的方式以及本地要连接的目

3、标,套接字之间的连接过程可以分为三个步骤:服务器监听、客户端请求、连接确认。服务器监听是指服务端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态。客户端请求是由客户端的套接字提出连接请求,要连接的目标是服务器端套接字。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器套接字的地址和端口号,然后再向服务器端套接字提出连接请求。连接确认是当服务器端套接字监听到或者说接收到客户端套接字的连接请求时,它就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的信息发送给客户端,一旦客户端确认了此连接,连接即可建立。而服务器端继续处于监听状态,继续接收其他

4、客户端的连接请求。使用套接字进行数据处理有两种基本模式:同步和异步。同步模式:同步模式的特点是在通过Socket进行连接、接收、发送数据时,客户机和服务器在接收到对方响应前会出于阻塞状态,即一直等到收到对方请求进才继续执行下面的语句。可见,同步模式只适用于数据处理不太多的场合。当程序执行的任务很多时,长时间的等待可能会让用户无法忍受。异步模式:异步模式的特点是在通过Socket进行连接、接收、发送操作时,客户机或服务器不会处于阻塞方式,而是利用callback机制进行连接、接收、发送处理,这样就可以在调用发送或接收的方法后直接返回,并继续执行下面的程序。可见,异步套接字特别适用于进行大量数据处

5、理的场合。使用同步套接字进行编程比较简单,而异步套接字编程则比较复杂。 Socker的通信过程 (3)、套接字进程通信用到的类如下:InetAddress, Socket, 和 ServerSocket。 InetAddress对象描绘了32位或128位IP地址,Socket对象代表了客户程序流套接字,ServerSocket代表了服务程序流套接字,所有这三个类均位于包中。InetAddress类InetAddress类在网络API套接字编程中扮演了一个重要角色。参数传递给流套接字类和自寻址套接字类构造器或非构造器方法。InetAddress描述了32位或64位IP地址,要完成这个功能,Ine

6、tAddress类主要依靠两个支持类Inet4Address 和 Inet6Address,这三个类是继承关系,InetAddrress是父类,Inet4Address 和 Inet6Address是子类。getByName(String host)方法返回一个InetAddress对象,该对象包含了一个与host参数指定的主机相对应的IP地址,对于指定的主机如果没有IP地址存在,那么方法将抛出一个UnknownHostException异常对象。 如下:public void actionPerformed(ActionEvent e)/事件处理程序 byte buffer=input.ge

7、tText().trim().getBytes(); String s=input.getText(); try InetAddress address=InetAddress.getByName("127.0.0.1");/获取本机地址DatagramPacket data_pack=new DatagramPacket(buffer,buffer.length, address,666); DatagramSocket mail_data=new DatagramSocket(); out.append("进程1 说:n"+" "

8、+s+"n"); mail_data.send(data_pack); input.setText(""); catch(Exception e1) 创建了一个Socket对象,那么它可能通过调用Socket的 getInputStream()方法从服务程序获得输入流读传送来的信息,也可能通过调用Socket的 getOutputStream()方法获得输出流来发送消息。在读写活动完成之后,客户程序调用close()方法关闭流和流套接字。如本程序:ServerSocket server; /服务端 Socket Client;/客户端 InputStre

9、am DataIn;/ OutputStream DataOut; Thread thread; DatagramPacket类在使用自寻址包之前,你需要首先熟悉DatagramPacket类,地址信息和自寻址包以字节数组的方式同时压缩入这个类创建的对象中DatagramPacket有数个构造函数,即使这些构造函数的形式不同,但通常情况下他们都有两个共同的参数:byte buffer 和 int length,buffer参数包含了一个对保存自寻址数据包信息的字节数组的引用,length表示字节数组的长度最简单的构造函数是DatagramPacket(byte buffer, int leng

10、th),这个构造函数确定了自寻址数据包数组和数组的长度,但没有任何自寻址数据包的地址和端口信息,这些信息可以后面通过调用方法setAddress(InetAddress addr)和setPort(int port)添加上。构造函数的时候同时包括地址和端口号,可以使用DatagramPacket(byte buffer, int length, InetAddress addr, int port)函数如本程序:public void actionPerformed(ActionEvent e)/事件处理程序 String s=input.getText(); byte buffer=inpu

11、t.getText().trim().getBytes(); try InetAddress address=InetAddress.getByName("127.0.0.1");DatagramPacket data_pack=new DatagramPacket(buffer,buffer.length, address,888); DatagramSocket mail_data=new DatagramSocket(); out.append("进程2 说:n"+" "+s+"n"); mail_data.

12、send(data_pack); input.setText(""); (4)、本程序运行的主窗口结果截图如下:服务端程序如下:public JC2( ) super("Lizhidong2"); Container c=getContentPane(); c.setLayout(null); thread=new Thread(this); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JPanel panel=new JPanel(); JPanel panel2=new JPanel(); JScr

13、ollPane js=new JScrollPane(out); js.setBounds(10,10,380,200); panel.setBounds(0,220,400,50); out.setBackground(Color.yellow); out.setLineWrap(true); panel.add(label); panel.add(input); input.addActionListener(this); c.add(js); c.add(panel); setBounds(400,150,400,280); setVisible(true); setResizable(

14、false); Thread thread=new Thread(this); thread.start(); 客户端程序如下:public JC1( ) super("lizhidong1"); Container c=getContentPane(); c.setLayout(null); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JPanel panel=new JPanel(); JPanel panel2=new JPanel(); JScrollPane js=new JScrollPane(out); js

15、.setBounds(10,10,380,200); panel.setBounds(0,220,400,50); out.setBackground(Color.cyan); out.setLineWrap(true); panel.add(label); panel.add(input); input.addActionListener(this); c.add(js); c.add(panel); setBounds(600,150,400,280); setVisible(true); setResizable(false); Thread thread=new Thread(this); thread.start();/线程负责接收数据包 (5)、进行通信测试 本程序我主要在一台pc机模拟两台pc机通信(两台pc机也可以进行通信,已经实验过),首先,把

温馨提示

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

评论

0/150

提交评论