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);```其中:
关闭 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); } 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); // 发送数据 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》内容分享到这里,如果有相关疑问请在本站留言。
- 上一篇:iframe Js无法获取里面元素
- 下一篇:返回列表
版权声明:《c语言socket编程udp》来自【石家庄人才网】收集整理于网络,不代表本站立场,所有图片文章版权属于原作者,如有侵略,联系删除。
https://www.ymil.cn/quanzi/19025.html