我正在研究 BSD 套接字并使用此功能
int recvfrom( int socket , void *buffer , size_t nbytes , int flags , struct sockaddr *sender , int *addrlen)
但在服务器中打印消息之前,我想将缓冲区的值保存在 char 数组中并进行一些操作。怎么做?
编辑:示例
缓冲区存储一条消息“你好”,我的数组应该看起来像arr[]={'h','e','l','l','o'}
recvfrom()
功能
int recvfrom( int socket , void *buffer , size_t nbytes ,
int flags , struct sockaddr *sender , int *addrlen);
允许用户从 UDP 套接字接收数据。成功时(返回值 > 0),它返回接收到的字节数,最多将nbytes
字节写入 指向的内存区域buffer
。Originator 的地址和它的 len 也分别由调用者提供的函数sender
和addrlen
指针写入。
因此,为了在您的 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 */