服务端

#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;    

}

收藏于 2014-07-21
来自于百度空间

socket domain 样例的更多相关文章

  1. 【go】go语言socket通信样例

    server.go package main import ( "net" "fmt" "io" ) func main() { liste ...

  2. socket编程——一个简单的样例

    从一个简单的使用TCP样例開始socket编程,其基本过程例如以下: server                                                  client ++ ...

  3. Swift - 使用socket进行通信(附聊天室样例)

    在Swift开发中,如果我们需要保持客服端和服务器的长连接进行双向的数据通信,使用socket是一种很好的解决方案. 下面通过一个聊天室的样例来演示socket通信,这里我们使用了一个封装好的sock ...

  4. python网络编程-socket样例

    socket样例 一:只能一个客户端发送一个信息. 客户端 # -*- coding:utf-8 -*- __author__ = 'shisanjun' import socket sock=soc ...

  5. Python Socket 编程——聊天室演示样例程序

    上一篇 我们学习了简单的 Python TCP Socket 编程,通过分别写服务端和client的代码了解主要的 Python Socket 编程模型.本文再通过一个样例来加强一下对 Socket ...

  6. 【Java】Java Socket 通信演示样例

    用socket(套接字)实现client与服务端的通信. 这里举两个样例: 第一种是每次client发送一个数据,服务端就做一个应答. (也就是要轮流发) 另外一种是client能够连续的向服务端发数 ...

  7. myloader恢复mysql数据库演示样例

     mydumper是针对mysql数据库备份的一个轻量级第三方的开源工具.备份方式为逻辑备份.它支持多线程.备份速度远高于原生态的mysqldump以及众多优异特性.与其相配套的恢复工具则是mylo ...

  8. Linux crontab 命令格式与具体样例

    基本格式 : * * * * * command 分 时 日 月 周 命令 第1列表示分钟1-59 每分钟用*或者 */1表示 第2列表示小时1-23(0表示0点) 第3列表示日期1-31 第4列表示 ...

  9. libcurl使用演示样例

    简要说明:C++使用libcurl訪问"www.baidu.com".获取返回码和打印出http文件 /* * @ libcurl使用演示样例 * @ 2014.04.29 * @ ...

随机推荐

  1. linux双网卡绑定实现冗余与负载均衡

    1 编辑/etc/modprobe.conf   在/etc/modprobe.conf里加入如下两行: alias bond0 bonding options bond0 mode=1 miimon ...

  2. UI5-文档-4.35-Responsiveness

    在这一步中,我们将改进应用程序的响应能力.SAPUI5应用程序可以在手机.平板电脑和桌面设备上运行,我们可以对应用程序进行配置,以便为每个场景充分利用屏幕空间.幸运的是,SAPUI5控件类似于sap. ...

  3. Linux CentOS7中 设置IP地址、网关DNS

    cd  /etc/sysconfig/network-scripts/  #进入网络配置文件目录 vi  ifcfg-eno16777736  #编辑配置文件,此处eno后边的编号因电脑而易 TYPE ...

  4. MySQL Installation of system tables failed!

    刚开始学习Linux,就遇到了问题. 当在RedHat下安装MySQL时提示如下错误,请高手给点指点,谢谢: rpm -vih  MySQL-server-community-5.0.96-1.rhe ...

  5. 基元线程同步构造 AutoResetEvent和ManualResetEvent 线程同步

    在.Net多线程编程中,AutoResetEvent和ManualResetEvent这两个类经常用到, 他们的用法很类似,但也有区别.ManualResetEvent和AutoResetEvent都 ...

  6. jquery读取本地文件,Windows上报错。XMLHttpRequest cannot load xxx. Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, https, chrome-extension-resource.k.cors.a.c

    问题: 测试报告,使用本地的json.txt文件,结果文件读取失败,报错如下: XMLHttpRequest cannot load xxx. Cross origin requests are on ...

  7. Visual Studio 2008 简体中文正式版下载及序列号(无使用期限限制,正式版)

    VS2008中文试用版刚出来不久就上网拖了下来可是安装的时候却出问题了.后来,Google了下,把自己遇到的问题和解决方法跟大家分享.1.让试用版变成正式版    从Microsoft那下了7个压缩文 ...

  8. SVN的基本操作

    右键SVN Commit 提交成功了,我们把SVN的服务器端刷新一下 所有的操作如果只是删除本地的文件都不会影响服务器端的文件,除非右键SVN Commit删除文件或者是新增文件才会对服务器端的仓库里 ...

  9. The Doors(几何+最短路,好题)

    The Doors http://poj.org/problem?id=1556 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions ...

  10. 【校招面试 之 剑指offer】第10-1题 斐波那契数列

    递归以及非递归实现: #include<iostream> using namespace std; long long fun(long long n){ if(n == 0){ ret ...