UDP服务端和客户端通信代码开发流程

这篇具有很好参考价值的文章主要介绍了UDP服务端和客户端通信代码开发流程。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、UDP通信

TCP:传输控制协议,面向连接的,稳定的,可靠的,安全的数据集流传递

稳定和可靠:丢包重传

数据有序:序号和确认序号

流量控制:稳定窗口

UDP:用户数据报协议

面向无连接的,不稳定的,不可靠,不安全的数据报传递=---更像是收发短信,UDP传输不需要建立连接,传输效率更高,在稳定的局域网内部环境相对可靠

UDP通信相关函数介绍

接收信息函数

ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,

结构 sockaddr *src_addr, socklen_t *addrlen);

函数说明: 接收消息

参数说明:

sockfd 套接字

buf 要接受的缓冲区

len 缓冲区的长度

flags 标志位 一般填0

src_addr 原地址 传出参数

addrlen 发送方地址长度

返回值

成功: 返回读到的字节数

失败: 返回 -1 设置errno

调用该函数相当于TCP通信的recv+accept函数

发送数据函数

ssize_t sendto(int sockfd, const void *buf, size_t len, int flags,

const struct sockaddr *dest_addr, socklen_t addrlen);

函数说明: 发送数据

参数说明:

sockfd 套接字

dest_addr 目的地址

addrlen 目的地址长度

返回值

成功: 返回写入的字节数

失败: 返回-1,设置errno

UDP服务端和客户端通信代码开发流程,udp,网络协议,网络

二、UDP服务端和客户端开发流程

1.服务端开发流程

(1) 创建socket (man 7 udp)

udp_socket = 套接字(AF_INET,SOCK_DGRAM,0);

SOCK_DGRAM:面向无连接,不安全,不可靠,的数据报传输

(2) 绑定-绑定

(3) 而 (1)

{

读取数据

n = recvfrom(cfd,buf,sizeof(buf),0,(struct sockaddr *) &client,&len);

发送数据

sendto(cfd,buf,n,0,(struct sockaddr *)&client,len);

}

(4)//关闭文件描述符

平仓(CFD)

2.客户端开发流程

(1) 创建socket (man 7 udp)

udp_socket = 套接字(AF_INET,SOCK_DGRAM,0);

(2) 而 (1)

     {

              //发送数据

              sendto(cfd,buf,n,0,(struct sockaddr *) &client,&len);

              //读取数据

              n = recvfrom(cfd,buf,sizeof(buf),0,(struct sockaddr *) &client,&len);

      }

(3)关闭socket套接字

close(cfd)

三、客户端和服务端代码开发案例

1.UDP服务端代码开发

代码

//udp服务端
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <ctype.h>

int main()
{
	int cfd = socket(AF_INET,SOCK_DGRAM,0);
	if(cfd < 0)
	{
		perror("sock error");
		return -1;
	}
	
	struct sockaddr_in serv;
	struct sockaddr_in client;
	bzero(&serv,sizeof(serv));
	serv.sin_family = AF_INET;
	serv.sin_port = htons(8888);
	serv.sin_addr.s_addr = htonl(INADDR_ANY);
	bind(cfd,(struct sockaddr *)&serv,sizeof(serv));
	
	int i;
	int n;
	socklen_t len;
	char buf[1024];
	
	while(1)
	{
		memset(buf,0x00,sizeof(buf));
		len = sizeof(client);
		n = recvfrom(cfd, buf,sizeof(buf),0,(struct sockaddr *)&client,&len);
		
		for(i = 0;i < n;i ++)
		{
			buf[i] = toupper(buf[i]);
		}
		
		printf("[%d]: n == [%d],buf == [%s]\n",ntohs(client.sin_port),n,buf);
		sendto(cfd, buf,n,0,(struct sockaddr *)&client,len);
	}
    close(cfd);
    return 0;
}

效果展示

运行服务端

UDP服务端和客户端通信代码开发流程,udp,网络协议,网络

 使用nc -u 127.1 8888 进行连接到服务端UDP服务端和客户端通信代码开发流程,udp,网络协议,网络

 所有网络连接和进程的命令,并过滤结果以仅显示与端口8888相关的连接或进程

UDP服务端和客户端通信代码开发流程,udp,网络协议,网络

2.UDP客户端代码开发

代码

//udp服务端
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <ctype.h>
 
int main()
{
    //创建socket
    int cfd = socket(AF_INET, SOCK_DGRAM, 0);
    if(cfd<0)
    {
        perror("socket error");
        return -1;
    }
 
    //绑定
    struct sockaddr_in serv;
    serv.sin_family = AF_INET;
    serv.sin_port = htons(8888);
    inet_pton(AF_INET, "127.0.0.1", &serv.sin_addr.s_addr);
 
    int n;

    char buf[1024];
    while(1)
    {
        //读取标准输入 
        memset(buf, 0x00, sizeof(buf));
        n  = read(STDIN_FILENO,buf,sizeof(buf));
        
        //发送数据
        sendto(cfd, buf, n, 0, (struct sockaddr *)&serv, sizeof(serv));
        
        
        //读取数据
        memset(buf, 0x00, sizeof(buf));
        n = recvfrom(cfd, buf, sizeof(buf), 0, NULL, NULL);
        printf("n==[%d], buf==[%s]\n", n, buf);
        
    }
 
    //关闭套接字
    close(cfd);
 
    return 0;
}

