简述socket编程中,udp协议服务器和客户端调用的API的过程。

简述socket编程中,udp协议服务器和客户端调用的API的过程。

在这里插入图片描述
客服端:

#include <stdio.h>
#include <sys/socket.h>//socket
#include <netinet/in.h>//struct sockaddr_in
#include <string.h>//memset
#include <arpa/inet.h>//htons
int main(int argc, char const *argv[])
{
    //创建通信的UDP的套接字(没有port、ip)
    int sockfd = socket(AF_INET, SOCK_DGRAM, 0);
    printf("UDP套接字sockfd=%d\n", sockfd);

    //udp客户端 发送消息 给服务器
    //定义一个IPv4地址结构 存放服务器的地址信息(目的主机)
    struct sockaddr_in ser_addr;
    memset(&ser_addr, 0, sizeof(ser_addr));
    ser_addr.sin_family = AF_INET;//IPv4
    ser_addr.sin_port = htons(8000);//服务器的端口
    //服务器的IP地址
    //IP换成你要发送的IP
    inet_pton(AF_INET, "10.9.21.211", &ser_addr.sin_addr.s_addr);

    //发送数据
    //这个数据随意怎么发
    sendto(sockfd, "hello net", strlen("hello net"), 0,\
    (struct sockaddr *)&ser_addr, sizeof(ser_addr));

     //关闭套接字
    close(sockfd);
    return 0;
}

服务器

#include <stdio.h>
#include <sys/socket.h>//socket
#include <netinet/in.h>//struct sockaddr_in
#include <string.h>//memset
#include <arpa/inet.h>//htons
#include <unistd.h>//close
int main(int argc, char const *argv[])
{
    //创建通信的UDP的套接字(没有port、ip)
    int sockfd = socket(AF_INET, SOCK_DGRAM, 0);
    printf("UDP套接字sockfd=%d\n", sockfd);

    //定义IPv4地址结构 存放本机信息
    struct sockaddr_in my_addr;
    bzero(&my_addr, sizeof(my_addr));
    my_addr.sin_family = AF_INET;
    my_addr.sin_port = htons(9000);
    my_addr.sin_addr.s_addr = htonl(INADDR_ANY);
    //给udp套接字 bind绑定一个固定的地址信息
    bind(sockfd, (struct sockaddr *)&my_addr, sizeof(my_addr));

    //接收udp消息
    while(1)
    {
        //定义一个IPv4地址结构 存放发送者的信息
        struct sockaddr_in from_addr;
        socklen_t from_len = sizeof(from_addr);
		//这个接收的大小最大就是1500,所以这样就行,虽然有点别扭
        unsigned char buf[1500]="";
        int len = recvfrom(sockfd,  buf, sizeof(buf), 0, \
        (struct sockaddr *)&from_addr , &from_len);
        //from_addr存放的就是发送者的信息
        char ip[16]="";
        inet_ntop(AF_INET, &from_addr.sin_addr.s_addr, ip, 16);


        printf("消息来自%s %hu--->", ip, ntohs(from_addr.sin_port));
        printf("len:%d msg:%s\n", len, buf);
    }

     //关闭套接字
    close(sockfd);
    return 0;
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值