A、B两个进程,某一事件触发A给B发一个消息(内容不定,"123"),B一直处于监听状态,一旦受到消息("123"),便执行另一个操作,执行完成后,继续监听。谢谢...

解决方案 »

  1.   

    采用通道进行处理吧!!!!
    --reply by CSDN Study Trial V1.0.1 (starts_2000)
      

  2.   

    要用Socket加线程,
    如果你不了解,做起来比较麻烦。
      

  3.   

    我做过用ini文件来传递,进程1将数据写入ini文件,进程2再去读,我做的是两个完全独立的程序,他们之间的数据交换
      

  4.   

    线程 + socket单独开启一个线程监听某个端口,如果有消息,监听线程再开启另一个处理线程,自己继续监听,是这样的么?
    就是不知道怎么发消息,和怎么接收信息,谢谢。 
      

  5.   

    http://download.csdn.net/source/2708345
    socket范例
      

  6.   

    你想用什么协议?
    socket中有TCP 和 UDP两种。TCP要写传输安全但效率差点
    UDP传的快,但不安全。数据少点可以用。类库中他们都有封装好的类,有发送和接收的方法。
    你只要调用方法就可以了。
      

  7.   

    用通道或内存映射文件System.IO.MemoryMappedFiles.MemoryMappedFile
      

  8.   

    //B:接收端
    private void Form1_Load(object sender, EventArgs e) 
    {
                 //监听所有ip
                IPEndPoint ipPoint = new IPEndPoint(IPAddress.Any, 8888);
                TcpListener tcpListener = new TcpListener(ipPoint);
                tcpListener.Start();            while (true)
                {
                    //如果没有Connect请求
                    if (!tcpListener.Pending())
                    {
                        Thread.Sleep(1000);
                        continue;
                    }              //如果有Connect请求
                  Socket client = tcpListener.AcceptSocket();
                  
                  //调用函数,接收发送端的信息
          //接收发送端传过来的byte[]
                  byte[] byte_content = ReceiveVarData(client);
          //将byte[]还原成字符串
                  string str_content = System.Text.Encoding.Unicode.GetString(byte_content);
                  if(str_content=="123")
    {
        //你想执行的操作,写在这:
    }  
          else
    { }   
                                                                              
                    //关闭套接字
                    client.Close();
                }
    }

    //被调函数ReceiveVarData()
    //传入值:监听到的Socket. 返回值:发送端传过来的byte[]
     public static byte[] ReceiveVarData(Socket s)
            {
                int total = 0;
                int recv;            //这个此报告发送端的byte[]中每次取个,存入到byte[] datasize中
                //Socket.Receive(byte[] 存入哪个地方,)
                byte[] datasize = new byte[4];
                recv = s.Receive(datasize, 0, 4, SocketFlags.None);            //将datasize 中的四个元素转成一个整数. 从byte[]中第零个元素开始.
                int size = BitConverter.ToInt32(datasize, 0);
                int dataleft = size;
                byte[] data = new byte[size];
                while (total < size)
                {
                    recv = s.Receive(data, total, dataleft, SocketFlags.None);
                    if (recv == 0)
                    {
                        data = null;
                        break;
                    }
                    total += recv;
                    dataleft -= recv;
                }
                return data;
            }
    //A:发送端
       //点击按钮 发送信息
      private void button1_Click(object sender, EventArgs e)
           {
       //实例化Socket
                Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
               //指定向哪个ip,哪个端口发送 
         IPEndPoint ipPoint = new IPEndPoint(IPAddress.Parse("192.168.1.45"), 8888);
        //连接
                client.Connect(ipPoint);

       //将字符串转换成byte[]发送
            string str_content="123"
         byte[] byte_content=System.Text.Encoding.Unicode.GetBytes(str_content);
       //调用SendVarData发送信息
                SendVarData(client, byte_content);     //关闭Socket
                client.Close();    
           } //被调函数SendVarData
    //发送数据
            public static int SendVarData(Socket s, byte[] data)
            {
                int total = 0;
                int size = data.Length;
                int dataleft = size;
                int sent;            //这次发送让我很费解,不过去掉的话,程序就不可用
                byte[] datasize = new byte[4];
                datasize = BitConverter.GetBytes(size);
                sent = s.Send(datasize);
                //这次发送让我很费解            while (total < size)
                {
                    sent = s.Send(data, total, dataleft, SocketFlags.None);
                    total += sent;
                    dataleft -= sent;
                }
                return total;
            }
      

  9.   

    在局域网上弄两台机器~~
    接收机用  B.exe
    发送机用 A.exe
    运行能看到效果
      

  10.   

    为什么不使用Remoting方式呢,通过HTTP通道,传递对象,进行相应
      

  11.   

    你是不是说RDP 协议啊 ? 
      

  12.   

    谢谢大家 用hinada99的方法实现了