package pc;
//PipedStreamTest.java //启动类
import java.io.*;
public class PipedStreamTest
{
public static void main(String[] args) throws Exception
{
Sender t1 = new Sender(); //创建发送者对象;
Receiver t2 = new Receiver(); //创建接收者对象;
PipedOutputStream out = t1.getOutputStream();
PipedInputStream in = t2.getInputStream();
out.connect(in); //用于连接到PipedInputStream上,与in.connect(out)等价,connect方法有异常出现的可能
t1.start(); //启动线程
t2.start(); //启动线程
}
}
package pc;
import java.io.*;
//Receiver.java //接收者,也是一个线程类
public class Receiver extends Thread
{
private PipedInputStream in = new PipedInputStream(); //接受者是要读取外面的数据,所以接受者内部创建PipedInputStream对象用于读取外面的数据
public PipedInputStream getInputStream()
{
//返回管道输入流对象
return in;
}
//这是一个线程类,所以它应该覆盖Thread的run方法,run方法在线程类启动时自动运行
public void run()
{
//这里的run方法用于接收数据
byte[] buf = new byte[1024]; //字节数组
try
{
//read和close方法都可能有异常出现
int len = in.read(buf); //读取数据,len表示实际读取到的内容(长度)
String str=new String(buf,0,len);
System.out.println("下面的信息来自发送者:\n" +str);
in.close();
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
package pc;
import java.io.*;
public class Sender extends Thread
{
//表明是个线程类
private PipedOutputStream out = new PipedOutputStream(); //发送者是要向外面写数据,所以发送者内部创建PipedOutputStream对象用于向外写数据
public PipedOutputStream getOutputStream()
{
//返回管道输出流对象
return out;
}
//这是一个线程类,所以它应该覆盖Thread的run方法,run方法在线程类启动时自动运行
public void run()
{
//这里的run方法用于向PipedOutputStream中写入一串数据
String strInfo = new String("hello,receiver!");
try
{
//write和close方法都可能有异常出现
out.write(strInfo.getBytes());
out.close();
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
package pc;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.PipedInputStream;
import java.io.PipedOutputStream;
public class Test
{
public static void main(String[] args)
{
//创建两个管道流
PipedInputStream pin=new PipedInputStream();
PipedOutputStream pout=new PipedOutputStream();
try
{
pin.connect(pout);//pin的数据时从pout来
}
catch (IOException e)
{
e.printStackTrace();
}
//创建两个线程
Thread t1=new Sender(pout);
Thread t2=new Receiver(pin);
t1.start();
t2.start();
}
}
class Sender extends Thread
{
private DataOutputStream dos;
public Sender(PipedOutputStream p)
{
dos=new DataOutputStream(p);
}
public void run()
{
try
{
dos.writeUTF("HelloWorld");
dos.close();
} catch (IOException e)
{
e.printStackTrace();
}
}
}
class Receiver extends Thread
{
private DataInputStream dis;
public Receiver(PipedInputStream p)
{
dis=new DataInputStream(p);
}
public void run()
{
try
{
System.out.println(dis.readUTF());
dis.close();
} catch (IOException e)
{
e.printStackTrace();
}
}
}
分享到:
相关推荐
在操作系统中,进程通信是指在多个进程之间进行数据交换和同步的机制。命名管道是Windows系统提供的一种进程通信机制,通过使用命名管道,两个进程可以进行通信。在本实验中,我们将使用命名管道实现两个进程之间的...
当有多个客户机时,服务器可以为每个客户机创建单独的管道,以避免数据交错和确保通信的准确性。 在实际应用中,管道通信常常用于实现简单的消息传递,特别是在分布式系统或网络服务中,比如实现简单文件传输、命令...
在Windows操作系统中,同步管道是一种进程间通信(IPC,Inter-Process Communication)的方式,它允许两个或多个进程之间交换数据。这里的"Windows同步管道双向通信"指的是通过管道实现在两个进程之间的双向通信,即...
Windows命名管道通信是一种在进程间实现数据通信的技术,尤其适用于在同一台计算机上的多个进程之间交换信息。这种通信机制是基于Microsoft Windows操作系统内核提供的服务,它允许一个进程(服务器)创建一个命名...
管道通信可以用来实现进程之间的数据交换。 在实验中,我们使用 pipe() 系统调用创建一条管道线。两个子进程 P1 和 P2 分别向管道中写一句话,而父进程则从管道中读出来自于两个子进程的信息,显示在屏幕上。要求父...
进程通信是计算机科学中一个重要的概念,特别是在多任务操作系统中,它允许不同的进程之间共享信息、协调工作。本文将深入探讨“管道”这种进程通信机制,以及如何在Microsoft Foundation Classes (MFC)环境下实现...
在操作系统中,进程之间的通信是实现多任务协作和数据共享的关键技术。本实验重点探讨了在Linux环境下,如何使用管道(pipe)这种通信机制来实现父子进程间的通信。实验目标在于理解和掌握管道通信的基本原理以及...
命名管道是Windows操作系统中一种进程间通信(IPC)机制,它允许不同的进程之间进行数据交换。在本案例中,"命名管道双管道跨进程通信多线程封装"着重讲解了如何利用命名管道来实现跨进程的数据传输,并且考虑到了多...
管道最早出现在Unix系统中,是Linux支持的基础IPC形式之一,尤其适用于父子进程或兄弟进程之间的通信。有名管道则进一步扩展了这一功能,允许无亲缘关系的进程之间进行通信。 1. **管道概述** - **半双工通信**:...
在QT中,命名管道(Named Pipes)是一种用于进程间通信(IPC, Inter-Process Communication)的方式,允许不同进程之间交换数据。在Windows操作系统中,命名管道是通过系统提供的API实现的,而在Unix/Linux系统中,...
管道提供了一种简单且有效的方法,使得不同进程之间能够交换数据。在这个项目中,我们将探讨管道通信的概念、C++中的实现方式以及服务端和客户端的交互过程。 首先,我们需要理解管道的基本原理。管道是一种半双工...
其中,管道通信是一种高级的进程间通信(IPC,Inter-Process Communication)方式,它允许不同进程之间通过共享内存区域进行高效的数据交换。在本例子中,“MFC管道通信例子”着重于讲解如何利用MFC实现管道通信,这...
1. **管道的基本概念**:管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程之间使用,通常是在父子进程或兄弟进程之间。 2. **管道创建**:在C++中,创建管道通常使用`pipe()`系统调用...
进程通信是操作系统中一个重要的概念,它允许不同的进程之间共享数据和协调工作。在Windows或Unix-like系统中,匿名管道是一种简单且常见的进程间通信(IPC,Inter-Process Communication)方式。本文将深入探讨如何...
命名管道(Named Pipe)是Windows操作系统提供的一种进程间通信(IPC,Inter-Process Communication)机制,它允许不同的进程之间交换数据。在Visual C++(VC++)开发环境中,我们可以使用C++语言来创建和操作命名...
在现代操作系统中,进程间通信(IPC)是一项非常重要的技术,它允许不同进程之间进行数据交换和同步操作,从而实现复杂任务的分解与协作。其中,管道机制作为一种最基本的进程间通信方式,在Linux和其他类Unix系统中...
实验的目标是理解和掌握Linux操作系统中进程间通信的管道机制,通过系统调用pipe()实现数据交换。管道是一种特殊类型的文件,它允许相关进程之间进行单向通信。在这个实验中,我们关注三个具体任务。 ### 任务1 这...
管道是一种半双工的通信方式,数据只能单向流动,且具有先进先出(FIFO)的特点。在两个进程之间创建一个管道,可以使得一个进程的数据被另一个进程读取。在Linux中,可以使用`pipe()`函数创建管道,然后通过`fork()...
命名管道是Windows操作系统中一种进程间通信(IPC)机制,它允许不同的进程之间进行数据交换。在本文中,我们将深入探讨如何使用Visual C++来实现命名管道的通信,这是一种简单而有效的技术,尤其适用于在同一台...
进程间通信的一种方式,Pipes:管道,分为无名管道:在父子进程间交换数据;有名管道:可在不同主机间交换数据,分为服务器方和客户方,在Win9X下只支持有名管道客户。 1、进程间通信 2、管道Pipe通信