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

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

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

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);
}

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

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Map集合的遍历[通俗易懂]

    Map集合的遍历[通俗易懂]COPY/***Map接口的使用*特点:1.存储键值对2.键不能重复,值可以重复3.无序*/publicclassDemo1{ publicstaticvoidmain(String[]args){ Map<String,Integer>map=newHashMap<String,Integer>(); //1.添加元素 map.put(“tang”,21); map.put(“he”,22); map.put(“

  • linux删除软连接命令_linux删除链接文件夹

    linux删除软连接命令_linux删除链接文件夹linux删除软链接的正确做法

  • 三菱modbusRTU通讯实例_PLC编程入门梯形图实例讲解[通俗易懂]

    三菱modbusRTU通讯实例_PLC编程入门梯形图实例讲解[通俗易懂]点击箭头处“工业之家”,选择“关注公众号”!PLC编程入门梯形图实例讲解■上升沿下降沿梯形图解析上升沿:上升沿就是此点从不通到通的过程,在PLC里面表现就是只通一次。举例:如上图,当按钮1未按下的时候按钮1是断开的,此点不通,当按钮1被按下,按钮1导通,上面上升沿指令表示当按钮1按下去后,PLC只通一次,后面不管按钮1是否按下,整条线路都不通。下降沿:下降沿就是此点从通到不通的过程,在…

  • 云服务器和虚拟主机有哪些区别

    云服务器和虚拟主机有哪些区别虚机主机就是利用技术把一台服务器分成多个“虚拟”的主机,这些划分出来的主机具有独立的域名,和具有完整的Internet服务器功能,划分出来的虚拟主机共享服务器的宽带和IP。虚机主机之所以使用率较高,是因为相对于购买服务器和租用专线的费用,虚机主机价格便宜,操作简单。但虚机主机没有独立的操作系统,只能通过提供的控制面板操作。虚拟主机由于是共享主机,稳定性较差,访问速度有限。云服务器又叫云主

  • 用MATLAB GUI做一个简单的绩点计算界面

    用MATLAB GUI做一个简单的绩点计算界面本文主要记录如何用MATLAB自带的GUI功能做一个绩点计算界面。并以此来简单介绍一下MATLABGUI的使用过程。完整代码见:https://github.com/ZhouJiaHuan/compute-GPA-master启动guide工具箱guide是MATLAB用来制作GUI界面的工具性,我们只要在MATLAB命令窗口中输入命令guide即可打开GUI制作界面,如下图:…

  • 自定义QTreeView

    自定义QTreeViewQt之QTreeView(一) (2014-12-2316:51:33)转载▼标签: qt qtreeview qtableview qabstractitemmodel分类: Qt    之前有讲解过QTableView的使用Qt之QTableView,这节讲解一下也较为常用

发表回复

您的电子邮箱地址不会被公开。

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