SOCK通信:AF_UNIX域 :服务器-客户端

简介:

服务器端:

#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include <sys/socket.h>
#include <sys/un.h>
#include <stddef.h>
char buf[100];
void main(void)
{int sersock,cltsock;
 int len,clen;
 int ret=0;
 struct sockaddr_un seraddr,cltaddr;
 sersock=socket(AF_UNIX,SOCK_STREAM,0);
 if(sersock<0)  {return ;}
 memset(&seraddr,0,sizeof(seraddr));
 seraddr.sun_family=AF_UNIX;
 sprintf(seraddr.sun_path,"ser");
 unlink(seraddr.sun_path);
 len = offsetof(struct sockaddr_un, sun_path) + strlen(seraddr.sun_path);
 if (0 > bind(sersock, (struct sockaddr *)&seraddr, sizeof(struct sockaddr)) ||      //
        0 > listen(sersock, 10))
        {printf("fail to bind and lisen \n");}
     printf("Start to listen connect request from unix socket name: \"%s\"\n", seraddr.sun_path);
while(1)
{ clen=sizeof(cltaddr);
  cltsock=accept(sersock,(struct sockaddr*)&cltaddr,&clen);
  if(0>cltsock)
   {printf("ACCEPT  error\n");}
  clen -= offsetof(struct sockaddr_un, sun_path);
  cltaddr.sun_path[clen] = 0;
        while(1)
        {
         ret = recv(cltsock,buf,100, 0);
         buf[ret]=0;
         printf(buf);
         if (ret != send(cltsock, buf,ret, 0))
            {printf("AgentSrv send message fail\n");}
        } 
}
close(cltsock);
close(sersock);
}

 

 

客户端:

#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<string.h>
#include <sys/socket.h>
#include <sys/un.h>
#include <stddef.h>
char buf[100];
void main(void)
{
    int cltsock, len, err;
    struct sockaddr_un cltaddr;
    struct sockaddr_un seraddr;
  int ret;
    cltsock = socket(AF_UNIX, SOCK_STREAM, 0);
    if (cltsock < 0)
    {
     printf("socket creat error !!!\n");
      return;
    }
    memset(&cltaddr, 0, sizeof(cltaddr));
    cltaddr.sun_family = AF_UNIX;
    sprintf(cltaddr.sun_path, "clt");
    len = offsetof(struct sockaddr_un, sun_path) + strlen(cltaddr.sun_path);
    unlink(cltaddr.sun_path); //若已存在,先删除之
    if (bind(cltsock, (struct sockaddr *)&cltaddr, sizeof(struct sockaddr)) < 0)  //绑定之后才能建立文件路劲
    {
        printf("Bind socket to addr fail\n");
        close(cltsock);
        return;
    }
    
 /*   if(chmod(cltaddr.sun_path, S_IRWXU) < 0)     //修改文件权限:可以不需要
    {
        printf("Set %s rwx for user only fail\n", cltaddr.sun_path);
        return;
    }
*/ 
    //设置服务端地址
    memset((char*)&seraddr, 0, sizeof(seraddr));
    seraddr.sun_family = AF_UNIX;
    strcpy(seraddr.sun_path, "ser");
    len = offsetof(struct sockaddr_un, sun_path) + strlen("ser");
    //以客户端socket连接服务端地址
    if (connect(cltsock, (struct sockaddr *)&seraddr, len) < 0)
    {
        printf("Connect agent sock \"%s\" fail\n", "ser");
        return;
    }
    while(1)
    {printf("input a line:");
     gets(buf);
     len=strlen(buf);
     printf("\nsend cnt:%d\n",len);
     if (len != send(cltsock, buf, len, 0))
   {
    printf("Send msg fail\n");
    return ;
   }
   ret = recv(cltsock,buf,100, 0);
         buf[ret]=0;
         printf("\nreceived: %s\n",buf);
    }
    close(cltsock);
}



本文转自 a_liujin 51CTO博客,原文链接:http://blog.51cto.com/a1liujin/1662514,如需转载请自行联系原作者

相关文章
|
10天前
|
存储 SQL 安全
什么是传统的客户端服务器模式架构
什么是传统的客户端服务器模式架构
36 0
|
10天前
|
网络协议 Python
pythonTCP客户端编程连接服务器
【4月更文挑战第6天】本教程介绍了TCP客户端如何连接服务器,包括指定服务器IP和端口、发送连接请求、处理异常、进行数据传输及关闭连接。在Python中,使用`socket`模块创建Socket对象,然后通过`connect()`方法尝试连接服务器 `(server_ip, server_port)`。成功连接后,利用`send()`和`recv()`进行数据交互,记得在通信完成后调用`close()`关闭连接,确保资源释放和程序稳定性。
|
9天前
|
网络协议 JavaScript 前端开发
WebSocket:实现客户端与服务器实时通信的技术
WebSocket:实现客户端与服务器实时通信的技术
|
4天前
|
移动开发 iOS开发 Perl
iOS客户端和h5页面的互相调用,服务器和客户端间通信方式
iOS客户端和h5页面的互相调用,服务器和客户端间通信方式
8 0
|
4天前
|
网络协议 Python
在python中利用TCP协议编写简单网络通信程序,要求服务器端和客户端进行信息互传。 - 蓝易云
在这个示例中,服务器端创建一个socket并监听本地的12345端口。当客户端连接后,服务器发送一条欢迎消息,然后关闭连接。客户端创建一个socket,连接到服务器,接收消息,然后关闭连接。
57 0
|
10天前
|
网络协议
Socket实现服务器和客户端(手把手教会)
Socket实现服务器和客户端(手把手教会)
|
10天前
|
网络协议 Dubbo Java
【网络编程】理解客户端和服务器并使用Java提供的api实现回显服务器
【网络编程】理解客户端和服务器并使用Java提供的api实现回显服务器
14 0
|
10天前
|
JavaScript 前端开发 搜索推荐
Vue 的服务器端渲染(SSR)和客户端渲染(CSR)在渲染过程、性能、用户体验等方面都存在显著的区别
【5月更文挑战第8天】Vue 的 SSR 和 CSR 在渲染上有明显差异。SSR 服务器端生成 HTML 返回给浏览器,提供更快首屏加载和更好的 SEO,但增加服务器负担。CSR 客户端渲染,首次加载可能较慢,但交互更流畅,开发更简单。两者各有优劣,需根据项目需求权衡选择。
20 2
|
10天前
|
Apache 项目管理 数据安全/隐私保护
Windows安装TortoiseSVN客户端结合Cpolar实现公网提交文件到本地服务器
Windows安装TortoiseSVN客户端结合Cpolar实现公网提交文件到本地服务器
|
10天前
|
Apache 项目管理 数据安全/隐私保护
TortoiseSVN客户端如何安装配置并实现公网访问服务端提交文件到本地服务器
TortoiseSVN客户端如何安装配置并实现公网访问服务端提交文件到本地服务器

热门文章

最新文章