上一篇已经做过注释,这一篇直接上代码

/***************************************************************************************
****************************************************************************************
* FILE      : server_test.cc
* Description   : 
*             
* Copyright (c) 2012 by Liu Yanyun(E-mail:liuyun827@foxmail.com). All Rights Reserved.
*            Without permission, shall not be used for any commercial purpose

* History:
* Version       Name            Date            Description
   0.1      Liu Yanyun      2012/12/03      Initial Version
   
****************************************************************************************
****************************************************************************************/ 
 
 
#include "socket.h"  
#include "log_trace.h"  
#include "socket_addr.h"  
#include "socket_base.h"  
#include "event_loop.h"  
#include <iostream>  
 
using namespace std; 
 
int main() 
{  
  Socket *ser = Socket::create(); 
  bool ret = ser->open("dgram://unix.domain.ipc.1"); 
 
  char buf[100] = {0}; 
  char addr[128] = {0}; 
 
  ser->recv(buf, sizeof(buf), addr); 
 
  printf("from:%s;buf:%s\n", addr, buf); 
   
  ser->send(buf, strlen(buf), addr); 
 
  Socket::destroy(ser); 
   
  return 0; 

/***************************************************************************************
****************************************************************************************
* FILE  : server_test.cc
* Description :
*    
* Copyright (c) 2012 by Liu Yanyun(E-mail:liuyun827@foxmail.com). All Rights Reserved.
*            Without permission, shall not be used for any commercial purpose
*
* History:
* Version  Name         Date   Description
   0.1  Liu Yanyun  2012/12/03  Initial Version
  
****************************************************************************************
****************************************************************************************/

#include "socket.h"
#include "log_trace.h"
#include "socket_addr.h"
#include "socket_base.h"
#include "event_loop.h"
#include <iostream>

using namespace std;

int main()
{
  Socket *ser = Socket::create();
  bool ret = ser->open("dgram://unix.domain.ipc.1");

char buf[100] = {0};
  char addr[128] = {0};

ser->recv(buf, sizeof(buf), addr);

printf("from:%s;buf:%s\n", addr, buf);
 
  ser->send(buf, strlen(buf), addr);

Socket::destroy(ser);
 
  return 0;
}

/***************************************************************************************
****************************************************************************************
* FILE      : client_test.cc
* Description   : 
*             
* Copyright (c) 2012 by Liu Yanyun(E-mail:liuyun827@foxmail.com). All Rights Reserved.
*            Without permission, shall not be used for any commercial purpose

* History:
* Version       Name            Date            Description
   0.1      Liu Yanyun      2012/12/03      Initial Version
   
****************************************************************************************
****************************************************************************************/ 
 
 
#include "socket.h"  
#include "log_trace.h"  
#include "socket_addr.h"  
#include "socket_base.h"  
#include <iostream>  
 
using namespace std; 
 
int main() 

  Socket *clt = Socket::create(); 
  bool ret = clt->open("dgram://unix.domain.ipc.2"); 
  ret = ret; 
 
  char buf[100] = {"hello"}; 
  char addr[128] = {0}; 
 
  clt->send(buf, strlen(buf), "dgram://unix.domain.ipc.1"); 
 
  clt->recv(buf, sizeof(buf), addr); 
 
  printf("from:%s;buf:%s\n", addr, buf); 
 
  sleep(2); 
   
  Socket::destroy(clt); 
   
  return 0; 

起两个shell结果为:
./server_test
from:dgram://unix.domain.ipc.2;buf:hello
 
./client_test
from:dgram://unix.domain.ipc.1;buf:hello

上面是使用unix域套接字进程测试;修改地址为ip:port形式可以转为inet域。

对于数据包式的通信,只需要各自打开自身的地址,然后就可以根据地址收发数据了;而在上一篇中对于字节流方式服务器端要先打开进行监听,然后客户端去连接,服务器端接受连接以后才可以进行通信。

转:sock_ev——linux平台socket事件框架(基于数据报的测试程序) .的更多相关文章

  1. 转:sock_ev——linux平台socket事件框架(基于字节流的测试程序) .

    原文:http://blog.csdn.net/gdutliuyun827/article/details/8257186 由于工作与学习的需要,写了一个socket的事件处理框架,在公司写的已经使用 ...

  2. 转:sock_ev——linux平台socket事件框架(socket API的封装) .

    把linux平台提供的有关socket操作的API进行封装是有必要的:基于stream操作的流程与基于dgram操作的流程略有不同,分别放在两个类中,但两者又有很多相似的操作,因此写一个基类,让其继承 ...

  3. 转:sock_ev——linux平台socket事件框架(event loop) .

    上一篇我们封装了三种事件监听方式,如果分别提供给客户端使用,有点不方便,也不利于统一管理:我们再封装一层EventLoop. /************************************ ...

  4. 转:sock_ev——linux平台socket事件框架(event dispatcher) .

    最近比较忙,好久没更新了:今天我们看一下事件的监听方式,在linux下面事件的监听方式有三种select.poll.epoll,性能上面epoll最高,如果仅是最多监听十多个描述符,用啥无所谓,如果是 ...

  5. 转:sock_ev——linux平台socket事件框架(socket代理类) .

    前面分析了对socket基本操作的封装,并按照数据的传送方式写了两个类,本篇将写一个代理类提供给库的使用者使用的类. /**************************************** ...

  6. 转:sock_ev——linux平台socket事件框架(uri地址的解析) .

    在第一篇中,已经说明,传递的socket地址采取以下形式: [cpp] view plaincopyprint?stream://192.168.2.10:8080   dgram://192.168 ...

  7. 转:sock_ev——linux平台socket事件框架(logTrace) .

    写代码要有调试log,采用syslog的输出:一般会输出到"/var/log/messages" /**************************************** ...

  8. AgileEAS.NET SOA 中间件平台.Net Socket通信框架-介绍

    一.前言 AgileEAS.NET SOA 中间件平台是一款基于基于敏捷并行开发思想和Microsoft .Net构件(组件)开发技术而构建的一个快速开发应用平台.用于帮助中小型软件企业建立一条适合市 ...

  9. 基于.NET平台常用的框架整理<转载>

    转载来自:http://www.cnblogs.com/hgmyz/p/5313983.html 基于.NET平台常用的框架整理   自从学习.NET以来,优雅的编程风格,极度简单的可扩展性,足够强大 ...

随机推荐

  1. 2015 UESTC 搜索专题E题 吴队长征婚 爆搜

    吴队长征婚 Time Limit: 20 Sec  Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/contest/show/61 Descri ...

  2. Google Code Jam Africa 2010 Qualification Round Problem A. Store Credit

    Google Code Jam Qualification Round Africa 2010 Problem A. Store Credit https://code.google.com/code ...

  3. PAT甲级1010. Radix

    PAT甲级1010. Radix (25) 题意: 给定一对正整数,例如6和110,这个等式6 = 110可以是真的吗?答案是"是",如果6是十进制数,110是二进制数. 现在对于 ...

  4. 读书笔记_Effective_C++_条款二十六:尽可能延后变量定义式的出现时间

    这个条款从字面意思还是很好理解的,就是在使用这个变量前才去定义,而不是很早就定义了它,而在很后面的时候才去使用.这个条款只适用于对变量声明位置没有要求的语言,比如C++.对于像C或者一些脚本语言,语法 ...

  5. HTML5 元素拖动 - 实现元素左右拖动, 或更改自身排序

    1.拖放(Drag 和 drop)是 HTML5 标准的组成部分. 拖放是一种常见的特性,即抓取对象以后拖到另一个位置.在 HTML5 中,拖放是标准的一部分,任何元素都能够拖放. 浏览器支持:Int ...

  6. linux基础命令学习(四)用户与群组

    一.linux用户账号的管理 linux用户账号的管理主要包括用户添加.用户删除.用户修改. 添加用户账号就是在系统创建一个新账号,然后为新账号分为用户号.用户组.主目录和登录Shell等资源. 刚添 ...

  7. Django Pagination

    Django provides a few classes that help you manage paginated data – that is, data that’s split acros ...

  8. java什么时候声明static方法

    1.经常用到的方法,可以声明为static,这样省去了每次new对象的内存空间,因为非static方法,需要new对象才能调用此方法.但因此也产生多线程访问线程安全问题 比如: 2.当一个方法或者变量 ...

  9. python笔记18-sort和sorted区别

    前言 python的排序有两个方法,一个是list对象的sort方法,另外一个是builtin函数里面sorted,主要区别: sort仅针对于list对象排序,无返回值, 会改变原来队列顺序 sor ...

  10. python接口自动化16-multipart/form-data上传图片

    前言 在提交表单操作的时候,经常会遇到图片上传的操作,图片上传是一个单独的接口,本篇以禅道为例,介绍如何上传图片 上传接口 1.以禅道上提交bug为例,在选择图片时,点确定按钮,就是上传图片了 2.用 ...