• 发送端/接收端
 using System;
using System.Threading;
using NetMQ;
using NetMQ.Sockets; namespace NetMQIPCServer
{
class Program
{
private const string topic = "unity3d";
private static bool running = true;
static void Main(string[] args)
{
Console.WriteLine("Main thread id = {0}", Thread.CurrentThread.ManagedThreadId); // 进程内通信
//pub.Bind("inproc://unity3d");
//sub.Connect("inproc://unity3d"); // 跨进程通信
//var pub = new PublisherSocket();
//var sub = new SubscriberSocket();
//pub.Bind("ipc:///unity3d/0");
//sub.Connect("ipc:///unity3d/0");
//sub.Subscribe(topic); // 定向接收[NonBlock]
//var pub = new PublisherSocket();
//var sub = new SubscriberSocket();
//pub.Bind("ipc:///unity3d/0");
//sub.Connect("ipc:///unity3d/0");
//sub.Subscribe(topic);
//var proactor = new NetMQProactor(sub, (socket, message) =>
//{
// //Console.WriteLine(message);
// foreach (var b in message[1].Buffer)
// {
// Console.Write("{0:x2}", b);
// Console.Write(" ");
// }
// Console.WriteLine("Received message in thread {0}", Thread.CurrentThread.ManagedThreadId);
//}); // TCP
var pub = new PublisherSocket();
var sub = new SubscriberSocket();
pub.Bind("tcp://*:2017");
sub.Connect("tcp://localhost:2017");
sub.Subscribe(topic);
var proactor = new NetMQProactor(sub, (socket, message) =>
{
//Console.WriteLine(message);
foreach (var b in message[].Buffer)
{
Console.Write("{0:x2}", b);
Console.Write(" ");
}
Console.WriteLine("Received message in thread {0}", Thread.CurrentThread.ManagedThreadId);
}); // 轮询模式
//var poller = new NetMQPoller();
//poller.Add(sub);
//sub.ReceiveReady += (sender, eventArgs) =>
//{
// bool more = false;
// byte[] bytes = null;
// eventArgs.Socket.ReceiveFrameBytes(out more);
// if (more)
// {
// bytes = eventArgs.Socket.ReceiveFrameBytes();
// foreach (var b in bytes)
// {
// Console.Write("{0:x2}", b);
// Console.Write(" ");
// }
// Console.WriteLine("Received bytes in thread {0}", Thread.CurrentThread.ManagedThreadId);
// }
//}; new Thread(() =>
{
while (running)
{
Console.WriteLine("PublisherSocket:Send Bytes in thread {0}.", Thread.CurrentThread.ManagedThreadId);
pub.SendMoreFrame(topic).SendFrame(new byte[] { 0xa, 0xb, 0xc, 0x1, 0x2, 0x3, 0xa, 0xb, 0xc, 0x1, 0x2, 0x3,
0xa, 0xb, 0xc, 0x1, 0x2, 0x3, 0xa, 0xb, 0xc, 0x1, 0x2, 0x3, 0xa, 0xb, 0xc, 0x1, 0x2, 0x3, 0xa, 0xb, 0xc,
0x1, 0x2, 0x3, 0xa, 0xb, 0xc, 0x1, 0x2, 0x3, 0xa, 0xb, 0xc, 0x1, 0x2, 0x3, 0xa, 0xb, 0xc, 0x1, 0x2, 0x3,
0xa, 0xb, 0xc, 0x1, 0x2, 0x3, 0xa, 0xb, 0xc, 0x1, 0x2, 0x3, 0xa, 0xb, 0xc, 0x1, 0x2, 0x3, 0xa, 0xb, 0xc,
0x1, 0x2, 0x3, 0xa, 0xb, 0xc, 0x1, 0x2, 0x3, 0xa, 0xb, 0xc, 0x1, 0x2, 0x3, 0xa, 0xb, 0xc, 0x1, 0x2, 0x3,
0xa, 0xb, 0xc, 0x1, 0x2, 0x3, 0xa, 0xb, 0xc, 0x1, 0x2, 0x3, 0xa, 0xb, 0xc, 0x1, 0x2, 0x3, 0xa, 0xb, 0xc,
0x1, 0x2, 0x3, 0xa, 0xb, 0xc, 0x1, 0x2, 0x3, 0xa, 0xb, 0xc, 0x1, 0x2, 0x3, 0xa, 0xb, 0xc, 0x1, 0x2, 0x3,
0xa, 0xb, 0xc, 0x1, 0x2, 0x3, 0xa, 0xb, 0xc, 0x1, 0x2, 0x3, 0xa, 0xb, 0xc, 0x1, 0x2, 0x3, 0xa, 0xb, 0xc,
0xa, 0xb, 0xc, 0x1, 0x2, 0x3, 0xa, 0xb, 0xc, 0x1, 0x2, 0x3, 0xa, 0xb, 0xc, 0x1, 0x2, 0x3, 0xa, 0xb, 0xc,
0x1, 0x2, 0x3, 0xa, 0xb, 0xc, 0x1, 0x2, 0x3, 0xa, 0xb, 0xc, 0x1, 0x2, 0x3, 0xa, 0xb, 0xc, 0x1, 0x2, 0x3,
0xa, 0xb, 0xc, 0x1, 0x2, 0x3, 0xa, 0xb, 0xc, 0x1, 0x2, 0x3, 0xa, 0xb, 0xc, 0x1, 0x2, 0x3, 0xa, 0xb, 0xc,
0x1, 0x2, 0x3, 0xa, 0xb, 0xc, 0x1, 0x2, 0x3, 0xa, 0xb, 0xc, 0x1, 0x2, 0x3, 0xa, 0xb, 0xc, 0x1, 0x2, 0x3,
0xa, 0xb, 0xc, 0x1, 0x2, 0x3, 0xa, 0xb, 0xc, 0x1, 0x2, 0x3, 0xa, 0xb, 0xc, 0x1, 0x2, 0x3, 0xa, 0xb, 0xc,
0x1, 0x2, 0x3, 0xa, 0xb, 0xc, 0x1, 0x2, 0x3, 0xa, 0xb, 0xc, 0x1, 0x2, 0x3, 0xa, 0xb, 0xc, 0x1, 0x2, 0x3,
0xa, 0xb, 0xc, 0x1, 0x2, 0x3, 0xa, 0xb, 0xc, 0x1, 0x2, 0x3, 0xa, 0xb, 0xc, 0x1, 0x2, 0x3, 0xa, 0xb, 0xc,
0x1, 0x2, 0x3, 0xa, 0xb, 0xc, 0x1, 0x2, 0x3 });
Thread.Sleep();
}
}).Start(); //new Thread(() =>
//{
// bool more = false;
// byte[] bytes = null;
// while (running)
// {
// if (sub.HasIn)
// {
// sub.ReceiveFrameBytes(out more);
// if (more)
// {
// bytes = sub.ReceiveFrameBytes();
// foreach (var b in bytes)
// {
// Console.Write("{0:x2}", b);
// Console.Write(" ");
// }
// Console.WriteLine("Received bytes in thread {0}", Thread.CurrentThread.ManagedThreadId);
// }
// }
// }
//}).Start();
// 在主线程轮询[Block]
//poller.Run();
// 异步轮询[NonBlock]
//poller.RunAsync(); Console.ReadKey();
running = false;
Thread.Sleep();
//poller.Stop();
//poller.StopAsync();
pub.Close();
sub.Close();
NetMQConfig.Cleanup();
}
}
}
  • 运行结果如图