运行结果

UDP服务端和客户端通信代码开发流程,udp,网络协议,网络文章来源地址https://www.toymoban.com/news/detail-742325.html

到了这里,关于UDP服务端和客户端通信代码开发流程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Qt专栏】Qt实现TCP服务端和客户端通信

    网络通信是程序员必须会的一项生存技能,这里简单的实现了服务端和客户端通信的两个小示例,代码可以直接拿来用,开发环境是Qt5.9.6。 1.项目架构 2.tcpserver.h文件 3.tcpserver.cpp文件 4.测试效果 1.项目架构 2.tcpserver.h文件 3.tcpserver.cpp文件 4.测试效果 好了,两个小程序写完并

    2024年02月12日
    浏览(37)
  • C# Socket通信从入门到精通(15)——单个同步UDP服务器监听一个客户端C#代码实现

    我们在开发UDP通信程序时,除了开发UDP客户端程序,有时候我们也需要开发UDP服务器程序,这在实际项目中是经常会遇到的,所以说掌握UDP服务器程序的开发是一项必备的技能,尤其在上位机软件开发领域,掌握UDP服务器程序的开发是走向高级工程师的必经之路,也是面试必

    2024年02月03日
    浏览(59)
  • C# Socket通信从入门到精通(16)——单个同步UDP服务器监听多个客户端C#代码实现

    我们在开发UDP通信程序时,有时候我们也需要开发UDP服务器程序,这个服务器只需要和一个客户端实现通信,比如这篇博文C# Socket通信从入门到精通(15)——单个同步UDP服务器监听一个客户端C#代码实现,但是在实际项目中有的时候需要和多个客户端进行通信,这时和一个客

    2024年01月22日
    浏览(63)
  • (二) 用QWebSocket 实现服务端和客户端(详细代码直接使用)

    目录 前言 一、服务器的代码: 1、服务器的思路 2、具体服务器的代码示例 二、客户端的代码: 1、客户端的思路(和服务器类似) 2、具体客户端的代码示例 前言         要是想了解QWebSocket的详细知识,还得移步到上一篇文章: WebSocket 详解,以及用QWebSocket 实现服务端

    2024年01月20日
    浏览(44)
  • WebSocket 详解,以及用QWebSocket 实现服务端和客户端(含代码例子)

    目录 前言: 1、WebSocket 诞生背景 2、WebSocket的特点: 3、 WebSocket 简介 4、WebSocket 优点 5、QWebSocket通讯—客户端: 6、QWebSocket通讯—服务端: 前言:         要是对WebSocket 的基本知识都了解了,可以直接移步,实际如何使用这个类 (二) 用QWebSocket 实现服务端和客户端(

    2024年02月16日
    浏览(48)
  • (一)WebSocket 详解,以及用QWebSocket 实现服务端和客户端(含代码例子)

    目录 前言: 1、WebSocket 诞生背景 2、WebSocket的特点: 3、 WebSocket 简介 4、WebSocket 优点 5、QWebSocket通讯—客户端: 6、QWebSocket通讯—服务端: 前言:         要是对WebSocket 的基本知识都了解了,可以直接移步,实际如何使用这个类 (二) 用QWebSocket 实现服务端和客户端(

    2024年02月03日
    浏览(52)
  • Unity-UDP-客户端/服务器通信功能

    这里简单实现客户端和服务器,复杂的实现需要和前几篇文章的TCP一样,管理多个链接过来的客户端,这里只有一个。需要自己封装类似listener来管理多个链接过来的设备,每次都缓存ReceiveAsync收到消息的中的RemoteEndPoint地址端口,统一管理发送接收消息。 https://zhidao.baidu.c

    2024年02月11日
    浏览(66)
  • 服务器端使用django websocket,客户端使用uniapp 请问服务端和客户端群组互发消息的代码怎么写的参考笔记

    2023/8/29 19:21:11 服务器端使用django websocket,客户端使用uniapp 请问服务端和客户端群组互发消息的代码怎么写 2023/8/29 19:22:25 在服务器端使用Django WebSocket和客户端使用Uniapp的情况下,以下是代码示例来实现服务器端和客户端之间的群组互发消息。 服务器端代码 (使用Django Chann

    2024年02月11日
    浏览(46)
  • 【网络原理】使用Java基于UDP实现简单客户端与服务器通信

    我们用Java实现UDP数据报套接字编程,需要借用以下API来实现 网络编程, 本质上是要操作网卡. 但是网卡不方便直接操作. 在操作系统内核中, 使用了一种特殊的叫做 “socket” 这样的文件来抽象表示网卡. 因此进行网络通信, 势必需要先有一个 socket 对象. DatagramSocket 是UDP Socket,

    2024年03月11日
    浏览(59)
  • C# Socket通信从入门到精通(14)——多个异步UDP客户端C#代码实现

    在之前的文章C# Socket通信从入门到精通(13)——单个异步UDP客户端C#代码实现我介绍了单个异步Udp客户端的c#代码实现,但是有的时候,我们需要连接多个服务器,并且对于每个服务器,我们都有一些比如异步发送、异步接收的操作,那么这时候我们使用之前单个异步Udp客户

    2024年02月03日
    浏览(80)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包