如何使用SOCK_DGRAM制作双向unix域套接字?
发布时间:2020-12-15 22:06:28 所属栏目:安全 来源:网络整理
导读:我正在尝试编写一个简单的Unix数据报服务器/客户端,并且遇到了一些问题.我想要的是一个服务器,它监听数据报套接字并将收到的每条消息的回复发送给原始发送者.我决定首先尝试使用socat作为“服务器”并在C中编写客户端.我正在运行这样的socat: socat UNIX-DG
我正在尝试编写一个简单的Unix数据报服务器/客户端,并且遇到了一些问题.我想要的是一个服务器,它监听数据报套接字并将收到的每条消息的回复发送给原始发送者.我决定首先尝试使用socat作为“服务器”并在C中编写客户端.我正在运行这样的socat:
socat UNIX-DGRAM:/tmp/test.socket,fork EXEC:echo 根据我的理解,这应该监听/tmp/test.socket并回复使用相同字符串收到的所有内容?然后我有一个看起来像这样的客户端程序(为清楚起见,删除了错误检查): int s = socket(AF_UNIX,SOCK_DGRAM,0); struct sockaddr_un sa; sa.sun_family = AF_UNIX; strcpy(sa.sun_path,"/tmp/test.socket"); const char *data = "Testing data"; int err = sendto(s,data,strlen(data),(struct sockaddr *)(&sa),sizeof(struct sockaddr_un)); printf("Sent!n"); unsigned char *buffer = malloc(BUFFER_LENGTH); struct sockaddr_storage recv_sa; int recv_sa_len = 0; int recv_len = recvfrom(s,buffer,BUFFER_LENGTH,(struct sockaddr *)&recv_sa,&recv_sa_len); for (int i = 0; i < recv_len; i++) { putc(buffer[i],stdout); } printf("n"); 它应该发送数据包(有效),接收数据包,然后将其打印出来,但程序似乎无法接收数据包.我在这里做错了什么,或者我对Unix套接字有一个根本的误解?谢谢! 解决方法
看一下Michael Kerrisk的AF_UNIX SOCK_DGRAM客户端/服务器程序(
client,server)的例子,该程序发表在他的书“Linux编程接口”第57章中.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- bootStrap中class = "form-control selectpicker auto&
- Angular Material vs. Material Design Lite
- AngularJS使用factory和service的方法
- AngularJS开发人员最常犯的10个错误
- 在angular cli项目结构中添加或放置外部Javascript文件的位
- (Swagger)一个终端和后台开发对api接口管理工具
- bash – 通过目录递归并转换音乐
- angularjs – 如何使用ng-init设置scope属性?
- angularjs – UI-路由器 – 在每次路由更改时运行功能 – 州
- Bootstrap下拉菜单