server
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <string.h>
#include <arpa/inet.h>
#include <sys/un.h>
✹ int main(int argc, char *argv[])
{
int lfd = socket(AF_LOCAL,SOCK_STREAM,0);
if(lfd == -1)
{
perror("sock error");
exit(1);
}
// 绑定
struct sockaddr_un serv;
serv.sun_family = AF_LOCAL;
strcpy(serv.sun_path,"server.sock");
int ret = bind(lfd,(struct sockaddr*)&serv,sizeof(serv));
if(ret == -1)
{
perror("bind error");
exit(1);
}
// 监听
ret = listen(lfd,36);
if(ret == -1)
{
perror("listen error");
exit(1);
}
// 等待接收链接请求
struct sockaddr_un client;
socklen_t len = sizeof(client);
int cfd = accept(lfd,(struct sockaddr*)&client,&len);
printf("client bind file: %s\n",client.sun_path);
if(cfd == -1)
{
perror("accept error");
exit(1);
}
//通信
while(1)
{
char buf[1024] = {0};
int recvlen = recv(cfd,buf,sizeof(buf),0);
if(recvlen == -1)
{
perror("recv error");
exit(1);
}else if(recvlen == 0)
{
printf("client disconnect ......\n");
close(cfd);
break;
}else{
printf("recv buf: %s\n",buf);
send(cfd,buf,recvlen,0);
}
}
close(cfd);
close(lfd);
return 0;
}
client
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <string.h>
#include <arpa/inet.h>
#include <sys/un.h>
✹ int main(int argc, char *argv[])
{
int fd = socket(AF_LOCAL,SOCK_STREAM,0);
if(fd == -1)
{
perror("socket error");
exit(1);
}
// ========================================
// 给客户端绑定一个套接字文件
struct sockaddr_un client;
client.sun_family = AF_LOCAL;
strcpy(client.sun_path,"client.sock");
int ret = bind(fd,(struct sockaddr*)&client,sizeof(client));
if(ret == -1)
{
perror("bind error");
exit(1);
}
// 初始化server信息
struct sockaddr_un server;
server.sun_family = AF_LOCAL;
strcpy(server.sun_path,"server.sock");
// 链接服务器
connect(fd,(struct sockaddr*)&server,sizeof(server));
//通信
while(1)
{
char buf[1024] = {0};
fgets(buf,sizeof(buf),stdin);
send(fd,buf,strlen(buf)+1,0);
// 接收数据
recv(fd,buf,sizeof(buf),0);
printf("recv buf: %s\n",buf);
}
return 0;
}