96-Linux_UDP实现客户端和服务器端

news/2024/5/18 16:09:06 标签: udp, linux, 网络协议

UDP实现客户端和服务器端

  • 一.udp实现客户端和服务器端的编程流程
  • 二.udp实现实现客户端和服务器端所用的接口
    • 1.socket
    • 2.sendto
    • 3.recvfrom
  • 三.udp服务器端代码和客户端的代码
    • 1.服务器端
    • 2.客户端

udp_1">一.udp实现客户端和服务器端的编程流程

udp提供无链接的,不可靠的,数据报服务;
在这里插入图片描述

udp_5">二.udp实现实现客户端和服务器端所用的接口

1.socket

socket()用来创建套接字,使用 udp 协议时,选择数据报服务 SOCK_DGRAM。

2.sendto

sendto()用来发送数据,由于 UDP 是无连接的,每次发送数据都需要指定对端的地址(IP 和端口)。

ssize_t sendto(int sockfd, void buff, size_t len, int flags,struct sockaddr dest_addr, socklen_t addrlen);

buff 和 len 参数分别指定写缓冲区的位置和数据长度
dest_addr 指定接收数据端的 socket 地址
addrlen 指定该地址的长度

3.recvfrom

recvfrom()接收数据,每次都需要传给该方法一个地址结构来存放发送端的地址。recvfrom()可以接收所有客户端发送给当前应用程序的数据,并不是只能接收某一个客户端的数据。

ssize_t recvfrom(int sockfd, void buff, size_t len, int flags,struct sockaddr src_addr, socklen_t *addrlen)

buff 和 len 参数分别指定读缓冲区的位置和大小
src_addr 记录发送端的 socket 地址
addrlen 指定该地址的长度

udp_28">三.udp服务器端代码和客户端的代码

1.服务器端

#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
#include<assert.h>
#include<string.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<pthread.h>
#include<sys/wait.h>


int main()
{
    int sockfd=socket(AF_INET,SOCK_DGRAM,0);
    assert(sockfd!=-1);
    struct sockaddr_in saddr,caddr;
    memset(&saddr,0,sizeof(saddr));
    saddr.sin_family=AF_INET;
    saddr.sin_port=htons(6000);
    saddr.sin_addr.s_addr=inet_addr("127.0.0.1");
    int res=bind(sockfd,(struct sockaddr*)&saddr,sizeof(saddr));
    assert(res!=-1);
    while(1)
    {
        int len=sizeof(caddr);
        char buff[128]={0};
        recvfrom(sockfd,buff,127,0,(struct sockaddr*)&caddr,&len);
        printf("read:%s",buff);
        sendto(sockfd,"ok",2,0,(struct sockaddr*)&caddr,sizeof(caddr));
    }
    close(sockfd);
    exit(0);
}

2.客户端

#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
#include<assert.h>
#include<string.h>
#include<sys/socket.h>
#include<arpa/inet.h>
#include<netinet/in.h>

int main()
{
    int sockfd=socket(AF_INET,SOCK_DGRAM,0);
    assert(sockfd!=-1);
    struct sockaddr_in saddr;
    memset(&saddr,0,sizeof(saddr));
    saddr.sin_family=AF_INET;
    saddr.sin_port=htons(6000);
    saddr.sin_addr.s_addr=inet_addr("127.0.0.1");
    while(1)
    {
        printf("input:\n");
        char buff[128]={0};
        fgets(buff,127,stdin);
        if(strncmp(buff,"end",3)==0)
        {
            break;
        }
        sendto(sockfd,buff,strlen(buff),0,(struct sockaddr*)&saddr,sizeof(saddr));
        memset(buff,0,128);
        int len=sizeof(saddr);
        recvfrom(sockfd,buff,127,0,(struct sockaddr*)&saddr,&len);
        printf("buff=%s\n",buff);
    }
    close(sockfd);
    exit(0);
}

http://www.niftyadmin.cn/n/232856.html

相关文章

让手机、电视都用上Windows,微软开起了网吧

二十多年前 Windows 95 开启了家用 PC 时代。 Win XP 、Win7 … 一代代经典系统的诞生&#xff0c;Windows的市场份额彻底实现一家独大。 不过随着移动设备的兴起&#xff0c;Windows 的地位显然不如从前。 苹果、Google 都在多平台发力&#xff0c;而微软 Windows Phone 的试…

论文 : Multi-Channel EEG Based Emotion Recognition Using TCNBLS

Multi-Channel EEG Based Emotion Recognition Using Temporal Convolutional Network and Broad Learning System 本文设计了一种基于多通道脑电信号的端到端情绪识别模型——时域卷积广义学习系统(TCBLS)。TCBLS以一维脑电信号为输入&#xff0c;自动提取脑电信号的情绪相关…

基于互相关性的信号同步

许多测量涉及多个传感器异步采集的数据。如果您要集成信号并以关联式研究它们&#xff0c;您必须同步它们。为此&#xff0c;请使用 xcorr。 例如&#xff0c;假设有一辆汽车经过一座桥。它产生的振动由位于不同位置的三个相同传感器进行测量。信号有不同到达时间。 将三个时…

C++ Primer (第五版)-第九章 顺序容器

文章目录一、概述二、内容9.1、顺序容器概述如何选择合适的容器9.2、容器库概览迭代器容器类型成员列表初始化赋值和Swap容器的大小关系运算符9.3 顺序容器操作9.3.1向顺序容器添加元素访问元素删除元素改变容器大小9.4 Vector 对象如何增长9.5、额外的string 操作9.5.2、改变s…

Js实现滚动变色的文字效果

<html> <head> <meta http-equiv"Content-Type" content"text/html; charsetutf-8" /> <title>滚动变色的文字js特效</title> </head> <body> <div style"width:736px;"> 请注意下方的文…

程序员只能吃青春饭?3条晋升之路帮你摆脱程序员中年魔咒!

作为一个程序员 尤其是在这些中 不管是中国 还是美国的这些大的公司里边呢 往往呢 有大概两条这样的一个境界之路 根据你自己个人的这种能力兴趣 其实你可以进行自己的选择 科技大佬们其实往往呢也都是从 这个比较年轻的时候对吧 归国创业也好 还是自己出自于草根 然后一下子凝…

​力扣解法汇总1023. 驼峰式匹配

目录链接&#xff1a; 力扣编程题-解法汇总_分享记录-CSDN博客 GitHub同步刷题项目&#xff1a; https://github.com/September26/java-algorithms 原题链接&#xff1a;力扣 描述&#xff1a; 如果我们可以将小写字母插入模式串 pattern 得到待查询项 query&#xff0c;那么…

【Java技术指南】「JPA编程专题」让你不再对JPA技术中的“持久化型注解”感到陌生了

JPA编程专题JPA的介绍JPA的介绍分析JPA注解总览JPA实体型注解EntityTableTableGeneratorTableGenerator 属性TemporalTransientColumnColumn 属性ColumnUniqueConstraint属性状态VersionVersionEmbeddable 和 EmbeddedEmbeddedEmbeddedIdMappedSuperclassEntityListenersEntity…