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. mysql非主键提示key2 检查索引是否设定为唯一

  2. 2.6 数据库更新特定字段SQL/语句块

    1.更新单表中某一字段 1.1适用于单条或者因为in条件1-1000条数据 下面是更改CMS_CONTRACT_INFO 表中合同编号为CMCC987最后更新时间为当前时间,或者注释里特定时间. UP ...

  3. java中讲讲DataInputStream的用法,举例?

    [学习笔记] 2.4 DataInputStream的用法 马 克-to-win:DataInputStream顾名思义:就是专门用来读各种各样的数据的,比如(int,char,long等),一定要注 ...

  4. ingress之tls和path使用

    ingress tls 上节课给大家展示了 traefik 的安装使用以及简单的 ingress 的配置方法,这节课我们来学习一下 ingress tls 以及 path 路径在 ingress 对象 ...

  5. Centos 7.3 搭建php7,mysql5.7,nginx1.10.1,redis

    一.安装nginx 更新系统软件(非必要) # yum update 安装nginx 1.下载nginx # wget http://nginx.org/download/nginx-1.15.2.t ...

  6. 记一次邮件推送的坑,c#基于smtp使用腾讯企业邮箱发送邮件总是失败的原因

    今天在弄企业邮箱推送的东西,原版代码是这样的 public void SendEmail(string title, string content) { try { MailMessage mailM ...

  7. git merge 命令的使用

    我们把dev分支的工作成果合并到master分支上: $ git merge dev Updating d46f35e..b17d20e Fast-forward readme.txt | 1 + 1 ...

  8. [转载]PyTorch中permute的用法

    [转载]PyTorch中permute的用法 来源:https://blog.csdn.net/york1996/article/details/81876886 permute(dims) 将ten ...

  9. js同步和异步

    JavaScript语言的一大特点就是单线程,也就是说,同一个时间只能做一件事. JavaScript的单线程,与它的用途有关.作为浏览器脚本语言,JavaScript的主要用途是与用户互动,以及操作 ...

  10. vs 调试时 QuickWatch 不能计算变量值

    尝试下这个方法:DEBUG- -> Options and Settings--> Symbols中查看缓存路径是否设置为当前程序的bin文件然后将Debug-->Options a ...