`
郑云飞
  • 浏览: 818337 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

管道之间的数据通信

阅读更多
 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();
		}
	}
}

 

分享到:
评论

相关推荐

    2.4 实验四:使用命名管道实现进程通信.doc

    在操作系统中,进程通信是指在多个进程之间进行数据交换和同步的机制。命名管道是Windows系统提供的一种进程通信机制,通过使用命名管道,两个进程可以进行通信。在本实验中,我们将使用命名管道实现两个进程之间的...

    管道通信命名管道通信

    当有多个客户机时,服务器可以为每个客户机创建单独的管道,以避免数据交错和确保通信的准确性。 在实际应用中,管道通信常常用于实现简单的消息传递,特别是在分布式系统或网络服务中,比如实现简单文件传输、命令...

    Windows同步管道双向通信

    在Windows操作系统中,同步管道是一种进程间通信(IPC,Inter-Process Communication)的方式,它允许两个或多个进程之间交换数据。这里的"Windows同步管道双向通信"指的是通过管道实现在两个进程之间的双向通信,即...

    windows命名管道通信

    Windows命名管道通信是一种在进程间实现数据通信的技术,尤其适用于在同一台计算机上的多个进程之间交换信息。这种通信机制是基于Microsoft Windows操作系统内核提供的服务,它允许一个进程(服务器)创建一个命名...

    进程的软中断通信和管道通信

    管道通信可以用来实现进程之间的数据交换。 在实验中,我们使用 pipe() 系统调用创建一条管道线。两个子进程 P1 和 P2 分别向管道中写一句话,而父进程则从管道中读出来自于两个子进程的信息,显示在屏幕上。要求父...

    进程通信——管道通信

    进程通信是计算机科学中一个重要的概念,特别是在多任务操作系统中,它允许不同的进程之间共享信息、协调工作。本文将深入探讨“管道”这种进程通信机制,以及如何在Microsoft Foundation Classes (MFC)环境下实现...

    操作系统实验四 进程的管道通信 实验报告

    在操作系统中,进程之间的通信是实现多任务协作和数据共享的关键技术。本实验重点探讨了在Linux环境下,如何使用管道(pipe)这种通信机制来实现父子进程间的通信。实验目标在于理解和掌握管道通信的基本原理以及...

    命名管道双管道跨进程通信多线程封装

    命名管道是Windows操作系统中一种进程间通信(IPC)机制,它允许不同的进程之间进行数据交换。在本案例中,"命名管道双管道跨进程通信多线程封装"着重讲解了如何利用命名管道来实现跨进程的数据传输,并且考虑到了多...

    Linux系统管道和有名管道的通信机制

    管道最早出现在Unix系统中,是Linux支持的基础IPC形式之一,尤其适用于父子进程或兄弟进程之间的通信。有名管道则进一步扩展了这一功能,允许无亲缘关系的进程之间进行通信。 1. **管道概述** - **半双工通信**:...

    QT进程多个管道通信,并与C#客户端同时多个通信

    在QT中,命名管道(Named Pipes)是一种用于进程间通信(IPC, Inter-Process Communication)的方式,允许不同进程之间交换数据。在Windows操作系统中,命名管道是通过系统提供的API实现的,而在Unix/Linux系统中,...

    C++管道通信.zip

    管道提供了一种简单且有效的方法,使得不同进程之间能够交换数据。在这个项目中,我们将探讨管道通信的概念、C++中的实现方式以及服务端和客户端的交互过程。 首先,我们需要理解管道的基本原理。管道是一种半双工...

    MFC管道通信例子

    其中,管道通信是一种高级的进程间通信(IPC,Inter-Process Communication)方式,它允许不同进程之间通过共享内存区域进行高效的数据交换。在本例子中,“MFC管道通信例子”着重于讲解如何利用MFC实现管道通信,这...

    ipc.rar_IPC_管道_管道通信_管道通信c++

    1. **管道的基本概念**:管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程之间使用,通常是在父子进程或兄弟进程之间。 2. **管道创建**:在C++中,创建管道通常使用`pipe()`系统调用...

    使用匿名管道实现进程通信

    进程通信是操作系统中一个重要的概念,它允许不同的进程之间共享数据和协调工作。在Windows或Unix-like系统中,匿名管道是一种简单且常见的进程间通信(IPC,Inter-Process Communication)方式。本文将深入探讨如何...

    vc利用命名管道进行通信namedpipe

    命名管道(Named Pipe)是Windows操作系统提供的一种进程间通信(IPC,Inter-Process Communication)机制,它允许不同的进程之间交换数据。在Visual C++(VC++)开发环境中,我们可以使用C++语言来创建和操作命名...

    管道机制实现进程间的通信

    在现代操作系统中,进程间通信(IPC)是一项非常重要的技术,它允许不同进程之间进行数据交换和同步操作,从而实现复杂任务的分解与协作。其中,管道机制作为一种最基本的进程间通信方式,在Linux和其他类Unix系统中...

    实验四:Linux下进程管道通信.docx

    实验的目标是理解和掌握Linux操作系统中进程间通信的管道机制,通过系统调用pipe()实现数据交换。管道是一种特殊类型的文件,它允许相关进程之间进行单向通信。在这个实验中,我们关注三个具体任务。 ### 任务1 这...

    进程间软中断通信和管道通信

    管道是一种半双工的通信方式,数据只能单向流动,且具有先进先出(FIFO)的特点。在两个进程之间创建一个管道,可以使得一个进程的数据被另一个进程读取。在Linux中,可以使用`pipe()`函数创建管道,然后通过`fork()...

    Visual C++实现命名管道的通信

    命名管道是Windows操作系统中一种进程间通信(IPC)机制,它允许不同的进程之间进行数据交换。在本文中,我们将深入探讨如何使用Visual C++来实现命名管道的通信,这是一种简单而有效的技术,尤其适用于在同一台...

    C# 使用管道Pipe在进程间通信

    进程间通信的一种方式,Pipes:管道,分为无名管道:在父子进程间交换数据;有名管道:可在不同主机间交换数据,分为服务器方和客户方,在Win9X下只支持有名管道客户。 1、进程间通信 2、管道Pipe通信

Global site tag (gtag.js) - Google Analytics