0

我正在研究 BSD 套接字并使用此功能

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

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

编辑:示例

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

4

1 回答 1

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-11-15T19:46:29.890 回答