server.c

#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <unistd.h>
#include <sys/un.h>
#include <pthread.h>
#include <sys/syscall.h> #define UNIX_DOMAIN "/tmp/test" void *threaddeal(void *arg)
{
printf("this is a new thread\n");
 int com_fd = *(int*)arg;
char recv_buf[];
memset(recv_buf,,);
char snd_buf[];
memset(snd_buf,,);
strcpy(snd_buf,"server to client");
int num;
while(num=read(com_fd,recv_buf,sizeof(recv_buf)))
{
printf("server recv (%d)) :%s, threadid = %u,lwpid = %u\n",num,recv_buf,pthread_self(),syscall(SYS_gettid));
memset(recv_buf,,);
write(com_fd,snd_buf,sizeof(snd_buf));//回复client
}
close(com_fd);
} int main(void)
{
socklen_t clt_addr_len;
int listen_fd;
int com_fd;
int ret;
struct sockaddr_un clt_addr;
struct sockaddr_un srv_addr;
listen_fd=socket(PF_UNIX,SOCK_STREAM,);
if(listen_fd<)
{
perror("cannot create communication socket");
return ;
} //set server addr_param
srv_addr.sun_family=AF_UNIX;
strncpy(srv_addr.sun_path,UNIX_DOMAIN,sizeof(srv_addr.sun_path)-);
unlink(UNIX_DOMAIN);
//bind sockfd & addr
ret=bind(listen_fd,(struct sockaddr*)&srv_addr,sizeof(srv_addr));
if(ret==-)
{
perror("cannot bind server socket");
close(listen_fd);
unlink(UNIX_DOMAIN);
return ;
}
//listen sockfd
ret=listen(listen_fd,);
if(ret==-)
{
perror("cannot listen the client connect request");
close(listen_fd);
unlink(UNIX_DOMAIN);
return ;
}
//have connect request use accept
clt_addr_len=sizeof(clt_addr);
while()
 {
com_fd=accept(listen_fd,(struct sockaddr*)&clt_addr,&clt_addr_len);
if(com_fd<)
{
perror("cannot accept client connect request");
close(listen_fd);
unlink(UNIX_DOMAIN);
return ;
}
  //开一个新线程处理新连接com_fd
pthread_t threadid; //线程的标识符
if(pthread_create(&threadid,NULL,threaddeal,(void*)(&com_fd)) != )
{
perror("cannot creat new thread");
} }
close(listen_fd);
unlink(UNIX_DOMAIN);
return ;
}

client.c

#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/un.h>
#include <unistd.h>
#include <pthread.h> #define UNIX_DOMAIN "/tmp/test" void *threaddeal(void *arg)
{
printf("this is a new thread\n");
int com_fd = *(int*)arg;
char recv_buf[];
memset(recv_buf,,);
char snd_buf[];
memset(snd_buf,,);
int num;
while(num=read(com_fd,recv_buf,sizeof(recv_buf)))
{
printf("client recv : (%d)) :%s\n",num,recv_buf);
memset(recv_buf,,);
}
close(com_fd);
} int main(void)
{
int connect_fd;
int ret;
char snd_buf[];
struct sockaddr_un srv_addr;
//creat unix socket
connect_fd=socket(PF_UNIX,SOCK_STREAM,);
if(connect_fd<)
{
perror("cannot create communication socket");
return ;
}
srv_addr.sun_family=AF_UNIX;
strcpy(srv_addr.sun_path,UNIX_DOMAIN);
//connect server
ret=connect(connect_fd,(struct sockaddr*)&srv_addr,sizeof(srv_addr));
if(ret==-)
{
perror("cannot connect to the server");
close(connect_fd);
return ;
}
memset(snd_buf,,);
strcpy(snd_buf,"client send to server11111111111");

  //开新线程处理server返回
pthread_t threadid; //线程的标识符
if(pthread_create(&threadid,NULL,threaddeal,(void*)(&connect_fd)) != )
{
perror("cannot creat new thread");
}
//send msg to server
while(){
write(connect_fd,snd_buf,sizeof(snd_buf));
sleep();
} close(connect_fd);
return ;
}

