Linux UDP服务端和客户端程序的实现

yizhihongxing

下面是关于Linux UDP服务端和客户端程序的实现的详细攻略。

1.UDP简介

UDP(User Datagram Protocol)用户数据报协议是一种无连接的协议,与TCP协议不同,UDP不会建立连接,发送数据时不会保证数据的可靠性以及顺序,甚至不保证是否到达对方。UDP在实时数据传输中非常常见,例如视频流、音频流等。

2.UDP服务端程序实现

下面的示例是UDP服务端程序的一个基本实现,包括创建Socket、绑定地址、接收数据、关闭Socket等操作。

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

#define PORT 1234 //指定端口号

int main(void)
{
    int sockfd;
    char buffer[1024];
    struct sockaddr_in server_addr, client_addr;
    int n;

    //创建Socket
    sockfd = socket(AF_INET, SOCK_DGRAM, 0);

    //绑定地址
    server_addr.sin_family = AF_INET;
    server_addr.sin_port = htons(PORT);
    server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
    bind(sockfd, (struct sockaddr*)&server_addr, sizeof(server_addr));

    //接收数据
    while (1) {
        printf("waiting for data...\n");
        socklen_t length = sizeof(client_addr);
        n = recvfrom(sockfd, buffer, 1024, 0, (struct sockaddr*)&client_addr, &length);
        buffer[n] = '\0'; // 添加字符串结尾符号
        printf("server received: %s\n", buffer);
    }

    //关闭Socket
    close(sockfd);

    return 0;
}

3.UDP客户端程序实现

下面的示例是UDP客户端程序的一个基本实现,包括创建Socket、发送数据、关闭Socket等操作。

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>

#define PORT 1234 //指定端口号

int main(int argc, char *argv[])
{
    int sockfd, n;
    char buffer[1024];
    struct sockaddr_in server_addr;
    struct hostent *server;

    //创建Socket
    sockfd = socket(AF_INET, SOCK_DGRAM, 0);

    //获取服务端的IP地址
    server = gethostbyname(argv[1]);

    //配置服务端的地址信息
    bzero((char *)&server_addr, sizeof(server_addr));
    server_addr.sin_family = AF_INET;
    bcopy((char *)server->h_addr, (char *)&server_addr.sin_addr.s_addr, server->h_length);
    server_addr.sin_port = htons(PORT);

    //发送数据
    printf("Please enter the message: ");
    bzero(buffer, 1024);
    fgets(buffer, 1024, stdin);
    sendto(sockfd, buffer, strlen(buffer), 0, (struct sockaddr *)&server_addr, sizeof(server_addr));

    //关闭Socket
    close(sockfd);

    return 0;
}

4.UDP服务端和客户端之间的交互示例

下面的示例演示了在Linux系统下,UDP服务端和客户端之间的交互。首先编译并启动服务端程序,然后启动客户端程序,客户端程序发送数据,服务端程序接收并输出。

服务端程序:

$ gcc udp_server.c -o udp_server
$ ./udp_server
waiting for data...

客户端程序:

$ gcc udp_client.c -o udp_client
$ ./udp_client localhost
Please enter the message: hello

服务端程序输出:

waiting for data...
server received: hello

可见,服务端程序成功接收到了来自客户端程序的数据。

5.总结

本文介绍了Linux下UDP服务端和客户端程序的基本实现,包括创建Socket、绑定地址、发送数据、接收数据等操作。同时,本文也提供了一个UDP服务端和客户端之间的交互示例,帮助读者更好地理解UDP通信的过程。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Linux UDP服务端和客户端程序的实现 - Python技术站

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • #include 用法之我见

    Sprint Boot中的@EnableTransactionManagement 在Spring Boot中,@EnableTransactionManagement是一个注解,用于启用事务管理。本文将详细介绍@EnableTransactionManagement的作用和使用方法,包括示例说明。 @EnableTransactionManagement的…

    other 2023年5月5日
    00
  • Cython处理C字符串的示例详解

    下面是关于“Cython处理C字符串的示例详解”的完整攻略: 背景说明 在Cython中处理C字符串(Char类型指针)需要用到C的字符串相关函数,比如strlen、strcpy等等。对于熟悉C语言的程序员而言这是相对容易的,但是对于Python开发者来说就需要具备一定的C语言基础。为了方便Python开发者进行C/C++扩展,Cython提供了一种简单的方…

    other 2023年6月20日
    00
  • js预加载图片方法汇总

    关于 “js预加载图片方法汇总”,我将会为您提供完整的攻略。 目录 什么是预加载图片 预加载图片的优点 JS 预加载图片方法汇总 Image 对象 Ajax HTML5 prefetch Web Font Loader LazyLoad 什么是预加载图片 预加载图片是指在页面加载后,提前把一些重要的图片下载到客户端缓存里,以便在需要显示时能够更快速地获取图片…

    other 2023年6月25日
    00
  • 如何用vue封装axios请求

    当我们使用Vue框架进行前端开发时,经常需要通过发送HTTP请求来与后台进行交互。其中,axios是一个很流行的HTTP请求工具库,它提供了简单易用、强大的API,并且可以拦截请求、响应。本文将详细讲解如何用Vue封装axios请求,并提供两个例子供参考。 安装axios和Vue-axios 使用npm或者yarn安装axios和Vue-axios: npm…

    other 2023年6月25日
    00
  • vue中下拉框组件的封装方式

    下面是Vue中下拉框组件的封装方式的完整攻略。 1. 需求分析 在实现下拉框组件之前,我们需要先明确需求。下拉框组件是一个常用的UI组件,在业务开发中使用频率较高。下拉框组件需要具备以下特性: 可以展示选项 可以展开和关闭选项 可以选择选项,选择后可以展示该选项的文本或图标 支持多选或单选模式 支持异步数据加载 2. 基本组件结构 在实现组件之前,我们需要先…

    other 2023年6月25日
    00
  • CMD里或登陆远程linux服务器时命令行下复制和粘贴实现方法

    要在CMD命令行或远程登录Linux服务器的命令行下实现复制和粘贴,可以通过以下几种方法: 1. 使用鼠标右键复制和粘贴 在Windows系统下,可以在CMD命令行窗口中,使用鼠标右键来复制和粘贴文本。具体操作如下: 复制:选中要复制的文本,然后右键单击选中的文本,选择“复制”命令,或者直接按下“Enter”键即可将文本复制到系统剪贴板中。 粘贴:右键单击C…

    other 2023年6月26日
    00
  • 手把手教你看kegg通路图!

    当然,我很乐意为您提供有关如何查看KEGG通路图的完整攻略。以下是详细的步骤和两个示例: 1. 访问KEGG网站 在开始查看KEGG通路图之前,您需要访问KEGG网站。您可以通过访问KEGG网站(https://www.kegg.jp/)来访问KEGG数据库。 2. 搜索KEGG通路图 在KEGG网站上,您可以使用搜索框来搜索KEGG通路图。可以输入通路图名…

    other 2023年5月6日
    00
  • java判断包含contains方法的使用

    以下是关于“Java判断包含contains方法的使用”的完整攻略,包括基本概念、使用方法和两个示例。 基本概念 Java中的contains方法是用于判断一个字符串是否包含另一个字符串的方法。它返回一个布尔值,如果被查找的字符串包含指定的字符串,则返回true,否则返回false。 使用方法 以下是使用Java中的contains方法的基本方法: 调用字符…

    other 2023年5月7日
    00
合作推广
合作推广
分享本页
返回顶部