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);
}
client程序:
#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);
}
版权声明:本文博客原创文章。博客,未经同意,不得转载。
unix域套接字UDP网络编程的更多相关文章
- 《网络编程》Unix 域套接字
概述 Unix 域套接字是一种client和server在单主机上的 IPC 方法.Unix 域套接字不运行协议处理,不须要加入或删除网络报头,无需验证和,不产生顺序号,无需发送确认报文,比因特网域套 ...
- UNIX网络编程——UNIX域套接字编程和socketpair 函数
一.UNIX Domain Socket IPC socket API原本是为网络通讯设计的,但后来在socket的框架上发展出一种IPC机制,就是UNIX Domain Socket.虽然网络soc ...
- UNIX网络编程——通过UNIX域套接字传递描述符和 sendmsg/recvmsg 函数
在前面我们介绍了UNIX域套接字编程,更重要的一点是UNIX域套接字可以在同一台主机上各进程之间传递文件描述符. 下面先来看两个函数: #include <sys/types.h> #in ...
- UNIX域套接字编程和socketpair 函数
一.UNIX Domain Socket IPC socket API原本是为网络通讯设计的,但后来在socket的框架上发展出一种IPC机制,就是UNIX Domain Socket.虽然网络soc ...
- 高级进程间通信之UNIX域套接字
UNIX域套接字用于在同一台机器上运行的进程之间的通信.虽然因特网域套接字可用于同一目的,但UNIX域套接字的效率更高.UNIX域套接字仅仅复制数据:它们并不执行协议处理,不需要添加或删除网络报头,无 ...
- 通过UNIX域套接字传递描述符的应用
传送文件描述符是高并发网络服务编程的一种常见实现方式.Nebula 高性能通用网络框架即采用了UNIX域套接字传递文件描述符设计和实现.本文详细说明一下传送文件描述符的应用. 1. TCP服务器程 ...
- unix进程间通信方式(下)-unix域套接字(转)
在之前的博客中已经总结了其它7种进程间的通信方式.unix域套接字用于在同一台计算机上的进程间通信,虽然因特网域套接字可用于同一目的,但是unix域套接字的效率更高.unix域套接字并不进行协议处理, ...
- UNIX域套接字(unix domain)
UNIX域套接字用于在同一台机器上运行的进程之间的通信. UNIX域套接字提供流和数据报两种接口. 说明:UNIX域套接字比因特网套接字效率更高.它仅赋值数据:不进行协议处理,如添加或删除网络报头.计 ...
- JAVA UDP网络编程学习笔记
一.UDP网络编程概述 采用TCP协议通信时,客户端的Socket必须先与服务器建立连接,连接建立成功后,服务器端也会持有客户端连接的Socket,客户端的Socket与服务器端的Socket是对应的 ...
随机推荐
- HDU 4081-Parsing URL(水)
Parsing URL Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65768/65768 K (Java/Others) Tota ...
- oracle中execute immediate的使用(select/insert/update/delete)(转)
execute immediate的语法如下: execute immediate 'sql'; execute immediate 'sql_select' into var_1, var_2; e ...
- linux下一个Oracle11g RAC建立(四)
linux下一个Oracle11g RAC建立(四) 三.配置共享存储 配置ASM管理准备 1)OCRDISK :存储CRS资源配置信息 2)VOTEDISK:仲裁盘.记录节点状态 3)DataDis ...
- .net Framework各个版本之间的发展
原文:.net Framework各个版本之间的发展 上个星期看到了.NET 4.0框架退休日期逐渐临近文章,发现自己一直在使用NET FrameWork,身为一个NET程序员,里面大概的区别自己还 ...
- 第13章 模版方法模式(Template Method)
原文 第13章 模版方法模式(Template Method) 模板模式 模板模式 举例:模拟下数据库的update方法,先删除在插入. 1 2 3 4 5 6 7 8 9 10 11 12 13 ...
- [POJ 3311]Hie with the Pie——谈论TSP难题DP解决方法
主题连接: id=3311">http://poj.org/problem?id=3311 题目大意:有n+1个点,给出点0~n的每两个点之间的距离,求这个图上TSP问题的最小解 ...
- SVN有用教程
好用的Windows下SVNclient——Tortoise SVN的下载地址: http://tortoisesvn.tigris.org/ 文档: http://www.subversion.or ...
- 程序员的Scala
C#程序员的Scala之路第九章(Scala的层级) 摘要: 1.Scala的类层级Scala里类的顶端是Any所有的类都继承Any类,Any包括以下几个通用方法:final def ==(that: ...
- c/c++ 基金会(七) 功能覆盖,虚函数,纯虚函数控制
1.功能覆盖 ClassA , ClassB ,其中ClassB继承ClassA 类的定义如下面的: #ifndef _CLASSA_H #define _CLASSA_H #include < ...
- ZOJ3640之简单慨率DP
Help Me Escape Time Limit: 2 Seconds Memory Limit: 32768 KB Background If thou doest well, ...