-
Chapter 9 通讯端
9.1 何谓socket (通讯端)?
Socket是一种通讯的机制可以让单一台电脑上以Client/Server的方式来进行资料的传输与讯息的沟通.或是多台电脑也可在网路上进行Socket的程式开发以达到多点通讯的效果.Socket与一般通讯机制最大的不同点在於,Socket在进行通讯时,将必须将电脑的角色分成client与server,通常可以分成单一client或多重client.
9.2 Socket(通讯端)连结之简介
一般在使用socket通讯时,分身为server的应用程式必需先建立一个通讯端(socket) 再以bind系统呼叫(system call)来完成通讯端的命名server的应用程式会以listen系统呼叫来建立一个伫列(queue) 再以accept系统呼叫来进行接收 建立好连线之后,通讯端可看做是一个低阶的档案描述子(file descriptor),程式就只要利用read及write指令即可完成双向的资料通讯.
说明:左边下方的三个是正被server应用程式接收Connect request 6、7、8Connect Request 5正要被放入queue中listen所建立的queue中己经有Connect request 2、3、4 图中的右边即表示目前Connect request 1 己经被accept指令所接收
9.3 Socket(通讯端)指令与资料结构 (Structures)之介绍
Socket提供了两种通讯型式AF_UNIX主要是用来让单一台电脑内的两个应用程式,利用标准(或非标准)装置的埠(PORT)来做资料的传输.AF_INET 基本的Internet Protocol(IP)的通讯协定,其又可分为stream与datagram等两层的服务Stream是一种可靠的双向通讯方式,可确保资料的完整性 Datagram是一种不需要建立连结的通讯方式,无法保证所传送出资料的完整性
9.3.1 建立通讯端 (socket)
建立一个新的通讯端(socket),其指令原型即参数如下:int socket(int domain, int type, int protocol)Doman : AF_UNIX UNIX files system socketsAF_INET UNIX network sockets AF_ISO ISO standard protocols AF_NS Xerox Network Systems protocols AF_IPX Novell IPX protocolType : SOCK_STREAM(TCP),SOCK_DGRAM(UDP)Protocol : default 0
9.3.2 通讯端(socket)资料结构 (structure)
AF_UNIX的通讯端类别之资料结构如下:(#include <sys/un.h>):struct sockaddr_un{sa_family_tsun_family; /*AF_UNIX*/charsun_path[];/*pathname*/};上列中sun_family一般设定为AF_UNIX,而在AF_UNIX网址中,位址由一个sun_path[]栏位中的档名所指定.
Example :int sockfd;struct sockaddr_unaddress;sockfd = socket(AF_UNIX,SOCK_STREAM,0);address.sun_family = AF_UNIX;strcpy(address.sun_path, "server_socket");
AF_INET通讯端类别,其资料结构如下:(#include <sys/in.h>):struct sockaddr_in{short int sin_family; /*AF_INET*/unsigned short int sin_port; /*Port number*/struct in_addr sin_addr; /*Internet address*上述中的sin_family在这里必须设定为AF_INET,而sin_port所要设定的就是我们所要在网路上做传输的埠(port)编号,而sin_addr为一个in_addr的资料结构.
Example:int sockfd;struct sockaddr_inaddress;sockfd = socket(AF_INET,SOCK_STREAM,0);address.sun_family = AF_INET;address.sin_addr.s_addr = inet_addr(" ");address.sin_port = 5566;
9.3.3 通讯端(socket)之命名
当建立一个socket后,必须再给它一个名字,其名字是将之前所设定的address值与建立socket后所得到的一个描述子(descriptor)来做连结,以方便电脑内部的运作.
其函数的原型如下:int bind(int socket, const struct socket * address, size_t address_len);socket : return value from socket function利用socket函数产生socket后所回传的参数值 *address : struct sockaddr_un, struct sockaddr_in对映於通讯端(socket)所宣告的资料结构address_len : address length参数为资料结构的大小当成功后,函式会传回0以代表成功,若失败即传回-1.
9.3.4 产生通讯端伫列(queue)
建立一个queue以接收其他程式所送达的连线要求(request) int listen(int socket, int backlog)socket : return value from socket function为所新建立的socket descriptor Backlog : Queue length代表所欲建立的queue大小为多少 当成功后,函式会传回0以代表成功,若失败即传回-1.
9.3.5 Server端接收连结
当产生了一个伫列(queue)后,再来就是要把queue中的连结请求(Connect Request)读出其函数的原型如下:int connect(int socket, const struct sockaddr *address, size_t address_len)socket : return value from socket function为新建立的socket descriptor *address : struct sockaddr_un, struct sockaddr_in对映於通讯端(socket)所宣告的资料结构 address_len : address length 为address资料结构的大小
9.4 电脑主机与网路的位元组顺序转换
不用的电脑平台会有不同的位元组顺序(byte order),而且不仅是电脑与电脑之间,在网路(Internet)上其位元组顺序也会有不同.所以为了让不同类型的电脑可以在网路上判别彼此的讯息,所以有定义了一些位元组排序的函式.client与server在传输之前,可将其内部的整数表示转换换成网路(Internet)的排序方式,其定义在netinet/in.h中.
其函数的原型如下:Host to network, longunsigned long int htonl(unsigned long int hostlong)Host to network, shortunsigned short int htons(unsigned short int hostshort)Network to host, longunsigned long int ntohl(unsigned long int netlong)Network to host, shortunsigned long int ntohs(unsigned long int netshort) 上述之函数可在主机端与网路之间做16与32位元整数的排序转换,所以上述函数htons为例,即表示host to network其资料型态为short.
实验:
以AF_UNIX和AF_INET两种通讯端(socket)类别来做例子. 主要的不同在建立通讯端(socket)以及资料结构的设定在这两个例子中:其程式一开始必须先由server端先执行并建立一个新的通讯端(socket)完成命名(以bind指令)以及产生通讯端伫列(以listen指令)以accept指令来等待client端送去连线要求(connect request),并送出一个字元'A',当server端收到后,即回传字元'B'给client.
Create an unnamed socket for the server
Name the socket structure
Create a
…… 欲阅读全文,请下载!
- 立即下载:注意:请一定升级到最新版[OFFICE]才能正常打开本站提供的文档![常见问题指南]
- 相关文档:
- →96学年度技术校院日间部四年制申请入学第一阶段筛选结果
- →国中部96学年度班级社团名单
- →97国小范例
- →国立台湾大学95年度技工工友在职训练
- →敦豪物流2008年7月至9月交通管控期间应对方案
- →台湾电力股份有限公司 97 年度养成班甄试简章
- →金溪县1990年--2007年社会抚养费征收标准
- →2004年9月北京·第47届国际聋人节暨聋人教育研讨会
- →GC89 用户手册
- →中华民国 94 年10 月28 日本校招生委员会议通过
- 更多相关 GO!→
- 相关搜索:
- →GOOGLE中搜索"Chapter 9 通讯端"相关网站.
- →BAIDU中搜索"Chapter 9 通讯端"相关网站.
- →YAHOO中搜索"Chapter 9 通讯端"相关网站.
- →LIVE中搜索"Chapter 9 通讯端"相关网站.
- →YODAO中搜索"Chapter 9 通讯端"相关网站.
- 注意事项:
- ☉如果这个文档总是不能下载的请点击报告错误,谢谢合作!!
- ☉注意:下载文档后请第一时间查毒!文档太多,站长没可能都查过的,请自己小心点!谢谢合作!
- ☉欢迎广大作者给我们提供文档以及使用说明;如有其它问题,欢迎发信联系管理员,谢谢!
本类下载TOP10
数据载入中…