【问题标题】:How to save value of buffer from recvfrom() into array?如何将 recvfrom() 中的缓冲区值保存到数组中?
【发布时间】:2020-03-11 22:24:19
【问题描述】:

我正在开发 BSD 套接字并使用此功能

int recvfrom( int socket , void *buffer , size_t nbytes , int flags , struct sockaddr *sender , int *addrlen)

但在服务器中打印消息之前,我想将缓冲区的值保存在 char 数组中并进行一些操作。怎么做?

编辑:示例

缓冲区存储一条消息“Hello”,我的数组应该看起来像arr[]={'h','e','l','l','o'}

【问题讨论】:

  • 使用memcpy() 复制到数组中的缓冲区。
  • 我必须使用精确的 sockaddr 和 addrlen
  • 这是远程对等地址!但是传入的数据是在缓冲区指向的区域中接收的。

标签: c udp recvfrom


【解决方案1】:

recvfrom()函数

int recvfrom( int socket , void *buffer , size_t nbytes ,
              int flags , struct sockaddr *sender , int *addrlen);

允许用户从 UDP 套接字接收数据。成功时(返回值 > 0),它返回接收到的字节数,最多写入nbytes 字节到buffer 指向的内存区域。 Originator的地址和len也是函数分别写在调用者提供的senderaddrlen指针中。

因此,为了在您的 char 数组中包含传入字节(字符是字节!),您只需将其作为缓冲区参数传递给 recvfrom。

#define MAX_RECV_BUF_LEN 100

char arr[MAX_RECV_BUF_LEN + 1];
struct sockaddr senderAddr;
int addrLen, res;

res = recvfrom( yourSocketDescr , arr, MAX_RECV_BUF_LEN, yourFlags , &senderAddr, &addrLen);
if ( res > 0 )
{
  arr[res] = 0; // Add a string terminator. Useful only if you expect 'printable' data

  // ... some operations
}
/* else... manage errors */

【讨论】:

    猜你喜欢
    • 2019-03-27
    • 2015-11-17
    • 1970-01-01
    • 1970-01-01
    • 2014-07-04
    • 2023-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多