溫馨提示×

linux中sendto的使用方法是什么

小億
160
2024-06-04 10:16:25

在Linux中,sendto()函數(shù)用于向指定的目標(biāo)地址發(fā)送數(shù)據(jù)。其函數(shù)原型如下:

ssize_t sendto(int sockfd, const void *buf, size_t len, int flags,
               const struct sockaddr *dest_addr, socklen_t addrlen);

參數(shù)說明如下:

  • sockfd:指定發(fā)送數(shù)據(jù)的套接字文件描述符。
  • buf:指向包含要發(fā)送數(shù)據(jù)的緩沖區(qū)的指針。
  • len:要發(fā)送的數(shù)據(jù)的長度。
  • flags:用于指定發(fā)送的行為,通??梢栽O(shè)置為0。
  • dest_addr:指向目標(biāo)地址的結(jié)構(gòu)體指針,通常是struct sockaddr類型。
  • addrlen:目標(biāo)地址結(jié)構(gòu)體的長度。

示例代碼:

#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdio.h>
#include <string.h>

int main() {
    int sockfd;
    struct sockaddr_in dest_addr;
    char *msg = "Hello, World!";
    
    // 創(chuàng)建套接字
    sockfd = socket(AF_INET, SOCK_DGRAM, 0);
    
    // 設(shè)置目標(biāo)地址
    dest_addr.sin_family = AF_INET;
    dest_addr.sin_port = htons(12345);  // 目標(biāo)端口號
    dest_addr.sin_addr.s_addr = inet_addr("127.0.0.1");  // 目標(biāo)IP地址
    
    // 發(fā)送數(shù)據(jù)
    sendto(sockfd, msg, strlen(msg), 0, (struct sockaddr *)&dest_addr, sizeof(dest_addr));
    
    // 關(guān)閉套接字
    close(sockfd);
    
    return 0;
}

在以上示例中,首先創(chuàng)建一個UDP套接字,然后設(shè)置目標(biāo)IP地址和端口號,最后發(fā)送數(shù)據(jù)。發(fā)送成功后關(guān)閉套接字。

0