前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Unix-Linux编程实践教程-chapter13-udp

Unix-Linux编程实践教程-chapter13-udp

作者头像
零式的天空
发布于 2022-03-02 08:59:21
发布于 2022-03-02 08:59:21
39100
代码可运行
举报
文章被收录于专栏:零域Blog零域Blog
运行总次数:0
代码可运行

第13章 基于数据报(Datagram)的编程:编写许可证服务器

数据报是从一个socket发送到另一个socket的短消息.数据报socket是不连接的, 每个消息包含有目的地址.数据报(UDP)socket更加简单,快速,给系统增加的负荷 更小.

许可证服务器是用来对被许可程序实施许可证验证规则的,许可证服务器发布许可, 以短消息的形式发送给客户.

许可证服务器必须记住哪个进程使用了哪个票据,必须维持一个内部的数据库.因此, 许可证服务器不同于简单的服务器.

记录系统状态的服务器必须设计成可以处理服务器和客户端的崩溃事件.

有些许可证服务器为一个网络上的多个机器提供服务.有几种设计方法,各有优缺点.

socket可以有两种类型的地址:网络或者本地.本地的socket地址叫做Unix域socket 或名字socket.这种socket使用文件名作为地址,只能在一台机器上交互数据.

code

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/*
 * dgram.c
 * support functions for datagram based programs
 */

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

#define HOSTLEN 256

int make_internet_address();

int make_dgram_server_socket(int portnum)
{
    struct sockaddr_in saddr;
    char hostname[HOSTLEN];
    int sock_id;

    sock_id = socket(PF_INET, SOCK_DGRAM, 0);
    if (sock_id == -1)
        return -1;

    gethostname(hostname, HOSTLEN);
    make_internet_address(hostname, portnum, &saddr);

    if (bind(sock_id, (struct sockaddr *)&saddr, sizeof(saddr)) != 0)
        return -1;

    return sock_id;
}

int make_dgram_client_socket()
{
    return socket(PF_INET, SOCK_DGRAM, 0);
}

int make_internet_address(char *hostname, int port, struct sockaddr_in *addrp)
{
    struct hostent * hp;

    bzero((void*)addrp, sizeof(struct sockaddr_in));
    hp = gethostbyname(hostname);
    if (hp == NULL)
        return -1;

    bcopy((void*)hp->h_addr, (void*)&addrp->sin_addr, hp->h_length);
    addrp->sin_port = htons(port);
    addrp->sin_family = AF_INET;
    return 0;
}

int get_internet_address(char *host, int len, int *portp, struct sockaddr_in *addrp)
{
    strncpy(host, inet_ntoa(addrp->sin_addr), len);
    *portp = ntohs(addrp->sin_port);
    return 0;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016-09-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验