unix域套接字的UDP网络编程

unix域套接字的UDP网络编程,服务端如下:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <sys/un.h>

#define SA struct sockaddr
#define PATHNAME "/tmp/unixudp"

void err_sys(const char *errmsg);

int main(void)
{
    int sockfd;
    struct sockaddr_un servaddr, cliaddr;
    char buf[BUFSIZ];
    ssize_t n;
    socklen_t len = sizeof(cliaddr);

    if ((sockfd = socket(AF_LOCAL, SOCK_DGRAM, 0)) == -1)
        err_sys("socket");

    bzero(&servaddr, sizeof(servaddr));
    unlink(PATHNAME);
    servaddr.sun_family = AF_LOCAL;
    strncpy(servaddr.sun_path, PATHNAME, sizeof(servaddr.sun_path) - 1);

    if (bind(sockfd, (SA *)&servaddr, sizeof(servaddr)) == -1)
        err_sys("bind");

    for(;;){
        n = recvfrom(sockfd, buf, sizeof(buf), 0, (SA *)&cliaddr, &len);
        if (n == -1)
            err_sys("recvfrom");
        else
            printf("%s\n", buf);

        if (sendto(sockfd, buf, n, 0, (SA *)&cliaddr, sizeof(cliaddr)) != n)
            err_sys("sendto");

    }
    exit(0);
}

void err_sys(const char *errmsg)
{
    perror(errmsg);
    exit(1);
}

客户端程序:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <sys/un.h>

#define SA struct sockaddr
#define PATHNAME "/tmp/unixudp"

void err_sys(const char *errmsg);

int main(void)
{
    int sockfd;
    struct sockaddr_un servaddr, localaddr;
    char buf[BUFSIZ], s[] = "hello china";
    ssize_t n;

    if ((sockfd = socket(AF_LOCAL, SOCK_DGRAM, 0)) == -1)
        err_sys("socket");

    bzero(&localaddr, sizeof(localaddr));
    localaddr.sun_family = AF_LOCAL;
    strncpy(localaddr.sun_path, tmpnam(NULL), sizeof(localaddr.sun_path) - 1);

    if (bind(sockfd, (SA *)&localaddr, sizeof(localaddr)) == -1)
        err_sys("bind");

    bzero(&servaddr, sizeof(servaddr));
    servaddr.sun_family = AF_LOCAL;
    strncpy(servaddr.sun_path, PATHNAME, sizeof(servaddr.sun_path) - 1);

    for(;;){
        if (sendto(sockfd, s, strlen(s), 0, (SA *)&servaddr, sizeof(servaddr)) == -1)
            err_sys("sendto");
        if ((n = read(sockfd, buf, sizeof(buf))) == -1)
            err_sys("read");
        else
            printf("%s\n", buf);
        usleep((rand() % 10) * 10000);
    }

    exit(0);
}

void err_sys(const char *errmsg)
{
    perror(errmsg);
    exit(1);
}
时间: 2024-12-22 21:53:35

unix域套接字的UDP网络编程的相关文章

《网络编程》Unix 域套接字

