クライアントアドレスを取得しようとしていますが、sockaddr 構造を sockaddr_in にキャストする方法がわかりません。
struct sockaddr_in cliAddr, servAddr;
n = recvfrom(sd, msg, MAX_MSG, 0,(struct sockaddr *) cliAddr,sizeof(cliAddr));
//i tried this but it does not work
struct sockaddr cliSockAddr = (struct sockaddr *) cliAddr;
char *ip = inet_ntoa(cliSockAddr.sin_addr);
前もって感謝します!:)
このステップにたどり着いた質問を見つけました: sockaddr 構造から IPV4 アドレスを取得する
混乱を避けるために申し訳ありませんが、これは「ci」がsockaddr_inなどのポインターを格納するオブジェクトである私の実際の実装です。
/* receive message */
n = recvfrom(*(ci->getSd()), msg, MAX_MSG, 0,(struct sockaddr *) ci->getCliAddr(),ci->getCliLen());
char *ip = inet_ntoa(ci->getCliAddr().sin_addr);
次のエラーが表示されます。
udpserv.cpp:166: error: request for member ‘sin_addr’ in ‘ci->clientInfo::getCliAddr()’, which is of non-class type ‘sockaddr_in*’