




已阅读5页,还剩7页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
unix域套接字 UNIX 域套接字以 UNIX 路径命名。例如,可以将套接字命名为 /tmp/foo。UNIX 域套接字只在一台主机上的进程之间通信。UNIX 域中的套接字不会被视为网络协议的一部分,因为它们只用于在一台主机上的进程之间通信。 套接字类型定义用户可见的通信属性。Internet 域套接字提供对 TCP/IP 传输协议的访问。Internet 域由值 AF_INET 标识。套接字仅与同一域中的套接字交换数据。创建套接字socket(3SOCKET) 调用创建指定系列和指定类型的套接字。s = socket(family, type, protocol);如果未指定协议(值 0),则系统将选择支持所需套接字类型的协议。将返回套接字句柄(文件描述符)。 系列由 sys/socket.h 中定义的一个常量指定。名为 AF_suite 的常量指定要在解释名称时使用的地址格式。下面创建在同一计算机内部使用的数据报套接字: s = socket(AF_UNIX, SOCK_DGRAM, 0);在大多数情况下,请将 protocol 参数设置为 0(即缺省协议)。本地名称绑定创建套接字时不带名称。只有在套接字绑定到地址之后,远程进程才能引用此套接字。通信进程通过地址连接。 在 UNIX 系列中,连接通常包括一个或两个路径名。UNIX 系列套接字无需始终绑定到名称。如果它们绑定到名称,则从不会存在绑定的重复排序组(如 local pathname 或 foreign pathname)。路径名不能涉及现有文件。 通过 bind(3SOCKET) 调用,进程可以指定套接字的本地地址。这样会创建 local pathname 排序组,而 connect(3SOCKET) 和 accept(3SOCKET) 通过添加地址的远程部分来完成套接字的关联。可以按如下方式使用 bind(3SOCKET): bind (s, name, namelen);套接字句柄为 s。绑定名称是由支持协议解释的字节字符串。UNIX 系列名称包含一个路径名和一个系列。本示例说明将名称 /tmp/foo 绑定到 UNIX 系列套接字。 #include .struct sockaddr_un addr; .strcpy(addr.sun_path, /tmp/foo);addr.sun_family = AF_UNIX;bind (s, (struct sockaddr *) &addr,strlen(addr.sun_path) + sizeof (addr.sun_family);确定 AF_UNIX 套接字的大小时不计空字节,因此可以使用 strlen(3C)。 addr.sun_path 中引用的文件名在系统文件名称空间中创建为套接字。调用方必须对创建 addr.sun_path 的目录具有写权限。不再需要文件时,调用方应将其删除。可以使用 unlink(1M) 删除 AF_UNIX 套接字。 建立连接通常以非对称形式建立连接。一个进程用作客户机,而另一个进程则用作服务器。服务器将套接字绑定到与服务关联的已知地址,并阻塞在套接字上等待连接请求。然后,不相关的进程便可连接到此服务器。客户机通过启动到服务器套接字的连接,向服务器请求服务。在客户端,connect(3SOCKET) 调用启动连接。在 UNIX 系列中,此连接可能如下所示: struct sockaddr_un server;server.sun.family = AF_UNIX; .connect(s, (struct sockaddr *)&server, strlen(server.sun_path) + sizeof (server.sun_family);有关连接错误的信息,请参见连接错误。数据传送介绍如何传送数据。关闭套接字介绍如何关闭套接字。UNIX域流套接字例子:-UNIX域面向连接-UNIX域面向连接的服务器端程序#include#include#include.#define NAME my_sockmain()int orig_sock, /服务器端原来套接字描述符new_sock, /新的套接字描述符clnt_len, /客户端地址长度i; /循环计数器static struct sockaddr_un clnt_adr, /客户-服务器的UNIX地址serv_adr;static char buf128; /消息缓冲区void clean_up(int , char *); /关闭套接字并删除例程if(orig_sock = socket(AF_UNIX,SOCK_STREAM,0) 0)peeror(generate error);exit(1);serv_adr.sun_family = AF_UNIX;strcpy(serv_adr.sun_path,NAME);unlink(NAME);if(bind(orig_sock, (struct sockaddr *)&serv_adr,sizeof(serv_adr.sun_family)+strlen(serv_adr.sun_path) 0)peeror(bind error);clean_up(orig_sock,NAME);exit(2);listen(orig_sock,1);clnt_len = sizeof(clnt_adr);if(new_sock = accept (orig_sock,(struct sockaddr *)&clnt_adr,&clnt_len)0)peeror(accept error);exit (3);for(i =1;i=10;i+)sleep(1);read(new_sock,buf,sizeof(buf);printf(%snn,buf);close(new_sock);clean_up(orig_sock,NAME);exit(0); void clean_up(int sd,char * the_file)close(sd);unlink(the_file);UNIX域面向连接的客户端程序#include#include#include.#define NAME my_sockmain()int orig_sock, /客户端原来套接字描述符i; /循环计数器static struct sockaddr_un serv_adr;static char buf10; /消息缓冲区if(orig_sock = socket(AF_UNIX,SOCK_STREAM,0) 0)peeror(generate error);exit(1);serv_adr.sun_family = AF_UNIX;strcpy(serv_adr.sun_path,NAME);if(connect(orig_sock, (struct sockaddr *)&serv_adr,sizeof(serv_adr.sun_family)+strlen(serv_adr.sun_path) 0)peeror(connect error);exit(1);for(i =1;i=10;i+)sprintf(buf,c: %dnn,i);write(orig_sock,buf,sizeof(buf);close(orig_sock);exit(0); Socket (UDP) -UNIX域无连接-服务器端程序#include#include#include#include#include#include#include#define SERVER_FILE server_socketmain(void)int orig_sock, /服务器端原来套接字描述符clnt_len, /客户端地址长度i; /循环计数器static struct sockaddr_un clnt_adr, /客户-服务器的UNIX地址serv_adr;static char buf128; /消息缓冲区void clean_up(int , char *); /关闭套接字并删除例程if(orig_sock = socket(AF_UNIX,SOCK_DGRAM,0) 0)peeror(generate error);exit(1);serv_adr.sun_family = AF_UNIX;strcpy(serv_adr.sun_path,SERVER_FLIE); /分配名字unlink(SERVER_FLIE);if(bind(orig_sock, (struct sockaddr *)&serv_adr,sizeof(serv_adr.sun_family)+strlen(serv_adr.sun_path) 0)peeror(bind error);clean_up(orig_sock,SERVER_FLIE);exit(2);for(i =1;i=10;i+)recvfrom(orig_sock,buf,sizeof(buf),0,(struct sockaddr *)&clnt_adr,&clnt_len);printf(%snn,buf);clean_up(orig_sock,SERVER_FLIE);exit(0); void clean_up(int sd,char * the_file)close(sd);unlink(the_file);客户端代码#include#include#include#include#include#include#include#define SERVER_FILE server_socketmain(void)int orig_sock,i; static struct sockaddr_un clnt_adr, serv_adr;static char buf128; /消息缓冲区client_flie15;void clean_up(int , char *); /关闭套接字并删除例程serv_adr.sun_family = AF_UNIX;strcpy(serv_adr.sun_path,SERVER_FLIE); /分配名字if(orig_sock = socket(AF_UNIX,SOCK_DGRAM,0) 0)peeror(generate error);exit(1);sprintf(client_file,%07d_socket,getpid();clnt_adr.sun_family = AF_UNIX;strcpy(clnt_adr.sun_path,client_file);if(bind(orig_sock, (struct sockaddr *)&clnt_adr,sizeof(clnt_adr.sun_family)+strlen(clnt_adr.sun_path) 0)peeror(bind error);exit(2);f
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 可选择性捕捞技术创新创业项目商业计划书
- 农产品智慧物流系统集成创新创业项目商业计划书
- 2025年高邮市市级机关公开遴选考试笔试试题(含答案)
- 自动驾驶路线与导航创新创业项目商业计划书
- 输变电设备基础知识培训课件
- 2025年文化旅游演艺项目策划运营中的跨界合作模式创新报告
- 2025年社区心理健康服务人才培训与推广路径研究报告
- 现代教育学原理课件
- 教师资格证考试(中学科目二)教育知识与能力2025年冲刺专项训练试卷
- 2025年Python二级考试考前冲刺试卷 知识点押题实战
- JC-T 2586-2021 装饰混凝土防护材料
- DZ∕T 0227-2010 地质岩心钻探规程(正式版)
- 临床医学工程-题库
- SYT 0452-2021 石油天然气金属管道焊接工艺评定-PDF解密
- 屋顶分布式光伏发电项目EPC总承包工程招投标书范本
- 2000-2015年考研英语一真题及详细解析
- 体检中心礼仪培训课件
- 独立基础教学课件
- 20以内加减法口算题(10000道)(A4直接打印-每页100题)
- 会计从业资格基础知识汇总
- 项目干系人管理评估
评论
0/150
提交评论