Chinaunix

标题: 求助:linux 进程之间socket通讯的问题 [打印本页]

作者: suntek-video    时间: 2009-10-15 14:02
标题: 求助:linux 进程之间socket通讯的问题
#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <sys/un.h>
#include <unistd.h>
#include <sys/wait.h>

#define  LEN 64
int main()
{
        unsigned char data[LEN];
        int server_sockfd,client_sockfd;
        int server_len,client_len,num;
        struct sockaddr_un server_address;
        struct sockaddr_un client_address;
        unlink("server_socket");
        if(server_sockfd = socket(AF_UNIX,SOCK_STREAM,0)<0)
        {
                printf("creat error\n");
                return 1;
        }        
        server_address.sun_family = AF_UNIX;
        strcpy(server_address.sun_path,"mysocket");
        server_len = sizeof(server_address);
        if(bind(server_sockfd,(struct sockaddr*)&server_address,server_len)==-1)
        {
                printf("bind error\n");
                return 1;
        }
小弟不明白为什么上面程序运行到bind的时候会出现bind error,请各位帮忙指点一下,谢谢
作者: c/unix    时间: 2009-10-15 14:48
提示: 作者被禁止或删除 内容自动屏蔽
作者: suntek-video    时间: 2009-10-15 16:49
那应该怎么写?谢谢
作者: c/unix    时间: 2009-10-15 16:53
提示: 作者被禁止或删除 内容自动屏蔽
作者: suntek-video    时间: 2009-10-15 17:53
不行还是一样的,bind失败
作者: ameihualudeai1    时间: 2009-10-15 19:16
提示是套接字是个文件描述符,不是个套接字描述符,问题期待高人指点!
作者: ameihualudeai1    时间: 2009-10-15 20:23
写全就没有错误了啊!原因我也没懂,不过是正确的!

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/un.h>
#include <sys/ipc.h>
#include <sys/wait.h>

#define NAME "my_socket"
int main(void){
   int orig_sock,
       new_sock,
       clnt_len,
        i;
static struct sockaddr_un clnt_adr,
                          serv_adr;
static char buf[10];
void clean_up(int ,char *);
if((orig_sock=socket(AF_UNIX,SOCK_STREAM,0))<0){
  perror("generate error\n");
  exit(1);
}
serv_adr.sun_family=AF_UNIX;
strcpy(serv_adr.sun_path,NAME);
unlink(NAME);
if(bind(orig_sock,(struct sockaddr*)&serv_adr,sizeof(serv_adr.sun_family)+strlen(serv_adr.sun_path))<0){
perror("bind error");
exit(2);


}
listen(orig_sock,1);
clnt_len=sizeof(clnt_adr);
if((new_sock=accept(orig_sock,(struct sockaddr*)&clnt_adr,&clnt_len))<0){
  perror("accept error!\n");
  exit(3);



}
for(i=0;i<=10;i++){
  sleep(1);
  read(new_sock,buf,sizeof(buf));
  printf("s_>%s",buf);



}
close(new_sock);
clean_up(orig_sock,NAME);
exit(0);
}

void clean_up(int sd,char *the_file){
  close(sd);
  unlink(the_file);

}




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2