您当前的位置:首页 > 圈子

c语言socket编程udp

2024-10-20 14:46:16 作者:石家庄人才网

本篇文章给大家带来《c语言socket编程udp》,石家庄人才网对文章内容进行了深度展开说明,希望对各位有所帮助,记得收藏本站。

在 C 语言中,可以使用 Socket API 进行网络编程,其中 UDP 是一种无连接的协议,它可以用于快速、不可靠的数据传输。本文将介绍如何使用 C 语言 Socket API 进行 UDP 编程。

创建 Socket

首先,需要使用 `socket()` 函数创建一个 Socket,并指定使用 UDP 协议:

```cint sockfd = socket(AF_INET, SOCK_DGRAM, 0);```

其中:

  • `AF_INET` 表示使用 IPv4 地址族。
  • `SOCK_DGRAM` 表示使用 UDP 协议。
  • `0` 表示使用默认协议。

绑定地址

如果需要接收数据,则需要使用 `bind()` 函数将 Socket 绑定到一个地址和端口号:

```cstruct sockaddr_in serveraddr;memset(&serveraddr, 0, sizeof(serveraddr));serveraddr.sin_family = AF_INET;serveraddr.sin_addr.s_addr = INADDR_ANY;serveraddr.sin_port = htons(port);bind(sockfd, (struct sockaddr ○)&serveraddr, sizeof(serveraddr));```

其中:

  • `serveraddr` 是一个 `sockaddr_in` 结构体,用于存储地址信息。
  • `INADDR_ANY` 表示绑定到本机的所有 IP 地址。
  • `htons()` 函数用于将主机字节序转换为网络字节序。

发送数据

可以使用 `sendto()` 函数发送数据:

```csendto(sockfd, message, strlen(message), 0, (struct sockaddr ○)&clientaddr, sizeof(clientaddr));```

其中:

  • `message` 是要发送的数据。
  • `clientaddr` 是目标地址。

接收数据

可以使用 `recvfrom()` 函数接收数据:

```crecvfrom(sockfd, buffer, sizeof(buffer), 0, (struct sockaddr ○)&clientaddr, &addrlen);```

其中:

  • `buffer` 用于存储接收到的数据。
  • `clientaddr` 用于存储发送数据的客户端地址。
  • 关闭 Socket

    使用完 Socket 后,需要使用 `close()` 函数关闭:

    ```cclose(sockfd);```

    示例代码

    下面是一个简单的 UDP 服务器和客户端示例代码:

    服务器端

    ```c#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#include <sys/socket.h>#include <netinet/in.h>#define PORT 8080int main() { int sockfd; char buffer[1024]; struct sockaddr_in serveraddr, clientaddr; socklen_t len = sizeof(clientaddr); // 创建 Socket sockfd = socket(AF_INET, SOCK_DGRAM, 0); if (sockfd < 0) { perror("socket creation failed"); exit(EXIT_FAILURE); } memset(&serveraddr, 0, sizeof(serveraddr)); serveraddr.sin_family = AF_INET; serveraddr.sin_addr.s_addr = INADDR_ANY; serveraddr.sin_port = htons(PORT); // 绑定地址 if (bind(sockfd, (struct sockaddr ○)&serveraddr, sizeof(serveraddr)) < 0) { perror("bind failed"); exit(EXIT_FAILURE); } while (1) { // 接收数据 int n = recvfrom(sockfd, buffer, sizeof(buffer), 0, (struct sockaddr ○)&clientaddr, &len); buffer[n] = '\0'; printf("Client : %s\n", buffer); // 发送数据 sendto(sockfd, buffer, n, 0, (struct sockaddr ○)&clientaddr, len); printf("Hello message sent.\n"); } close(sockfd); return 0;}```

    客户端

    ```c#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#define PORT 8080#define IP_ADDRESS "127.0.0.1"int main() { int sockfd; char buffer[1024]; struct sockaddr_in serveraddr; socklen_t len = sizeof(serveraddr); // 创建 Socket sockfd = socket(AF_INET, SOCK_DGRAM, 0); if (sockfd < 0) { perror("socket creation failed"); exit(EXIT_FAILURE); }

    c语言socket编程udp

    memset(&serveraddr, 0, sizeof(serveraddr)); serveraddr.sin_family = AF_INET; serveraddr.sin_port = htons(PORT); serveraddr.sin_addr.s_addr = inet_addr(IP_ADDRESS); while (1) { printf("Enter message : "); fgets(buffer, sizeof(buffer), stdin);

    c语言socket编程udp

    // 发送数据 sendto(sockfd, buffer, strlen(buffer), 0, (struct sockaddr ○)&serveraddr, len); // 接收数据 int n = recvfrom(sockfd, buffer, sizeof(buffer), 0, (struct sockaddr ○)&serveraddr, &len); buffer[n] = '\0'; printf("Server : %s\n", buffer); } close(sockfd); return 0;}```

    石家庄人才网小编对《c语言socket编程udp》内容分享到这里,如果有相关疑问请在本站留言。

    版权声明:《c语言socket编程udp》来自【石家庄人才网】收集整理于网络,不代表本站立场,所有图片文章版权属于原作者,如有侵略,联系删除。
    https://www.ymil.cn/quanzi/19025.html