




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、LINUX环境高级编程中国地质大学(武汉)计算机学院中国地质大学(武汉)计算机学院 朱静朱静中国地质大学(武汉)计算机学院中国地质大学(武汉)计算机学院进程进程SOCKET通信通信中国地质大学(武汉)计算机学院中国地质大学(武汉)计算机学院SOCKET概述概述SOCKET概述概述中国地质大学(武汉)计算机学院中国地质大学(武汉)计算机学院SOCKET概述概述中国地质大学(武汉)计算机学院中国地质大学(武汉)计算机学院SOCKET概述概述中国地质大学(武汉)计算机学院中国地质大学(武汉)计算机学院服务器端:服务器端:SOCKET概述概述中国地质大学(武汉)计算机学院中国地质大学(武汉)计算机学院
2、SOCKET概述概述中国地质大学(武汉)计算机学院中国地质大学(武汉)计算机学院SOCKET概述概述中国地质大学(武汉)计算机学院中国地质大学(武汉)计算机学院对新协议的支持SOCKET概述概述中国地质大学(武汉)计算机学院中国地质大学(武汉)计算机学院SOCKET通信通信中国地质大学(武汉)计算机学院中国地质大学(武汉)计算机学院SOCKET通信通信中国地质大学(武汉)计算机学院中国地质大学(武汉)计算机学院SOCKET通信通信中国地质大学(武汉)计算机学院中国地质大学(武汉)计算机学院SOCKET通信通信中国地质大学(武汉)计算机学院中国地质大学(武汉)计算机学院SOCKET通信通信中国地
3、质大学(武汉)计算机学院中国地质大学(武汉)计算机学院SOCKET通信通信中国地质大学(武汉)计算机学院中国地质大学(武汉)计算机学院网络字节顺序网络字节顺序网络字节顺序网络字节顺序SOCKET通信通信中国地质大学(武汉)计算机学院中国地质大学(武汉)计算机学院SOCKET通信通信中国地质大学(武汉)计算机学院中国地质大学(武汉)计算机学院SOCKET通信通信中国地质大学(武汉)计算机学院中国地质大学(武汉)计算机学院SOCKET通信通信中国地质大学(武汉)计算机学院中国地质大学(武汉)计算机学院v 接受客户请求接受客户请求accept() 服务器服务器int accept(int fd,st
4、ruct sockaddr* address,int* addressLen) 监听fd所指向的服务器的命名套接字,一直等到收到一个客户端的连接请求。 收到请求后,accept()创建一个未命名套接字,其属性和原来的服务器命名套接字相同,把该未命名套接字连接到客户端套接字,并返回一个新的文件描述符,用于和客户端的通信。 原来的服务器命名套接字继续接受其他客户端的连接请求。 address结构中填写的是客户端的地址,通常只和Internet连接合用。addressLen最初应设为指向一个包含address所指向结构大小的整数,当连接建立后,该整数被设为所得到的address的实际字节大小。 调用
5、成功返回一个新的文件描述符,用于和客户的通信;失败返回-1。 SOCKET通信通信中国地质大学(武汉)计算机学院中国地质大学(武汉)计算机学院服务器命名套接字服务器命名套接字服务器命名套接字未命名套接字客户端客户端未命名套接字SOCKET通信通信中国地质大学(武汉)计算机学院中国地质大学(武汉)计算机学院SOCKET通信通信中国地质大学(武汉)计算机学院中国地质大学(武汉)计算机学院SOCKET通信通信中国地质大学(武汉)计算机学院中国地质大学(武汉)计算机学院SOCKET通信通信中国地质大学(武汉)计算机学院中国地质大学(武汉)计算机学院说明:socket套接字通信是双向的SOCKET通信通
6、信中国地质大学(武汉)计算机学院中国地质大学(武汉)计算机学院要实现远程网络通信,客户端需要了解服务器的要实现远程网络通信,客户端需要了解服务器的IP地址和端口号。地址和端口号。SOCKET通信通信中国地质大学(武汉)计算机学院中国地质大学(武汉)计算机学院/etc/servicesSOCKET通信通信中国地质大学(武汉)计算机学院中国地质大学(武汉)计算机学院SOCKET通信通信中国地质大学(武汉)计算机学院中国地质大学(武汉)计算机学院hostent结构中包含了主机关联的IP地址SOCKET通信通信中国地质大学(武汉)计算机学院中国地质大学(武汉)计算机学院SOCKET通信通信中国地质大学
7、(武汉)计算机学院中国地质大学(武汉)计算机学院SOCKET通信通信中国地质大学(武汉)计算机学院中国地质大学(武汉)计算机学院SOCKET通信通信中国地质大学(武汉)计算机学院中国地质大学(武汉)计算机学院SOCKET通信通信中国地质大学(武汉)计算机学院中国地质大学(武汉)计算机学院v打开所需端口方法一:方法一:1,安装 xinetd#yum install xinetd2,修改 /etc/xinetd.d目录中daytime文件中 disable项 disable = no3,重启 xinetd 服务#service xinetd restart 中国地质大学(武汉)计算机学院中国地质大
8、学(武汉)计算机学院SOCKET通信通信v打开所需端口方法二:方法二:/sbin/iptables -I INPUT -p tcp -dport 13 -j ACCEPT #开启端口/etc/rc.d/init.d/iptables save #保存配置 /etc/rc.d/init.d/iptables restart #重启服务 /etc/init.d/iptables status 或者 iptables L n #查看端口是否开放中国地质大学(武汉)计算机学院中国地质大学(武汉)计算机学院SOCKET通信通信SOCKET通信通信中国地质大学(武汉)计算机学院中国地质大学(武汉)计算机学
9、院 协议名如果hints结构为空指针,其成员值被置为默认值AI_PASSIVE,AI_CANONNAME,AI_NUMERICHOST /AF_INET,AF_INET6 /SOCK_STREAM,SOCK_DGRAM /PPROTO_UDP, IPPROTO_TCP,etc /ai_addr的长度SOCKET通信通信中国地质大学(武汉)计算机学院中国地质大学(武汉)计算机学院对于对于getaddrinfo函数调用的主要参数值指定:函数调用的主要参数值指定:1 hostname和和service。TCP或或UDP客户进程客户进程调用getaddrinfo需要设置的主要参数。该调用返回后,TCP
10、客户通常在一个循环中对每个返回的IP地址逐一调用socket和connect,直到一个连接成功,或者所有的地址尝试完毕为止。UDP客户由getaddrinfo填入的套接口地址结构用于调用sendto或connect。如果客户能够判断第一个地址不工作,可以尝试其余的地址。如果客户清楚自己只处理一种类型的套接口,应把hints结构的ai_socktype成员设置成SOCK_STREAM或者SOCK_DGRAM.SOCKET通信通信中国地质大学(武汉)计算机学院中国地质大学(武汉)计算机学院 2 典型的典型的服务器进程服务器进程只指定只指定service而不指定而不指定hostname,同时在,同时
11、在hints结构中指定结构中指定AI_PASSIVE标志标志(表示套接字接受任何地址的连接)。(表示套接字接受任何地址的连接)。返回的套接字地址结构中应含有一个值为INADDR_ANY(IPv4)或者IN6ADDR_ANY_INIT(IPv6)的IP地址。TCP服务器随后调用socket、bind和listen。如果服务器清楚自己只处理一种套接字,那么应该把hints结构的ai_socktype成员设置成SOCK_STREAM或者SOCK_DGRAM。这样可以避免返回多个结构,其中可能包含错误的ai_socktype值。SOCKET通信通信中国地质大学(武汉)计算机学院中国地质大学(武汉)计算
12、机学院3 服务器程序的另一种设计方法是使用服务器程序的另一种设计方法是使用select或者或者poll函数让服务器进程处理多个套接字。函数让服务器进程处理多个套接字。这种情形下,服务器将遍历由getaddrinfo返回的整个addrinfo结构链表,并为每个addrinfo创建一个套接字,再使用select或者poll 函数SOCKET通信通信中国地质大学(武汉)计算机学院中国地质大学(武汉)计算机学院关于关于getaddrinfo返回值的说明:返回值的说明: 1 如果与hostname参数关联的地址有多个,那么适用于所请求地址簇的每个地址都返回一个对应的结构。 2 如果service参数指定
13、的服务支持多个套接字类型,那么每个套接字类型都可能返回一个对应的结构,具体取决于hints结构的ai_socktype成员。addrinfo结构中返回的信息可直接作为socket、connect、sendto、bind等系统调用的参数如果在hints的ai_flags设置了AI_CANONNAME标志,那么本函数返回的第一个addrinfo结构的ai_canonname成员指向所查找的主机的规范名。SOCKET通信通信中国地质大学(武汉)计算机学院中国地质大学(武汉)计算机学院例: getaddrinfo系统调用 struct addrinfo hints, *res; memset(hint
14、s,0, sizeof(hints) ); hints.ai_flags = AI_CANONNAME; hints.ai_family = AF_INET; getaddrinfo( freebsd4, domain, &hints, &res ) SOCKET通信通信中国地质大学(武汉)计算机学院中国地质大学(武汉)计算机学院#includevoid freeaddrinfo( struct addrinfo *ai );ai参数应指向由参数应指向由getaddrinfo返回的第一个返回的第一个addrinfo结构。结构。这个链表中的所有结构以及由它们所指向的任何动态存储空间这个链表中的所有结构以及由它们所指向的任何动态存储空间(譬如套接字地址结构和规范主机名)都被释放掉。(譬如套接字地址结构和规范主机名)都被释放掉。SOCKET通信通信中国地质大学(武汉)计算机学院中国地质大学(武汉)计算机学院SOCKET通信通信中国地质大学(武汉)计算机学院中国地质大学(武汉)计算机学院SOCKET通信通信中国地质大学(武汉)计算机学院中国地质大学(武汉)计算机学院SOCKET通信通信中国地质大学(武汉)计算机学院中国地质大学(武汉)计算机学院SOCKET通信通信中国地质大学(武汉)计算机学院中国地质大学(武汉)计算机学院SOCKET通信通信中国地质大
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度长途包车合同协议书样本
- 医院装修合同终止协议
- 社区布线施工合同范本
- 柴油供应居间合同范本
- 木屋施工合同范本
- 劳动合同范本范本
- 设备转让合同范本
- 挖掘机融资租赁合同范本
- 2025年住宅装修工程合同范本参考
- 2025年消防安全责任合同
- 1.1青春的邀约 教学课件 2024-2025学年七年级道德与法治下册(统编版2024)
- 2024年财政部会计法律法规答题活动题目及答案一
- 2024年01月广州期货交易所2024年招考笔试历年参考题库附带答案详解
- 中小学教师家访记录表内容(18张)8
- 贸易术语案例讨论题汇总
- 建筑工地紧急事件处理流程图
- 中山市培养引进紧缺适用人才导向目录(2011-2012年)
- 小学三年级下册开学语文老师家长会发言
- 对讲机测试报告
- 3、分段计费问题
- 防渗墙专项施工方法
评论
0/150
提交评论