c - recvfrom() 套接字编程 Ubuntu

标签 c linux sockets ubuntu

我昨天发布了一个问题并得到了一些有用的反馈!所以,我修复了很多代码,现在我遇到的问题是从 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);

求助!谢谢..

最佳答案

outMsgLenrecvfrom

接收到的字节数

如果要显示文字:

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

编辑:

正如@nos 所说,如果 outMsg 未声明为 char outMsg[MAX_MSG_LEN + 1];

,则存在溢出风险

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

关于c - recvfrom() 套接字编程 Ubuntu,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16773602/

相关文章:

c - 从文本文件读取时如何忽略空格?

c - 如何在 64 位 Windows 上用 C 代码发出 0x2D 中断?

android - arm-eabi-gcc : No such file or directory in cyanogenmod source

linux - 使用 grep -lr 输出将文件添加到 tar

c - 使用 recv 接收传入的 char 数组

c - Linux终端内置功能

objective-c - 在 Objective C 中调用 C 回调

java - 哪一种主要操作系统最适合快速引导和启动 Java 应用程序?

java - 我如何使用java中的客户端服务器套接字编程通过网络流式传输 Parquet 文件

sockets - 如何通过 CFSocketNativeHandle 使用 CFStreamCreatePairWithSocket