/* client.c */ #include #include #include #include #include int main() { int sockfd; int len; struct sockaddr_un address; int result; char ch=A; sockfd=socket(AF_UNIX,SOCK_STREAM,0); /*以上建立客户端的套接口,采用AF_UNIX的unix域协议*/ address.sun_family=AF_UNIX; strcpy(address.sun_path,"server_socket"); len=sizeof(address); /*以上创建服务器套接口的地址,其中包括套接口类型,名称*/ result=connect(sockfd,(struct sockaddr *)&address,len);
if(result==-1){ perror("oops:client1"); exit(1);
} /*以上我们试图与服务器套接口建立连接,一旦连接成功,那么就继续执行下面的程序*/ write(sockfd,&ch,1); read(sockfd,&ch,1); /*如果成功,将向服务器端发送一个字符,然后读取服务器的回答*/
printf("char from server=%c/n",ch); close(sockfd); exit(0); }
/* server.c */ #include #include #include #include #include int main() { int server_sockfd,client_sockfd; int server_len,client_len; struct sockaddr_un server_address; struct sockaddr_un client_address; unlink("server_socket"); /*如果存在同名的套接口,则先删除*/ server_sockfd=socket(AF_UNIX,SOCK_STREAM,0); /*以上建立套接口,这时候无名*/ server_address.sun_family=AF_UNIX; strcpy(server_address.sun_path,"server_socket"); server_len=sizeof(server_address); bind(server_sockfd,(struct sockaddr *)&server_address,server_len);
listen(server_sockfd,5); /*以上创建监听队列.等待用户的连接请求*/ while(1) //进入无限循环的监听状态 { char ch; printf("server waiting/n"); client_sockfd=accept(server_sockfd,(struct sockaddr *)&client_address,&client_len); /*以上接受一个客户的请求*/ read(client_sockfd,&ch,1); /*因为连接一旦建立,客户就会先发消息过来,所以服务器先读*/ ch++; write(client_sockfd,&ch,1); /*把读取的字符串做简单处理,回送*/ close(client_sockfd); } } |