红联Linux门户
Linux帮助

linux 套接字 编程 急阿

发布时间:2009-12-13 16:29:39来源:红联作者:suowenair
//这是网络套接字的编程
//这是服务器端
#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处??
急阿 !
谢谢阿!
文章评论

共有 1 条评论

  1. jinger7281 于 2009-12-14 09:10:41发表:

    gdb在write处设置断点 看看是不是进入死循环了!还有write使用的参数前边也设置断点看看是不是根本就没有读入数据