0

私は昨日質問を投稿し、いくつかの有益なフィードバックを得ました! それで、私は多くのコードを修正しましたが、今私が抱えている問題は、 からデータを抽出しrecvfrom()て表示することですprintf()。ここに私のコードがあります:

clientAddr.sin_family = AF_INET;
clientAddr.sin_addr.s_addr = htonl(INADDR_ANY);
userIP.s_addr = RespMessage.user[i].ipAddr;
clientAddr.sin_addr.s_addr = userIP.s_addr;

printf("Username FOUND! What do you want to say? \n");
fgets(inMsg, MAX_MSG_LEN, stdin);
chatMsg = (UDPchat_t *)inMsg;

send = sendto(UDP_socketID, chatMsg->message, sizeof(chatMsg->message), 0, (struct sockaddr*)&clientAddr, size_c);
if (send < 0) 
{
       printf("Sending failure : %d", errno);
       continue;
}
else
{
       printf("Message sent!\n");
       continue;
}

outMsgLen = recvfrom(UDP_socketID, outMsg, MAX_MSG_LEN, 0, (struct sockaddr *)&clientAddr, (socklen_t*)&size_c);
send = gettimeofday(&timeVal, NULL);
curtime = timeVal.tv_sec;
printf("[%ld] Rcvd pkt from: ", outMsgLen);

助けてください!ありがとうございました..

4

1 に答える 1

1

outMsgLenによって受信されたバイト数です。recvfrom

テキストを表示したい場合:

outMsg[outMsgLen] = '\0';
printf("%s\n", outMsg);

編集:

outMsg@nos が言うように、 が次のように宣言されていない場合、オーバーフローのリスクがあります。char outMsg[MAX_MSG_LEN + 1];

長さを決定する代わりにstrlen(whatever)inを使用する方が適切です。recvfromMAX_MSG_LEN

于 2013-05-27T13:04:14.547 に答える