socket网络编程——UDP编程流程「建议收藏」

socket网络编程——UDP编程流程「建议收藏」UDP提供的是无连接、不可靠的、数据报服务。编程流程如下:socket()方法用来创建套接字,使用udp协议时,选择数据报服务SOCK_DGRAM。sendto()方法用来发送数据,由于UDP是无连接的,每次发送数据都需要指定对端的地址(IP和端口)。recvfrom()方法接收数据,每次都需要传给该方法一个地址结构来存放发送端的地址。recvfrom()方法可以接收所有客户端发送给当前应用程序的数据,并不是只能接收某一个客户端的数据。UDP服务端代码:#include<stdi


Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

UDP 提供的是无连接、不可靠的、数据报服务。编程流程如下:
在这里插入图片描述
socket()方法用来创建套接字,使用udp协议时,选择数据报服务SOCK_DGRAM。
sendto()方法用来发送数据,由于 UDP 是无连接的,每次发送数据都需要指定对端的地址(IP 和端口)。
recvfrom()方法接收数据,每次都需要传给该方法一个地址结构来存放发送端的地址。
recvfrom()方法可以接收所有客户端发送给当前应用程序的数据,并不是只能接收某一个客户端的数据。
UDP服务端代码:

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

int main()
{ 
   
    int sockfd = socket(AF_INET,SOCK_DGRAM,0);
    assert(sockfd != -1);

    struct sockaddr_in saddr,caddr;
    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("ip:%s port:%d buff = %s\n",inet_ntoa(caddr.sin_addr),ntohs(caddr.sin_port),buff);
        sendto(sockfd,"OK",2,0,(struct sockaddr*)&caddr,len);
    }

    close(sockfd);

    exit(0);
}

UDP客户端代码:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include<assert.h>
#include<sys/socket.h>
#include<arpa/inet.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)
    { 
   
        char buff[128] = { 
   0};
        printf("please inut:\n");
        fgets(buff,128,stdin);
        if(strncmp(buff,"end",3) == 0)
        { 
   
            break;
        }
        sendto(sockfd,buff,strlen(buff)-1,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);

    }

    exit(0);
}

运行结果 (一个服务端,打开两个客户端):
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/197420.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • SpringBoot入门(个人总结)

    @纯属个人学习总结,不喜勿喷哈。(学习来自慕课网)我觉得学习SpringBoot需要具备的前置知识熟悉maven构建项目;懂得Spring注解开发的知识;了解restful API的理论知识(http://www.ruanyifeng.com/blog/2011/09/restful.html)一、SpringBoot介绍我们在做java的项目中经常被xml的配置搞得头大…

    2021年11月30日
  • acwing-171. 送礼物(双向dfs+打标+二分)

    acwing-171. 送礼物(双向dfs+打标+二分)达达帮翰翰给女生送礼物,翰翰一共准备了 N 个礼物,其中第 i 个礼物的重量是 G[i]。达达的力气很大,他一次可以搬动重量之和不超过 W 的任意多个物品。达达希望一次搬掉尽量重的一些物品,请你告诉达达在他的力气范围内一次性能搬动的最大重量是多少。输入格式第一行两个整数,分别代表 W 和 N。以后 N 行,每行一个正整数表示 G[i]。输出格式仅一个整数,表示达达在他的力气范围内一次性能搬动的最大重量。数据范围1≤N≤46,1≤W,G[i]≤231−1输入样例:20 5754

    2022年8月8日
  • Oracle 时间戳转Date

    Oracle 时间戳转Date当前系统时间向前推一个月selectto_char(add_months(sysdate,-1),’yyyy-mm-ddhh24:mi:ss’)fromdual根据13位毫秒向前推一个月,转换为dateselectto_char(add_months(TO_DATE(TO_CHAR(1564588800000/(1000*60*60*24)+…

    2022年6月29日
  • AVI视频文件编码格式不受支持0xc00d5212怎么解决?「建议收藏」

    AVI视频文件编码格式不受支持0xc00d5212怎么解决?「建议收藏」AVI视频格式的优点是图像质量好,但最普遍的现象就是高版本Windows媒体播放器播放不了采用早期编码编辑的AVI格式视频,而低版本Windows媒体播放器又播放不了采用最新编码编辑的AVI格式视频。所以我们在进行一些AVI格式的视频播放时,常会出现由于视频编码问题而造成的视频不能播放或即使能够播放,但存在不能调节播放进度和播放时只有声音没有图像等一些莫名其妙的问题。今天来讲讲编码格式不受…

    2022年9月30日
  • VMWARE虚拟机上网三种方法分析

    VMWARE虚拟机上网三种方法分析VMWARE虚拟机不能上网三种方法分析  PostBy:2009-1-2320:43:00 bridged(桥接模式)、NAT(网络地址转换模式)host-only(主机模式)。理论理解:1.bridged(桥接模式)在这处模式下,虚拟机等同于网络内的一台物理主机,可对手动设置IP,子网掩码,DNS,且IP地址要和主机的IP在同一网段内。这样,虚拟机就和主

    2022年5月19日
  • Pytest(15)pytest分布式执行用例[通俗易懂]

    Pytest(15)pytest分布式执行用例[通俗易懂]前言平常我们功能测试用例非常多时,比如有1千条用例,假设每个用例执行需要1分钟,如果单个测试人员执行需要1000分钟才能跑完当项目非常紧急时,会需要协调多个测试资源来把任务分成两部分,于是执行时间

    2022年7月29日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号