socket 在Unix domain的使用的更多相关文章

  1. nginx、php-fpm默认配置与性能–TCP socket还是unix domain socket【转】

    原文地址:https://www.cnxct.com/default-configuration-and-performance-of-nginx-phpfpm-and-tcp-socket-or-u ...

  2. redis性能测试tcp socket and unix domain

    UNIX Domain Socket IPC socket API原本是为网络通讯设计的,但后来在socket的框架上发展出一种IPC机制,就是UNIX Domain Socket.虽然网络socke ...

  3. ndk学习16: unix domain socket

    一.UNIX Domain Socket 概念: UNIX Domain Socket是在socket架构上发展起来的用于同一台主机的进程间通讯(IPC) 特点: 1. 它不需要经过网络协议栈,不需要 ...

  4. 由一个简单需求到Linux环境下的syslog、unix domain socket

    本文记录了因为一个简单的日志需求,继而对linux环境下syslog.rsyslog.unix domain socket的学习.本文关注使用层面,并不涉及rsyslog的实现原理,感兴趣的读者可以参 ...

  5. 网络协议之:socket协议详解之Unix domain Socket

    目录 简介 什么是Unix domain Socket 使用socat来创建Unix Domain Sockets 使用ss命令来查看Unix domain Socket 使用nc连接到Unix do ...

  6. unix domain IPC 进程间通信简析

    Linux系统有多种进程间通信方式,如信号.消息队列.管道等,socket是其中一种,socket使用unix domain 模式进行进程间通信 //服务端代码 #include <stdio. ...

  7. 问题解决:psql: could not connect to server: No such file or directory Is the server running locally and accepting connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?

    错误提示: psql: could not connect to server: No such file or directory Is the server running locally and ...

  8. Unix Domain Socket 域套接字实现

    主要注意流程: STREAM SOCKET: Server :  socket() --->  bind() ---> listen()  ---> accept() Client: ...

  9. libpqxx接口的在linux下的使用,解决psql:connections on Unix domain socket "/tmp/.s.PGSQL.5432"错误

    在项目中使用postgresql数据库时要求在windows和linux双平台兼容.于是在windows下使用的接口在linux下爆出异常: psql:connections on Unix doma ...

随机推荐

  1. UWP 保存音乐或视频缩略图图片到本地

    开发项目时,有时需要将本地媒体文件的缩略图保存到本地,下面是源码. 需要打开Package.appxmanifest 功能 图片库 访问权限. <Page x:Class="SaveB ...

  2. 和HTTP相关的web服务器内容

    一台web服务器可以搭建多个独立域名的网站,也可以作为通信路径上的中转服务器提升传输效率. 1. 用单台虚拟主机实现多个域名 多个域名解析后对应的ip地址相同,需要在Host首部中包含完整的主机名或者 ...

  3. 基本mysql语句

    一 select语句 基本语法 select 列名1,列名2             //可以使用完全限定的列名  tables.列名 form tables 过滤(where ) 分组(group ...

  4. go的命令行参数

    package main import ( "fmt" "os" ) func main() { var s, sep string for i := 1; i ...

  5. nginx日志模块、事件模块

    日志模块 1.access_log指令 语法: access_log path [format [buffer=size [flush=time]]]; access_log logs/access. ...

  6. MQTT协议探究(一)

    1 准备阶段 MQTT客户端:https://www.cnblogs.com/linzhanfly/p/9923577.html WireShark MQTT服务器(iot.eclipse.org) ...

  7. 给postmessage加上callback方法

    postmessage双向通信中,是不能使用回调函数的. window.postmessage({msg:'hello',callback:function(e){ do something with ...

  8. Lua虚拟机中的数据结构与栈

    Lua虚拟机中的数据结构与栈 来源 https://blog.csdn.net/zry112233/article/details/80828327 由上一篇文章可知解释器分析Lua文件之后生成Pro ...

  9. 查看PHP指定扩展的版本信息

    命令:php --ri 扩展名

  10. Jerry眼中的SAP客户数据模型

    本文Jerry将介绍八款SAP产品中的客户模型.希望您在阅读完本文之后,能对SAP客户模型设计的思路有一个最最粗浅的了解. 由于Jerry水平和精力所限,本文不会详细阐述这些产品里的客户模型设计细节, ...