概述 Unix 域套接字是一种客户端和服务器在单主机上的 IPC 方法.Unix 域套接字不执行协议处理,不需要添加或删除网络报头,无需验证和,不产生顺序号,无需发送确认报文,比因特网域套接字的效率更高.Unix 域套接字提供字节流(类似于 TCP)和数据报(类似于 UDP)两种接口,UNIX域数据报服务是可靠的,既不会丢失消息也不会传递出错.UNIX域套接字是套接字和管道之间的混合物. Unix 域套接字编程 地址结构: struct sockaddr_un{ sa_family_t sun_

通过UNIX域套接字传递文件描述符

传送文件描述符是高并发网络服务编程的一种常见实现方式.Nebula 高性能通用网络框架即采用了UNIX域套接字传递文件描述符设计和实现.本文详细说明一下传送文件描述符的应用. 1. TCP服务器程序设计范式 ??开发一个服务器程序,有较多的的程序设计范式可供选择,不同范式有其自身的特点和实用范围,明了不同范式的特性有助于我们服务器程序的开发.常见的TCP服务器程序设计范式有以下几种: 迭代服务器 并发服务器,每个客户请求fork一个子进程 预先派生子进程,每个子进程无保护地调用accept 预先

使用Unix域套接字进行跨进程通信

Unix域套接字简介 <Unix环境高级编程>中对Unix域套接字有如下介绍: 虽然socketpair函数创建相互连接的一对套接字,但是每一个套接字都没有名字.这意味着无关进程不能使用它们. 我们可以命名unix域套接字,并可将其用于告示服务.但是要注意的是,UNXI与套接字使用的地址不同与因特网域套接字. UNIX域套接字的地址由sockaddr_un结构表示. 在linux2.4.22中,sockaddr_un结构按下列形式定义在有文件 struct sockaddr_un{ sa_fa

黑马程序员_JAVA UDP网络编程学习笔记

一.UDP网络编程概述 采用TCP协议通信时,客户端的Socket必须先与服务器建立连接,连接建立成功后,服务器端也会持有客户端连接的Socket,客户端的Socket与服务器端的Socket是对应的,它们构成了两个端点之间的虚拟通信链路.与TCP通信不同,UDP是面向无连接的.不可靠的基于数据包的传输协议.即应用进程(或程序)在使用UDP协议之前,不必先建立连接.自然,发送数据结束时也没有连接需要释放.因此,减少了开销和发送数据之前的延时.UDP也采用端口来区分进程. 在java中,java.

Linux高级进程间通信:UNIX域套接字

UNIX域套接字简介 UNIX域套接字用于在同一台机器上运行的进程间的通信.虽然因特网域套接字可用于同一目的,但UNIX域套接字的效率更高.UNIX域套接字仅仅复制数据,它们并不执行协议处理,不需要添加和删除网络报头,无需计算检验和,不要产生顺序号,无需发送确认报文. UNIX域套接字提供流和数据报两种接口.UNIX域数据报服务是可靠的,既不会丢失消息也不会传递错误.UNIX域套接字是套接字和管道之间的混合物.为了创建一对非命名的.相互连接的UNIX域套接字,用户可以使用它们面向网络的域套接字接

Unix域套接字简介

在Linux系统中,有很多进程间通信方式,套接字(Socket)就是其中的一种.但传统的套接字的用法都是基于TCP/IP协议栈的,需要指定IP地址.如果不同主机上的两个进程进行通信,当然这样做没什么问题.但是,如果只需要在一台机器上的两个不同进程间通信,还要用到IP地址就有点大材小用了. 其实很多人并不一定知道,对于套接字来说,还存在一种叫做Unix域套接字的类别,专门用来解决这个问题.其API的掉用方法基本上和普通TCP/IP的套接字一样,只是有些许差别. 因此,再正式介绍之前,先来复习一下套

UNIX域套接字(unix domain)

UNIX域套接字用于在同一台机器上运行的进程之间的通信. UNIX域套接字提供流和数据报两种接口. 创建一对非命名的.相互连接的UNIX域套接字. socketpair 1.命名UNIX域套接字 1)套接字地址格式,在linux下如下所示 struct sockaddr_un { sa_family_t sun_family; char sun_path[108]; } 绑定该地址: #include <stdlib.h> #include <string.h> #include

UDP网络编程

IP地址和端口 IP地址:是计算机在网络中的唯一标示,我们在进行网络编程时一定要定位到远程计算机,而IP地址就是解决这个问题的. 端口:除了计算机外我们还要定位到具体的应用程序进程,而端口就是给应用程序分配的身份标示. UDP和TCP UDP:1,每个数据报中都给出了完整的地址信息,因此无需要建立发送方和接收方的连接.            2,UDP传输数据时是有大小限制的,每个被传输的数据报必须限定在64kB之内.             3,UDP是一个不可靠的协议,发送方所发送的数据报并

TCP 、UDP网络编程作业代写、代写C 语言 TCP程序 Network Programming using C

TCP .UDP网络编程作业代写.代写C 语言 TCP程序Network Programming using COverview? This homework is due by 11:59:59 PM on Thursday, April 26, 2018.? This homework will count as 8% of your final course grade.? This homework is to be completed individually. Do not shar