//这是服务器端
#include
#include
#include
#include
#include
#include
#define oops(ch) {perror(ch);return 0;}
int main()
{ int server_sockfd,client_sockfd;
int server_len,client_len;
struct sockaddr_un server_address;
struct sockaddr_un client_address;
unlink("/tmp/server_socket");
if((server_sockfd=socket(PF_UNIX,SOCK_STREAM,0))==-1)
oops("socket")
server_address.sun_family=AF_UNIX;
strcpy(server_address.sun_path,"/tmp/server_socket");
server_len=sizeof(server_address);
if(bind(server_sockfd,(struct sockaddr *)&server_address,server_len)==-1)
oops("bind");
if( listen(server_sockfd,4)==-1)
oops("listen");
while(1)
{
char ch;
printf("server waiting..\n");
if(client_sockfd=accept(server_sockfd,(struct sockaddr *)&client_address,&client_len)==-1)
oops("accept");
read(client_sockfd,&ch,1);
ch++;
write(client_sockfd,&ch,1);
}
return 0;
close(client_sockfd);
}
//这是客户端
#include
#include
#include
#include
#include
#include
#define oops(ch) {perror(ch);return 0;}
int main()
{ int sockfd;
int len;
char ch='A';
struct sockaddr_un address;
if((sockfd=socket(PF_UNIX,SOCK_STREAM,0))==-1)
oops("socket");
address.sun_family=AF_UNIX;
if(strncpy(address.sun_path,"/tmp/server_socket",18)==-1)
oops("strcpy");
len=sizeof(address);
// if(bind(sockfd,address,len)==-1)
// oops("bind");
if(connect(sockfd,(struct sockaddr *)&address,len)==-1)
oops("connect");
if(write(sockfd,&ch,1)==-1)//程序好像会在此处阻塞 不明白为什么!?
oops("write");
sleep(2);
read(sockfd,&ch,1);
printf("char from server=%c\n",ch);
close(sockfd);
return 0;
}
我不明白在运行了服务器端后 再运行客户端
为什么在运行客户端的时候程序会阻塞在write处??
急阿 !
谢谢阿!
jinger7281 于 2009-12-14 09:10:41发表:
gdb在write处设置断点 看看是不是进入死循环了!还有write使用的参数前边也设置断点看看是不是根本就没有读入数据