首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >recvfrom()套接字编程Ubuntu

recvfrom()套接字编程Ubuntu
EN

Stack Overflow用户
提问于 2013-05-27 20:50:20
回答 1查看 577关注 0票数 0

我昨天发了一个问题,得到了一些有用的反馈!所以,我修复了我的很多代码,现在我遇到的问题是从recvfrom()提取数据并在printf()中显示它们,以下是我的代码:

代码语言:javascript
复制
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);

请帮帮我!谢谢。。

EN

回答 1

Stack Overflow用户

发布于 2013-05-27 21:04:15

outMsgLenrecvfrom接收的字节数

如果要显示文本,请执行以下操作:

代码语言:javascript
复制
outMsg[outMsgLen] = '\0';
printf("%s\n", outMsg);

编辑:

正如@nos所说,如果不将outMsg声明为char outMsg[MAX_MSG_LEN + 1];,则存在溢出风险

更好的选择是在recvfrom中使用strlen(whatever)而不是MAX_MSG_LEN来确定长度。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16773602

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档