socket 编程 listen函数 阻塞了 而且accept函数接受连接后 只有读取数据才会向下执行 纠结很久了 有大佬帮忙看一下么 谢谢了
// 服务器端
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <netinet/in.h>
int main(int argc,char *argv[])
{
int sockfd=socket(AF_INET,SOCK_STREAM,0);
struct sockaddr_in serveraddr;
serveraddr.sin_family=AF_INET;
serveraddr.sin_port=htons(atoi(argv[1]));
serveraddr.sin_addr.s_addr=INADDR_ANY;
if(bind(sockfd,(struct sockaddr*)&serveraddr,sizeof(serveraddr))<0){
perror("bind error");
exit(1);
}
printf("bind\n");
if(listen(sockfd,10)<0){
perror("listen error");
exit(1);
}
struct sockaddr_in clientaddr;
char buffer[512];
socklen_t clientaddr_len = sizeof(clientaddr);
printf("listen");
while(1){
int fd = accept(sockfd,(struct sockaddr*)&clientaddr,&clientaddr_len);
printf("accept connect");
if(fd<0){
perror("accept error");
continue;
}
printf("accept connect");
pid_t pid=fork();
if(pid <0){
continue;
}else if(pid == 0){
// child process
while(1){
memset(buffer,0,sizeof(buffer));
read(sockfd,buffer,sizeof(buffer));
fputs(buffer,stdout);
}
}else {
printf("parent process");
}
}
// close(fd);
close(sockfd);
return 0;
}
// 客户端
#include <stdlib.h>
#include <string.h>
#include <netinet/in.h>
int main(int argc,char *argv[])
{
int sockfd=socket(AF_INET,SOCK_STREAM,0);
struct sockaddr_in serveraddr;
serveraddr.sin_family=AF_INET;
serveraddr.sin_port=htons(atoi(argv[1]));
char ip[16];
memset(ip,0,sizeof(ip));
strcpy(ip,"127.0.0.1");
inet_pton(AF_INET,ip,&serveraddr.sin_addr.s_addr,sizeof(serveraddr));
char buffer[512];
if(connect(sockfd,(struct sockaddr*)&serveraddr,sizeof(serveraddr))<0){
perror("connect error");
exit(1);
}
printf("connect ok \n");
// close(fd);
while(1){
int ret;
if(( ret= write(sockfd,buffer,sizeof(buffer)))<0){
perror("write error");
continue;
}
read(sockfd,buffer,ret);
fputs(buffer,stdout);
memset(buffer,0,sizeof(buffer));
}
return 0;
}