私は Beej のガイドを読んでいて、その例の 1 つであるストリーム クライアント/サーバーの例について詳しく説明したいと思いました。この例では、サーバーがメッセージを送信し、クライアントが受信します。
メッセージを送受信するプログラムを作成したいと思います。この場合、以前のサーバーとクライアントの両方が同じ役割を実行するため、サーバー/クライアント アーキテクチャではなくなります。それらは非常に似ています。
この例では、サーバーは次のことを行います。
getaddrinfo(NULL, PORT, &hints, &p);
sockfd = socket(p->ai_family, p->ai_socktype, p->ai_protocol));
bind(sockfd, p->ai_addr, p->ai_addrlen);
listen(sockfd, BACKLOG);
new_fd = accept(sockfd, (struct sockaddr *)&their_addr, &sin_size);
send(new_fd, "Hello, world!", 13, 0);
同じソケットからもメッセージを受信するには、何を追加する必要がありますか? 出来ますか?
元の socketfd を使用して connect() を試みたり、宛先情報を使用したりするなど、うまくいかないことをたくさん試しました。最後に、2 つのソケットを使用し、setsockopt() を使用してそれらを同じポートにバインドしましたが、より効率的な方法があるかどうかを知りたいです。