fork()
TCP サーバー プログラムの一部として機能しながら、親プロセスと子プロセスを相互に通信させるには、助けが必要です。TCP サーバーの親 A と子 B を呼び出しましょう。A はクライアントからデータを受信し、B はそのクライアントにデータを自動的に送信します。A が「こんにちは」を受け取ったら、B は「こんにちは」と言う必要があります。問題は、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,"");
}
「パイプが実行されていません」というメッセージは表示されません。そして、途中で何かがブロックされているためだと感じています。