网络编程进阶--非网络通信套接字

本文详细介绍了UNIX域套接字的两种类型:非命名和命名。非命名UNIX域套接字通过`socketpair`函数创建,仅在进程间共享文件描述符。命名UNIX域套接字通过`bind`函数绑定到一个文件路径,服务器端示例展示了如何创建、监听和验证客户端连接。客户端示例展示了如何创建套接字文件、连接到服务器并发送数据。
摘要由CSDN通过智能技术生成

1.非命名UNIX域套接字

linux下环境下使用socketpair函数创造一对未命名的,相互连接的UNIX域套接字:

#include <sys/socket.h>

int socketpair(int domain,int type,int protocol,int sockfd[]);

 

第一个参数用于表示创建的套接字的域,本地进程通信时,用AF_UNIX。

第二个参数表示要创建的套接字的类型,因为本地连接时可靠地,所以指定为SOCK_STREAM。

第三个参数表示所用的协议,通常设为0.

第四个参数表示存储套接字描述符的数组。

 

非命名UNIX域套接字类似于非命名管道,只有保存了域套接字文件描述符的进程可以使用它。

 

//s_pipe.c

#include <stdio.h>

#include <stdlib.h>

#include <fcntl.h>

#include <unistd.h>

#include <sys/socket.h>

 

#define MAX 100

int main()

{

int sockfd[2];

pid_t pid;

char buf[MAX];

int n;

 

if(socketpair(AF_UNIX,SOCK_STREAM,0,sockfd)==-1){

perror("fail to create socker");

exit(1);

}else if(pid==0){

close(sockfd[0]);

strcpy(buf,"hello parent");

n=strlen(buf);

 

if(write(sockfd[1],buf,n)==-1){

perror("fall to write");

exit(1);
}

printf("the chlld done/n");

}else{

close(sockfd[1]);

if(read(sock[0],buf,MAX)==-1){

perror("fail to read");

exit(1);

}

 

n=strlen(buf);

buf[n]='/0';

 

printf("receive from child :%s/n",buf);

 

if(wait(NULL)==NULL){

perror("fail to wait");

exit(1);

}

 

printf(":the parent done/n");

}

 

return 0 ;

}

 

 

2.命名UNIX域套接字

与网络痛惜套接字一样,UNIX域套接字也要绑定地址,不过由于两者所是哟个的域不一样,所以其地址族也不一样。unix域套接字使用sockaddr_un结构表示,定义如下:

#include <sys/un.h>

struct sockaddr_un{

sa_family_t sun_family;//通信域,即AF_UNIX

char sun_path[108];//套接字文件的路径名

}

 

第二

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值