免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1805 | 回复: 2
打印 上一主题 下一主题

unix套接字问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-01-21 17:55 |只看该作者 |倒序浏览
服务器端:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <sys/un.h>
#include <errno.h>

int main(void)
{
        struct sockaddr_un remote_addr;
        int send_fd;
        char  *buf = "one world,one dream";
         int t = 0;
       
        memset(&remote_addr,0,sizeof(remote_addr));

        if((send_fd = socket(AF_LOCAL,SOCK_DGRAM,0))!= -1)
        {
                remote_addr.sun_family = AF_LOCAL;
                strcpy(remote_addr.sun_path, "/home/code/CLIENT");
                               
    chmod(remote_addr.sun_path, 0777);
    if (unlink(remote_addr.sun_path) != 0)
    {
      perror("unlink");
    }
               
       
  
            if(t = (sendto(send_fd,buf,strlen(buf),MSG_DONTWAIT,
                                (struct sockaddr *)&remote_addr, sizeof(remote_addr)))!= -1)
                        {
                                printf("sendto : bytes = %d\n",t);
                        }
                        else
                                {
                                        printf("sendto : error i = %d \n",i);
                                }
            close(send_fd);               
  }
        else
        {
                        printf("failed\n");
        }       

        return 0;       
       
}

客户端
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <sys/un.h>
#include <errno.h>

int main(void)
{
        struct sockaddr_un local_addr,remote_addr;
        int recv_fd;
        socklen_t fromlen = sizeof(struct sockaddr);
       
        char  buf[256] = {0};
       
        memset(&local_addr,0,sizeof(local_addr));
        memset(&remote_addr,0,sizeof(remote_addr));
        fromlen = sizeof(remote_addr);
       
        if((recv_fd = socket(AF_LOCAL,SOCK_DGRAM,0))!= -1)
        {
                local_addr.sun_family = AF_LOCAL;
                strcpy(local_addr.sun_path, "/home/zhubo/code/3/CLIENT");
               
                printf("create socket\n");
                unlink(local_addr.sun_path);
                /*remote_addr.sun_family = AF_LOCAL;
                strcpy(remote_addr.sun_path,"/home/zhubo/code/3/CLIENT");*/
                printf("link addr\n");
                if (bind(recv_fd, (struct sockaddr *)&local_addr, sizeof(local_addr)) != -1)
                        {
                    chmod(local_addr.sun_path, 0777);
                                printf("bind addr\n");
                                if(recvfrom(recv_fd,buf,sizeof(buf),0,
                                        (struct sockaddr *)&remote_addr, &fromlen)!= -1)
                                        {
                                                printf("path: %s\n", remote_addr.sun_path);
            printf("buff: %s\n", buf);
                                        }                                           
            }  
            close(recv_fd);                                
        }
        else
                {
                        printf("failed\n");
                }       

        return 0;       
       
}



客户端可以正常工作,但是为什么服务器端怎么老是发送失败?

论坛徽章:
0
2 [报告]
发表于 2008-01-22 10:21 |只看该作者
服务器端的unix socket需要绑定路径名,在没有绑定的unix socket上面
发送数据,不会自动绑定一个路径名,和一般的UDP socket不同。

论坛徽章:
0
3 [报告]
发表于 2008-01-22 10:50 |只看该作者
ok,我试一下!谢谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP