我需要帮助来使父进程和子进程在充当fork()
TCP 服务器程序的一部分时相互交谈。让我们调用 TCP 服务器的父 A 和子 B。A 从客户端接收数据,B 自动向该客户端发送数据。当 A 收到“hi”时,B 应该说“hello”。问题是,pipe()
似乎不起作用,A 需要告诉 B 客户端发送了需要回复的内容。我已经阅读了有关共享内存的信息,但它似乎对我的使用并不实用。
请就如何实现这一点提出一些建议。我能够从 TCP 套接字的两端发送用户提示的消息,但我无法让客户端自动回复。
由于某些原因,我无法完全披露整个代码。这里有一些:
主要的:
int fd[2];
char bufout[10];
char bufin[10];
if (pipe2(fd,O_NONBLOCK) < 0) puts("Warning: Pipes not Running");
int id = fork();
if (id == -1) {
perror("fork: ");
return 1;
}
家长:
printf("Client %s connected. \n",cli_ip);
while(1){
memset(mesg,0,sizeof(mesg));
if( recvfrom(connfd,mesg,sizeof(mesg),0,(struct sockaddr *)&cliaddr,&len) > 0 ){
printf("From %s port %d: %s",cli_ip,ntohs(cliaddr.sin_port),mesg);
if (strncmp(mesg,"hi",4) == 0) {
printf("%s hi you\n",cli_ip);
close(fd[0]);
write(fd[1],"hi",sizeof("hi"));
}
}
else {
printf("Client %s disconnected. \n",cli_ip);
break;
}
}
孩子:
while (1){
close(fd[1]);
if (read(fd[0],bufin,sizeof(bufin))) sendto(sockfd,"hello\r",strlen("hello\r"),0,(const struct sockaddr *)&servaddr,len);
strcpy(bufin,"");
}
好吧,“管道未运行”消息没有出现,这是给定的。我觉得这是因为沿途有些东西被挡住了。