NetMQ官方主页:http://netmq.readthedocs.io/en/latest/

NetMQ用作IPC的实例的更多相关文章

  1. MySQL搭建系列之多实例

    所谓多实例.就是在一台server上搭建.执行多个MySQL实例,每一个实例使用不同的服务port.通过不同的socket监听:物理上,每一个实例拥有独立的參数配置文件及数据库. 通常情况下.一台se ...

  2. ASP.NET Core中的依赖注入(3): 服务的注册与提供

    在采用了依赖注入的应用中,我们总是直接利用DI容器直接获取所需的服务实例,换句话说,DI容器起到了一个服务提供者的角色,它能够根据我们提供的服务描述信息提供一个可用的服务对象.ASP.NET Core ...

  3. SQL Server5个系统数据库

    SQL Server一共有5个系统数据库:master:记录SQL Server系统的所有系统级信息,例如:登陆账户信息.链接服务器和系统配置设置.记录其他所有数据库的存在.数据文件的位置.SQL S ...

  4. Java ClassLoader 原理详细分析(转)

    转载自:http://www.codeceo.com/article/java-classloader.html 一.什么是ClassLoader? 大家都知道,当我们写好一个Java程序之后,不是管 ...

  5. 纪念我曾经的 JAVA 姿势--转

    原文地址:https://segmentfault.com/a/1190000007122432?hmsr=toutiao.io&utm_medium=toutiao.io&utm_s ...

  6. 深入分析Java ClassLoader原理

    一.什么是ClassLoader? 大家都知道,当我们写好一个Java程序之后,不是管是CS还是BS应用,都是由若干个.class文件组织而成的一个完整的Java应用程序,当程序在运行时,即会调用该程 ...

  7. Java --ClassLoader创建、加载class、卸载class

    一.java提供了三种ClassLoader对Class进行加载: 1.BootStrap ClassLoader:称为启动类加载器,是Java类加载层次中最顶层的类加载器,负责加载JDK中的核心类库 ...

  8. Java--笔记(2)

    11.根据操作系统中的定义:死锁是指在一组进程中的各个进程均占有不会释放的资源,但因互相申请被其他进程所站用不会释放的资源而处于的一种永久等待状态. 死锁的四个必要条件: 1)互斥条件(Mutual ...

  9. java classloader

    一个jvm中默认的classloader有Bootstrap ClassLoader.Extension   ClassLoader.App ClassLoader,分别各司其职: Bootstrap ...

随机推荐

  1. 【新人赛】阿里云恶意程序检测 -- 实践记录10.27 - TF-IDF模型调参 / 数据可视化

    TF-IDF模型调参 1. 调TfidfVectorizer的参数 ngram_range, min_df, max_df: 上一篇博客调了ngram_range这个参数,得出了ngram_range ...

  2. 前端-2019 history 与 location

    HTML5 API解析之Window.history历史记录 1.简介 window.history是用来保存用户在一个会话期间的网站访问记录,并提供相应的方法进行追溯.其对应的成员如下: 方法:ba ...

  3. 我的JAVA环境搭建

    每次重装系统后的开发环境搭建,总是会花费大量的时间精力,软件下载安装啦,配置修改啦等等,索性把这些流程记录一下,毕竟时间就是金钱. 软件列表 JDK1.8 IntelliJ IDEA Navicat数 ...

  4. 剑指offer-面试题25-合并两个排序的链表-链表

    /* 题目: 输入两个递增排序的链表,合并这两个链表并使新的链表中的节点依然是递增排序. 返回新链表的头节点. */ /* 思路: 1.返回的链表的头节点为两个链表中头节点数值更小的为链表1. 2.进 ...

  5. .net mvc 使用 aspose.cells导出数据

    public class AsposeCellsHelper { public Workbook workBook; public Worksheet worksheet; Style style; ...

  6. hdu 2187 悼念512汶川大地震遇难同胞——老人是真饿了(贪心)

    新人题:n2的排序就可以过 #include <stdio.h> #include <stdlib.h> int main() { int c,n,i,j,o; ],b[],m ...

  7. Spark学习之路 (一)Spark初识 [转]

    官网介绍 什么是Spark 官网地址:http://spark.apache.org/ Apache Spark™是用于大规模数据处理的统一分析引擎. 从右侧最后一条新闻看,Spark也用于AI人工智 ...

  8. C语言库函数strstr、strch比较

    该库函数包含在<string.h>头文件中,函数原型:extern char *strstr(char *str1, const char *str2);使用方法 char *strstr ...

  9. 关于整合ssh中的细节03

    关于spring中提供的一些工具类和监听介绍 一.spring提供了一个HibernateTemplate类 ①HibernateTemplate类: 用于操作PO对象,类似Hibernate Ses ...

  10. ZOJ1310-Robot (BFS)

    The Robot Moving Institute is using a robot in their local store to transport different items. Of co ...