socket domain 样例
服务端
#include<stdio.h>
#include <sys/stat.h>
#include <sys/socket.h>
#include <sys/un.h>
#include <errno.h>
#include <stddef.h>
#include <string.h>
#include <stdlib.h>
#define LISTEN_SOCKET "/tmp/liuyi.sock" //
#define LISTEN_BACKLOG 5
#define BIG_BUF 4096
int main()
{
int listenfd,connfd;
struct sockaddr_un un_s,un_c;
int len;
struct stat statbuf;
uid_t uid;
int ret;
char recvBuf[BIG_BUF];
char sendBuf[BIG_BUF];
listenfd=socket(AF_UNIX, SOCK_STREAM, 0);
if(listenfd<=0){
perror("socket create error");
exit(-1);
}
unlink(LISTEN_SOCKET);
memset(&un_s,0,sizeof(struct sockaddr_un));
un_s.sun_family = AF_UNIX;
strcpy(un_s.sun_path, LISTEN_SOCKET);
len = offsetof(struct sockaddr_un, sun_path) + strlen(LISTEN_SOCKET);
if(bind(listenfd,(struct sockaddr *)&un_s, len)<0){
perror("socket bind error");
exit(-1);
}
if(listen(listenfd,LISTEN_BACKLOG)<0){
perror("socket listen error");
exit(-1);
}
memset(&un_c,0,sizeof(struct sockaddr_un));
len=sizeof(struct sockaddr_un);
connfd=accept(listenfd,(struct sockaddr *)&un_c,&len);
if(connfd<=0){
perror("socket accept error");
exit(-1);
}
printf("connfd=[%d]\n",connfd);
len -= offsetof(struct sockaddr_un, sun_path);
un_c.sun_path[len] ='\0';
//取文件状态
if(stat(un_c.sun_path, &statbuf)<0){
perror("stat error");
exit(-1);
}
//判断是不是socket 文件 srwxr-xr-x 1 sandjmk liuyi.sock
if(S_ISSOCK(statbuf.st_mode) == 0){
perror("Is not a socket");
exit(-1);
}
printf("useid[%d]socket[%s]connect\n",statbuf.st_uid,un_c.sun_path);
unlink(un_c.sun_path);
memset(recvBuf,0,sizeof(recvBuf));
ret = read(connfd,recvBuf,sizeof(recvBuf));
printf("read ret[%d][%d]\n",ret,errno);
printf("recv:[%s]\n",recvBuf);
memset(sendBuf,'B',sizeof(sendBuf)-1);
ret = write(connfd,sendBuf,sizeof(sendBuf));
printf("write ret=[%d]\n",ret);
close(connfd);
return 0;
}
客户端
#include<stdio.h>
#include <sys/stat.h>
#include <sys/socket.h>
#include <sys/un.h>
#include <errno.h>
#include <stddef.h>
#include <string.h>
#include <stdlib.h>
#define SOCKET_PATH "/tmp/"
#define LISTEN_SOCKET "/tmp/liuyi.sock"
#define BIG_BUF 4096
int main()
{
int connfd;
struct sockaddr_un un_s,un_c;
int len;
int ret;
char recvBuf[BIG_BUF];
char sendBuf[BIG_BUF];
connfd=socket(AF_UNIX, SOCK_STREAM, 0);
if(connfd<=0){
perror("socket create error");
exit(-1);
}
memset(&un_s,0,sizeof(struct sockaddr_un));
un_s.sun_family = AF_UNIX;
sprintf(un_s.sun_path, "%sliuyi.%05d",SOCKET_PATH,getpid());
len = offsetof(struct sockaddr_un, sun_path) + strlen(un_s.sun_path);
unlink(un_s.sun_path);
if(bind(connfd,(struct sockaddr *)&un_s, len)<0){
perror("socket bind error");
exit(-1);
}
memset(&un_s,0,sizeof(struct sockaddr_un));
un_s.sun_family = AF_UNIX;
sprintf(un_s.sun_path,LISTEN_SOCKET);
len = offsetof(struct sockaddr_un, sun_path) + strlen(un_s.sun_path);
if(connect(connfd,(struct sockaddr *)&un_s, len)<0){
perror("socket connect error");
exit(-1);
}
memset(sendBuf,'A',sizeof(sendBuf)-1);
ret = write(connfd,sendBuf,sizeof(sendBuf));
printf("write ret=[%d]\n",ret);
//sleep(1);
memset(recvBuf,0,sizeof(recvBuf));
ret = read(connfd,recvBuf,sizeof(recvBuf));
printf("read ret[%d][%d]\n",ret,errno);
printf("recv:[%s]\n",recvBuf);
return 0;
}
socket domain 样例的更多相关文章
- 【go】go语言socket通信样例
server.go package main import ( "net" "fmt" "io" ) func main() { liste ...
- socket编程——一个简单的样例
从一个简单的使用TCP样例開始socket编程,其基本过程例如以下: server client ++ ...
- Swift - 使用socket进行通信(附聊天室样例)
在Swift开发中,如果我们需要保持客服端和服务器的长连接进行双向的数据通信,使用socket是一种很好的解决方案. 下面通过一个聊天室的样例来演示socket通信,这里我们使用了一个封装好的sock ...
- python网络编程-socket样例
socket样例 一:只能一个客户端发送一个信息. 客户端 # -*- coding:utf-8 -*- __author__ = 'shisanjun' import socket sock=soc ...
- Python Socket 编程——聊天室演示样例程序
上一篇 我们学习了简单的 Python TCP Socket 编程,通过分别写服务端和client的代码了解主要的 Python Socket 编程模型.本文再通过一个样例来加强一下对 Socket ...
- 【Java】Java Socket 通信演示样例
用socket(套接字)实现client与服务端的通信. 这里举两个样例: 第一种是每次client发送一个数据,服务端就做一个应答. (也就是要轮流发) 另外一种是client能够连续的向服务端发数 ...
- myloader恢复mysql数据库演示样例
mydumper是针对mysql数据库备份的一个轻量级第三方的开源工具.备份方式为逻辑备份.它支持多线程.备份速度远高于原生态的mysqldump以及众多优异特性.与其相配套的恢复工具则是mylo ...
- Linux crontab 命令格式与具体样例
基本格式 : * * * * * command 分 时 日 月 周 命令 第1列表示分钟1-59 每分钟用*或者 */1表示 第2列表示小时1-23(0表示0点) 第3列表示日期1-31 第4列表示 ...
- libcurl使用演示样例
简要说明:C++使用libcurl訪问"www.baidu.com".获取返回码和打印出http文件 /* * @ libcurl使用演示样例 * @ 2014.04.29 * @ ...
随机推荐
- 不常用的容易忘记常见mysql操作数据表命令
删除外键关联的约束 alter table tablename drop foreign key keyname;
- RESTful转载,多看几遍就理解了写点自己的看法和理解
要理解资源路由就要理解什么是RESTful.如果一个架构符合REST(即Representational State Transfer的缩写,意为表现层状态转化)原则,就称它为RESTful架构. R ...
- C#_Markov_心得感想
来到实验室正好有一个月了,趁着端午假期稍微轻松一些,在大改程序体系之前,想将自己在这30天中工作之一Markov回顾一下,将从真实的写程序中学习到的知识.思想记录下来.希望能和大家积极讨论! 本文会以 ...
- IOS HTTP访问端口
Project dyld_sim raised exception class ENetHTTPClientException with message 'Error -1022 accessing ...
- 机器学习入门-主成分分析(PCA)
主成分分析: 用途:降维中最常用的一种方法 目标:提取有用的信息(基于方差的大小) 存在的问题:降维后的数据将失去原本的数据意义 向量的内积:A*B = |A|*|B|*cos(a) 如果|B| = ...
- 基于OpenGL编写一个简易的2D渲染框架-02 搭建OpenGL环境
由于没有使用GLFW库,接下来得费一番功夫. 阅读这篇文章前请看一下这个网页:https://learnopengl-cn.github.io/01%20Getting%20started/02%20 ...
- AI-人工智能-参考文档
人工智能——目录汇总: https://blog.csdn.net/qq_27297393/article/details/80685474 人工智能——高数篇: https://blog.cs ...
- tensorflow笔记之反向传播时用到的几种方法
1. 梯度下降, tf.train.GradientDescentOptimizer(0.05),梯度下降的问题在与不一定能获得全局最优解,并且因为要在所有数据上最小化损失,所以损失函数是在所有训练数 ...
- win10 ubuntu双系统安装后无法引导进入ubuntu
之前按照先装windows后装ubuntu的方式装的系统,都可以引导到ubuntu,无论是将ubuntu挂在到/boot在windows用easy BCD建立ubuntu引导,还是将ubuntu挂在到 ...
- java heap space解决方法和JVM参数设置
在JVM中如果98%的时间是用于GC(Garbage Collection)且可用的 Heap size 不足2%的时候将抛出异常信息,java.lang.OutOfMemoryError: Java ...