报式域套接字 服务器端
int main(int argc, const char *argv[])
{
//报式套接字之服务器端
//创建用于通信的套接字文件描述符
int sfd = socket(AF_UNIX,SOCK_DGRAM,0);
if(-1 == sfd)
{
perror("socket");
return -1;
}
printf("sfd = %d\n",sfd);
//判断要绑定的套接字文件是否存在
if(access("./unix",F_OK) == 0)
{
if(unlink("./unix") == -1)
{
perror("unlink error");
return -1;
}
}
//填充服务器的地址信息
struct sockaddr_un sun; //创建服务器的地址信息结构体
sun.sun_family = AF_UNIX;
strcpy(sun.sun_path,"./unix"); //套接字文件路径写入sun.sun_path
//绑定文件描述符和地址信息结构体
if(bind(sfd,(struct sockaddr*)&sun,sizeof(sun)) == -1)
{
perror("bind error");
return -1;
}
printf("bind success\n");
//数据收发
char rbuf[128] = ""; //准备读数据的容器
//准备接收对端的地址信息结构体
struct sockaddr_un cun; //准备接收对端地址信息
socklen_t addrlen = sizeof(cun);
recvfrom(sfd,rbuf,sizeof(rbuf),0,(struct sockaddr*)&cun,&addrlen);
//死循环接收数据
while(1)
{
bzero(rbuf,sizeof(rbuf));
recvfrom(sfd,rbuf,sizeof(rbuf),0,(struct sockaddr*)&cun,&addrlen);
printf("[%s]:%s\n",cun.sun_path,rbuf);
strcat(rbuf,"**_**"); //将收到的消息添加笑脸发送回去
if(sendto(sfd,rbuf,sizeof(rbuf),0,(struct sockaddr*)&cun,sizeof(cun)) == -1)
{
perror("write error");
return -1;
}
printf("发送成功\n");
}
//关闭套接字
close(sfd);
return 0;
}
报式域套接字 客户端
#include <myheader.h>
int main(int argc, const char *argv[])
{
//创建用于通信的套接字文件描述符
int cfd = socket(AF_UNIX,SOCK_DGRAM,0);
if(-1 == cfd)
{
perror("socket error");
return -1;
}
printf("cfd = %d\n",cfd);
//绑定套接字文件
//填充客户端地址信息结构体
struct sockaddr_un cun;
cun.sun_family = AF_UNIX;
strcpy(cun.sun_path,"./linux");
//判断需要绑定的套接字文件是否存在
if(access("./linux",F_OK) == 0) //如果文件存在
{
if(unlink("./linux") == -1)
{
perror("unlink error");
return -1;
}
}
//绑定
if(bind(cfd,(struct sockaddr*)&cun,sizeof(cun)) == -1)
{
perror("bind error");
return -1;
}
//数据收发
//填充服务器地址信息结构体
char wbuf[128] = "";
struct sockaddr_un sun;
sun.sun_family = AF_UNIX;
strcpy(sun.sun_path,"./unix");
//循环收发
char rbuf[128] = "";
while(1)
{
memset(rbuf,0,128);//清空容器
memset(wbuf,0,128);
fgets(wbuf,sizeof(wbuf),stdin); //从终端上获取信息
wbuf[sizeof(wbuf)-1] = 0;
sendto(cfd,wbuf,strlen(wbuf),0,(struct sockaddr*)&sun,sizeof(sun));
printf("发送成功");
recvfrom(cfd,rbuf,sizeof(rbuf),0,NULL,NULL);
printf("接收到的消息为%s\n",rbuf);
}
//关闭套接字
close(cfd);
return 0;
}

1870

被折叠的 条评论
为什么被折叠?



