c语言编程笔录

首页 >   > 笔记大全

笔记大全

c语言udp编程函数

更新时间:2023-11-13

1. 创建套接字

在UDP编程中,首先需要创建一个套接字来进行通信。套接字可以简单理解为两个程序之间的通信端点。通过调用socket函数,可以创建一个UDP套接字。示例如下:

#include<stdio.h>
#include<sys/types.h>
#include<sys/socket.h>

int main(){
    int sockfd;

    /* 创建UDP套接字 */
    sockfd = socket(AF_INET, SOCK_DGRAM, 0);
    if(sockfd < 0){
        printf("套接字创建失败\n");
        return -1;
    }

    /* 继续其他操作 */

    return 0;
}

2. 绑定端口号

在进行UDP通信时,需要为套接字绑定一个端口号,以便其他程序可以通过指定端口号来与该程序进行通信。示例如下:

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

int main(){
    int sockfd;

    /* 创建UDP套接字 */
    sockfd = socket(AF_INET, SOCK_DGRAM, 0);
    
    /* 绑定端口号 */
    struct sockaddr_in addr;
    addr.sin_family = AF_INET;
    addr.sin_port = htons(1234);
    addr.sin_addr.s_addr = INADDR_ANY;
    if(bind(sockfd, (struct sockaddr*)&addr, sizeof(addr)) < 0){
        printf("端口绑定失败\n");
        return -1;
    }

    /* 继续其他操作 */

    return 0;
}

3. 发送数据

在UDP编程中,可以使用sendto函数发送数据到目的地。sendto函数的参数包括套接字描述符、数据内容、数据长度、目标地址和目标地址长度。示例如下:

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

int main(){
    int sockfd;

    /* 创建UDP套接字 */
    sockfd = socket(AF_INET, SOCK_DGRAM, 0);
    
    /* 绑定端口号 */

    /* 发送数据 */
    struct sockaddr_in destaddr;
    destaddr.sin_family = AF_INET;
    destaddr.sin_port = htons(5678);
    destaddr.sin_addr.s_addr = inet_addr("192.168.0.1");
    char* message = "Hello, UDP!";
    int len = strlen(message);
    if(sendto(sockfd, message, len, 0, (struct sockaddr*)&destaddr, sizeof(destaddr)) < 0){
        printf("发送数据失败\n");
        return -1;
    }

    /* 继续其他操作 */

    return 0;
}

4. 接收数据

在UDP编程中,可以使用recvfrom函数接收来自其他程序的数据。recvfrom函数的参数包括套接字描述符、接收缓冲区、缓冲区长度、接收数据来源的地址以及地址的长度。示例如下:

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

int main(){
    int sockfd;

    /* 创建UDP套接字 */
    sockfd = socket(AF_INET, SOCK_DGRAM, 0);
    
    /* 绑定端口号 */

    /* 发送数据 */

    /* 接收数据 */
    struct sockaddr_in srcaddr;
    int addrlen = sizeof(srcaddr);
    char buffer[1024];
    int recvlen;
    if((recvlen = recvfrom(sockfd, buffer, sizeof(buffer), 0, (struct sockaddr*)&srcaddr, &addrlen)) < 0){
        printf("接收数据失败\n");
        return -1;
    }
    buffer[recvlen] = '\0';
    printf("接收到的数据:%s\n", buffer);

    /* 继续其他操作 */

    return 0;
}

总结:

UDP编程在C语言中通过创建套接字、绑定端口号、发送数据和接收数据来实现。通过使用socket函数创建套接字,使用bind函数绑定端口号,使用sendto函数发送数据,使用recvfrom函数接收数据。这些函数提供了基本的UDP通信功能,通过合理组织和调用这些函数,可以实现复杂的UDP通信应用。