socket unix domain IPC的实例代码

仅供参考:

服务端:socket->bind->listen->send/recv->close

客户端:socket->bind->connect->send/recv->close

#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <errno.h>
#include <fcntl.h>
#include <sys/un.h>
#include <pthread.h>
#include <cstring>
#include <cstdio>
#include <unistd.h>
#include <signal.h> 

#define filename "test.socket" 

void setnonblocking(int fd)
{
  fcntl(fd, F_SETFL, fcntl(fd, F_GETFL) | O_NONBLOCK);
} 

void *client_func(void *arg)
{
  sleep(3);
  int fd = socket(AF_UNIX, SOCK_STREAM, 0);
  setnonblocking(fd);
  sockaddr_un un;
  memset(&un, 0, sizeof(un));
  un.sun_family = AF_UNIX;
  sprintf(un.sun_path, "file_%d.socket", (int)getpid());
  unlink(un.sun_path);
  socklen_t len = sizeof(un);
  bind(fd, (sockaddr *)&un, sizeof(un));
  strcpy(un.sun_path, filename);
  int ret = connect(fd, (sockaddr *)&un, len);
  if (ret == -1)
  {
    printf("connect server failed...\n");
    close(fd);
    return NULL;
  }
  char buf[256];
  memset(buf, 0, sizeof(buf));
  strcpy(buf, "hello world");
  int n = send(fd, buf, strlen(buf)+1, 0);
  printf("send data, %d bytes..\n", n);
  sleep(5);
  close(fd); 

  return NULL;
} 

int main()
{
  unlink(filename);
  signal(SIGPIPE, SIG_IGN);
  int fd = socket(AF_UNIX, SOCK_STREAM, 0);
  int yes = 1;
  setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(yes));
  setnonblocking(fd);
  sockaddr_un un;
  memset(&un, 0, sizeof(un));
  un.sun_family = AF_UNIX;
  strcpy(un.sun_path, filename);
  bind(fd, (sockaddr *)&un, sizeof(un));
  listen(fd, 100); 

  pthread_t pid;
  pthread_create(&pid, NULL, client_func, NULL); 

  sockaddr_un uu;
  socklen_t len = sizeof(uu);
  while (true)
  {
    memset(&uu, 0, len);
    int newfd = accept(fd, (sockaddr *)&uu, &len);
    if (newfd != -1)
    {
      setnonblocking(newfd);
      printf("newfd = %d, path = %s\n", newfd, uu.sun_path);
      char buf[512];
      memset(buf, 0, sizeof(buf));
      int n = recv(newfd, buf, 512,0);
      printf("recv %d bytes, contents is %s\n", n, buf);
    }
    usleep(100000);
  } 

  close(fd); 

  return 0;
} 

以上就是小编为大家带来的socket unix domain IPC的实例代码全部内容了,希望大家多多支持我们~

(0)

相关推荐

  • socket unix domain IPC的实例代码

    仅供参考: 服务端:socket->bind->listen->send/recv->close 客户端:socket->bind->connect->send/recv->close #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <arpa/inet.h> #include <errno.h

  • Java Socket编程服务器响应客户端实例代码

    通过输入流来读取客户端信息,相应的时候通过输出流来实现. 服务端类的代码: import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.PrintWriter; import java.net.ServerSocket; impo

  • 基于Python socket的端口扫描程序实例代码

    本文研究的主要是Python的端口扫描程序,具体实例代码如下. 先来看看第一个端口扫描程序代码,获取本机的IP和端口号: import socket def get_my_ip(): try: csock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) csock.connect(('8.8.8.8', 80)) (addr, port) = csock.getsockname() csock.close() return addr,port

  • Android Socket接口实现即时通讯实例代码

    Android Socket接口实现即时通讯 最近学习Android 通信的知识,做一个小实例,巩固下学习内容,以下内容是网上找的资料,觉得很不错,知识比较全面,大家看下. 首先了解一下即时通信的概念.通过消息通道 传输消息对象,一个账号发往另外一账号,只要账号在线,可以即时获取到消息,这就是最简单的即使通讯.消息通道可由TCP/IP UDP实现.通俗讲就是把一个人要发送给另外一个人的消息对象(文字,音视频,文件)通过消息通道(C/S实时通信)进行传输的服务.即时通讯应该包括四种形式,在线直传.

  • C# Socket的TCP通讯的实例代码

    Socket的TCP通讯 一. socket的通讯原理 服务器端的步骤如下. (1)建立服务器端的Socket,开始侦听整个网络中的连接请求. (2)当检测到来自客户端的连接请求时,向客户端发送收到连接请求的信息,并建立与客户端之间的连接. (3)当完成通信后,服务器关闭与客户端的Socket连接. 客户端的步骤如下. (1)建立客户端的Socket,确定要连接的服务器的主机名和端口. (2)发送连接请求到服务器,并等待服务器的回馈信息. (3)连接成功后,与服务器进行数据的交互. (4)数据处

  • linux IPC之socket解析及实例代码

    Linux下的Socket通信是一种基于文件的IPC通信,也可以是基于其他设备的IPC通信.它可以在本机内不同进程间实现通信,也可以在实现不同主机之间的通信. socket的创建步骤 服务端 1.通过socket()函数创建socket 2.通过bind函数绑定socket于设备地址 3.通过listen监听指定的socket 4.通过accept等待客户端的连接 客户端 1.通过socket()函数创建socket 2.通过connect连接到服务端 待经过上面的步骤后,服务端和客户端已经建立

  • perl Socket编程实例代码

    在networking方面,最基础的是BSD socket编程,但往往perl入门时在这个方面,最头疼的无疑是如何开始,如何Step by step.最好的药方就是Example,一段完整的可以运行(working)的代码,通过实践来感受远比看枯燥的manual来得深刻. 以下给出几段使用Socket及IO::Socket编写的Server/client,他们能实现最简单但是却最基本的任务,包括一个forking/accept的模型.可以直接复制这些代码,然后小加修改即可开发一些小型的tcp/u

  • PHP socket 模拟POST 请求实例代码

    我们用到最多的模拟POST请求几乎都是使用php curl来实现了,没考虑到PHP socket也可以实现,今天看到朋友写了一文章,下面我来给大家分享一下PHP socket模拟POST请求实例. 以前模拟post请求俺都用PHP curl扩展实现来着,没想过PHP socket也可以实现.最近翻了下相关资料才发现原来没有那么高深,只是以前一直没有完全理解post的原理和本质而已,其实就是发送给目的程序一个标志为post的协议串如下: POST /目的程序url HTTP/1.1 Accept:

  • java socket编程实例代码讲解

    1.所谓socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄.应用程序通常通过"套接字"向网络发出请求或者应答网络请求. 操作java socket时用到的最多的三个方法为: accept():主要用于服务器端产生"阻塞",等待客户端的链接请求,并且返回一个客户端的Socket实例: getInputStream():方法主要用来获得网络连接输入,同时返回一个InputStream对象实例: getOutputStream

  • Android连接服务器端的Socket的实例代码

    废话不多说了,直接给大家贴代码了,具体代码如下所述: package com.exa mple.esp8266; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.PrintStream; import java.net.Socket; import android.app.Activity; import android.os.Bundle; i

随机推荐